Use PBD::demangle_symbol in PBD::demangled_name<T> to reduce code duplication

This commit is contained in:
Tim Mayberry
2015-10-29 22:41:38 +10:00
parent 36fa670309
commit e025415516
2 changed files with 11 additions and 24 deletions

View File

@@ -40,6 +40,11 @@ PBD::demangle_symbol (const std::string& mangled_symbol)
}
#endif
/* Note: on win32, you can use UnDecorateSymbolName.
See http://msdn.microsoft.com/en-us/library/ms681400%28VS.85%29.aspx
See also: http://msdn.microsoft.com/en-us/library/ms680344%28VS.85%29.aspx
*/
return mangled_symbol;
}

View File

@@ -24,34 +24,10 @@
#include <cstdlib>
#include <typeinfo>
#ifdef __GNUC__
#include <cxxabi.h>
#endif
#include "pbd/libpbd_visibility.h"
namespace PBD
{
template<typename T> /*LIBPBD_API*/
std::string demangled_name (T const & obj)
{
#ifdef __GNUC__
int status;
char * res = abi::__cxa_demangle (typeid(obj).name(), 0, 0, &status);
if (status == 0) {
std::string s(res);
free (res);
return s;
}
#endif
/* Note: on win32, you can use UnDecorateSymbolName.
See http://msdn.microsoft.com/en-us/library/ms681400%28VS.85%29.aspx
See also: http://msdn.microsoft.com/en-us/library/ms680344%28VS.85%29.aspx
*/
return typeid(obj).name();
}
/**
* @param symbol a mangled symbol/name
@@ -66,6 +42,12 @@ namespace PBD
*/
LIBPBD_API std::string demangle(const std::string& str);
template<typename T>
std::string demangled_name (T const & obj)
{
return demangle_symbol(typeid(obj).name());
}
} // namespace
#endif // __libpbd_demangle_h__