mangling.cpp
00001 #include <util/mangling.h>
00002 #include <sstream>
00003 #include <QString>
00004 #include <stdlib.h>
00005
00006
00007 #ifdef __GNUC__
00008 #include <cxxabi.h>
00009 #endif
00010
00011 namespace util
00012 {
00013 #ifdef __GNUC__
00014 QString qdemangle(std::string s)
00015 {
00016 std::istringstream ss(s);
00017 int status;
00018 std::string name;
00019 QString result;
00020 while(ss)
00021 {
00022 ss >> name;
00023 if( !ss )
00024 break;
00025 char *realname = abi::__cxa_demangle(name.c_str(), 0, 0, &status);
00026 if(status)
00027 {
00028 result += QString::fromStdString(name);
00029 }
00030 else
00031 {
00032 result += QString::fromLocal8Bit(realname);
00033 free(realname);
00034 }
00035 result += " ";
00036 }
00037 result.chop(1);
00038 return result;
00039 }
00040
00041 std::string demangle(std::string s)
00042 {
00043 QString res = qdemangle(s);
00044 return res.toStdString();
00045 }
00046
00047 #else
00048 std::string demangle(std::string s)
00049 {
00050 return s;
00051 }
00052
00053 QString qdemangle(std::string s)
00054 {
00055 return QString::fromStdString(s);
00056 }
00057 #endif
00058 }