29 std::regex
regexp(exp, std::regex::egrep);
30 while (std::regex_match(input,
regexp)) {
32 input.swap(newstring);
38 char const*
const delimiters =
"<>";
40 while ((index = demangledName.find(toRemove)) != std::string::npos) {
43 while ((inx = demangledName.find_first_of(delimiters, inx)) != std::string::npos) {
44 if (demangledName[inx] ==
'<') {
49 demangledName.erase(index, inx + 1 - index);
50 if (demangledName[index] ==
' ' && (index == 0 || demangledName[index - 1] !=
'>')) {
51 demangledName.erase(index, 1);
61 void constBeforeIdentifier(
std::string& demangledName) {
65 while ((index = demangledName.find(toBeMoved)) != std::string::npos) {
66 demangledName.erase(index, asize);
69 char const c = demangledName[inx];
72 }
else if (depth > 0) {
75 }
else if (c ==
'<' || c ==
',') {
76 demangledName.insert(inx + 1,
"const ");
89 while ((pos = demangledName.find(from, pos)) != std::string::npos) {
90 demangledName.replace(pos, length, to);
96 size_t*
const nullSize =
nullptr;
97 char*
const null =
nullptr;
100 char*
demangled = abi::__cxa_demangle(mangledName, null, nullSize, &status);
102 throw cms::Exception(
"Demangling error") <<
" '" << mangledName <<
"'\n";
118 removeParameter(demangledName, allocator);
121 removeParameter(demangledName, comparator);
123 constBeforeIdentifier(demangledName);
127 reformatter(demangledName,
"(.*[<,][0-9]+)[ul]l*([,>].*)",
"$1$2");
129 replaceString(demangledName,
"unsigned long long",
"ULong64_t");
132 return demangledName;
void replaceString(std::string &demangledName, std::string const &from, std::string const &to)
static std::string const input
std::string typeDemangle(char const *mangledName)