Use PBD::demangle_symbol in PBD::demangled_name<T> to reduce code duplication
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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__
|
||||
|
||||
Reference in New Issue
Block a user