{
char *operator_string_begin = const_cast<char *>(strstr(demangled_symbol, "operator"));
if(operator_string_begin != NULL)
{
char *operator_string_end = operator_string_begin+8;
while(*operator_string_end == ' ') operator_string_end++;
if(strstr(operator_string_end, "delete[]")==operator_string_end)
{
operator_string_end+=8;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "delete")==operator_string_end)
{
operator_string_end+=6;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "new[]")==operator_string_end)
{
operator_string_end+=5;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "new")==operator_string_end)
{
operator_string_end+=3;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, ">>=")==operator_string_end)
{
operator_string_end+=3;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "<<=")==operator_string_end)
{
operator_string_end+=3;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "->*")==operator_string_end)
{
operator_string_end+=3;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "<<")==operator_string_end)
{
operator_string_end+=2;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, ">>")==operator_string_end)
{
operator_string_end+=2;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, ">=")==operator_string_end)
{
operator_string_end+=2;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "<=")==operator_string_end)
{
operator_string_end+=2;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "==")==operator_string_end)
{
operator_string_end+=2;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "!=")==operator_string_end)
{
operator_string_end+=2;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "|=")==operator_string_end)
{
operator_string_end+=2;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "&=")==operator_string_end)
{
operator_string_end+=2;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "^=")==operator_string_end)
{
operator_string_end+=2;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "%=")==operator_string_end)
{
operator_string_end+=2;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "/=")==operator_string_end)
{
operator_string_end+=2;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "*=")==operator_string_end)
{
operator_string_end+=2;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "-=")==operator_string_end)
{
operator_string_end+=2;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "+=")==operator_string_end)
{
operator_string_end+=2;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "&&")==operator_string_end)
{
operator_string_end+=2;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "||")==operator_string_end)
{
operator_string_end+=2;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "[]")==operator_string_end)
{
operator_string_end+=2;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "()")==operator_string_end)
{
operator_string_end+=2;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "++")==operator_string_end)
{
operator_string_end+=2;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "--")==operator_string_end)
{
operator_string_end+=2;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "->")==operator_string_end)
{
operator_string_end+=2;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "<")==operator_string_end)
{
operator_string_end+=1;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, ">")==operator_string_end)
{
operator_string_end+=1;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "~")==operator_string_end)
{
operator_string_end+=1;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "!")==operator_string_end)
{
operator_string_end+=1;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "+")==operator_string_end)
{
operator_string_end+=1;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "-")==operator_string_end)
{
operator_string_end+=1;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "*")==operator_string_end)
{
operator_string_end+=1;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "/")==operator_string_end)
{
operator_string_end+=1;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "%")==operator_string_end)
{
operator_string_end+=1;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "^")==operator_string_end)
{
operator_string_end+=1;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "&")==operator_string_end)
{
operator_string_end+=1;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "|")==operator_string_end)
{
operator_string_end+=1;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, ",")==operator_string_end)
{
operator_string_end+=1;
*operator_string_end='\0';
}
else if(strstr(operator_string_end, "=")==operator_string_end)
{
operator_string_end+=1;
*operator_string_end='\0';
}
return operator_string_begin;
}
char *end_of_demangled_name = const_cast<char *>(strrchr(demangled_symbol, ')'));
if(end_of_demangled_name != NULL)
{
int pars = 1;
while(pars>0 && end_of_demangled_name!=demangled_symbol)
{
c = *(--end_of_demangled_name);
if(c==')')
{
pars++;
}
else if(c=='(')
{
pars--;
}
}
}
else
{
return demangled_symbol;
}
char *end_of_func_name = end_of_demangled_name;
if(end_of_func_name != NULL)
{
*end_of_func_name = '\0';
char c = *(--end_of_func_name);
if(c=='>')
{
int pars = 1;
while(pars>0 && end_of_func_name!=demangled_symbol)
{
c = *(--end_of_func_name);
if(c=='>')
{
pars++;
}
else if(c=='<')
{
pars--;
}
}
*end_of_func_name = '\0';
}
c = *(--end_of_func_name);
while(isalnum(c) || c=='_' || c=='~')
{
c = *(--end_of_func_name);
}
return ++end_of_func_name;
}
return demangled_symbol;
}