ALib C++ Library
Library Version: 1912 R0
Documentation generated by doxygen
typedemangler.cpp
1 // #################################################################################################
2 // ALib C++ Library
3 //
4 // Copyright 2013-2019 A-Worx GmbH, Germany
5 // Published under 'Boost Software License' (a free software license, see LICENSE.txt)
6 // #################################################################################################
8 
9 #if !defined(ALIB_DOX)
10 #if !defined(HPP_ALIB_COMPILERS)
11 # include "alib/lib/compilers.hpp"
12 #endif
13 #endif // !defined(ALIB_DOX)
14 
15 #if ALIB_DEBUG
16 
17 #if !defined(ALIB_DOX)
18 #if !defined (HPP_ALIB_FS_DEBUG_TYPEDEMANGLER)
20 #endif
21 
22 #if defined(__GNUC__) || defined(__clang__)
23 # include <cxxabi.h>
24 # include <cassert>
25 #endif
26 
27 #if !defined(_GLIBCXX_CSTDLIB) && !defined(_CSTDLIB_)
28 # include <cstdlib>
29 #endif
30 
31 #if defined(_WIN32) && !defined(_CSTRING_)
32 # include <cstring>
33 #endif
34 #endif // !defined(ALIB_DOX)
35 
36 namespace aworx { namespace lib {
37 
38  #if defined(__GNUC__) || defined(__clang__)
39 
40  DbgTypeDemangler::DbgTypeDemangler( const std::type_info& typeInfo )
41  {
42  int status;
43  name= abi::__cxa_demangle( typeInfo.name(), nullptr, nullptr, &status);
44  assert( status==0 );
45  }
46 
48  {
49  if ( name )
50  std::free(static_cast<void*>( const_cast<char*>(name) ) );
51  }
52 
53  const char* DbgTypeDemangler::Get()
54  {
55  return name;
56  }
57 
58  #else
59  DbgTypeDemangler::DbgTypeDemangler( const type_info& typeInfo )
60  {
61  name= typeInfo.name();
62  if (std::strncmp( name, "class ", 6) == 0)
63  name+= 6;
64  }
65 
67  {
68  }
69 
70  const char* DbgTypeDemangler::Get()
71  {
72  return name;
73  }
74  #endif
75 
76 }} // namespace [aworx::lib}
77 #endif
78 
aworx::lib::DbgTypeDemangler::name
const char * name
Definition: typedemangler.hpp:35
alib_precompile.hpp
compilers.hpp
aworx::lib::DbgTypeDemangler::Get
const ALIB_API char * Get()
Definition: typedemangler.cpp:53
aworx
Definition: alox/alox.hpp:40
aworx::lib::DbgTypeDemangler::~DbgTypeDemangler
ALIB_API ~DbgTypeDemangler()
Definition: typedemangler.cpp:47
typedemangler.hpp
aworx::lib::DbgTypeDemangler::DbgTypeDemangler
ALIB_API DbgTypeDemangler(const std::type_info &typeInfo)
Definition: typedemangler.cpp:40