00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <cxxabi.h>
00021
00022 #include <archon/util/cxx_demangle.H>
00023
00024 using namespace std;
00025
00026 namespace Archon
00027 {
00028 namespace Utilities
00029 {
00030 string cxxDemangle(string mangledName)
00031 {
00032 #if __GNUC__ < 3 || __GNUC__ == 3 && __GNUC_MINOR__ < 2
00033 return mangledName;
00034 #else
00035 const size_t bufferSize = 256;
00036 char buffer[bufferSize];
00037 size_t size = bufferSize;
00038 int status = 0;
00039 abi::__cxa_demangle(mangledName.c_str(), buffer, &size, &status);
00040 return status ? mangledName : buffer;
00041 #endif
00042 }
00043 }
00044 }