Avoid assert() when loading xml: Throw an XMLerror if attribute_value fails.
[ardour.git] / libs / pbd / pbd / demangle.h
index adace5d46f62e4f156b062e372052ac15fe9dd46..9e28abe60072ac6b9473af01bb9cd9d30c6e28d3 100644 (file)
 
 #include <string>
 #include <cstdlib>
+#include <typeinfo>
 
-#ifdef __GNUC__
-#include <cxxabi.h>
-#endif
+#include "pbd/libpbd_visibility.h"
 
 namespace PBD
 {
-       template<typename T>
-       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
-               return typeid(obj).name();
-       }
+
+/**
+ * @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 <typename T>
+std::string demangled_name(T const& obj)
+{
+       return demangle_symbol(typeid(obj).name());
+}
+
 } // namespace
 
 #endif // __libpbd_demangle_h__