Use PBD::demangle_symbol in PBD::demangled_name<T> to reduce code duplication
authorTim Mayberry <mojofunk@gmail.com>
Thu, 29 Oct 2015 12:41:38 +0000 (22:41 +1000)
committerTim Mayberry <mojofunk@gmail.com>
Tue, 1 Dec 2015 04:22:38 +0000 (14:22 +1000)
libs/pbd/demangle.cc
libs/pbd/pbd/demangle.h

index cd084ec3c9418a965c6b5e0fe4a1776e43fccb4d..97d4e1192689ad4487518158b43317b59cc6bdd8 100644 (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;
 }
 
index 98b8bf787c9b78693384b3c4d6ada60937a48217..71eca1658314b537a8fd2931f7866e177299e628 100644 (file)
 #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__