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 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
Generated on Fri May 31 15:37:53 2013 for VVE by  doxygen 1.6.3