X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fpbd%2Fpbd%2Fdemangle.h;h=71eca1658314b537a8fd2931f7866e177299e628;hb=e0254155162f202e259cd8c3d189fa4f8e1f8b75;hp=12dc58839c064977bd1e263482023a23b7706d94;hpb=8c9749e42faf7808034ed8b7afce4a2fe6dc6f33;p=ardour.git diff --git a/libs/pbd/pbd/demangle.h b/libs/pbd/pbd/demangle.h index 12dc58839c..71eca16583 100644 --- a/libs/pbd/pbd/demangle.h +++ b/libs/pbd/pbd/demangle.h @@ -24,34 +24,30 @@ #include #include -#ifdef __GNUC__ -#include -#endif - #include "pbd/libpbd_visibility.h" namespace PBD { - template /*LIBPBD_API*/ + + /** + * @param symbol a mangled symbol/name + * @return a demangled symbol/name + */ + LIBPBD_API std::string demangle_symbol(const std::string& symbol); + + /** + * @param str a string containing a mangled symbol/name + * @return a string with the mangled symbol/name replaced with a demangled + * name + */ + LIBPBD_API std::string demangle(const std::string& str); + + template 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(); + return demangle_symbol(typeid(obj).name()); } + } // namespace #endif // __libpbd_demangle_h__