annotate DEPENDENCIES/generic/include/boost/core/demangle.hpp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents f46d142149f5
children
rev   line source
Chris@102 1 #ifndef BOOST_CORE_DEMANGLE_HPP_INCLUDED
Chris@102 2 #define BOOST_CORE_DEMANGLE_HPP_INCLUDED
Chris@102 3
Chris@102 4 // core::demangle
Chris@102 5 //
Chris@102 6 // Copyright 2014 Peter Dimov
Chris@102 7 // Copyright 2014 Andrey Semashev
Chris@102 8 //
Chris@102 9 // Distributed under the Boost Software License, Version 1.0.
Chris@102 10 // See accompanying file LICENSE_1_0.txt or copy at
Chris@102 11 // http://www.boost.org/LICENSE_1_0.txt
Chris@102 12
Chris@102 13 #include <boost/config.hpp>
Chris@102 14 #include <string>
Chris@102 15
Chris@102 16 #if defined(BOOST_HAS_PRAGMA_ONCE)
Chris@102 17 # pragma once
Chris@102 18 #endif
Chris@102 19
Chris@102 20 #if defined( __clang__ ) && defined( __has_include )
Chris@102 21 # if __has_include(<cxxabi.h>)
Chris@102 22 # define BOOST_CORE_HAS_CXXABI_H
Chris@102 23 # endif
Chris@102 24 #elif defined( __GLIBCXX__ ) || defined( __GLIBCPP__ )
Chris@102 25 # define BOOST_CORE_HAS_CXXABI_H
Chris@102 26 #endif
Chris@102 27
Chris@102 28 #if defined( BOOST_CORE_HAS_CXXABI_H )
Chris@102 29 # include <cxxabi.h>
Chris@102 30 # include <cstdlib>
Chris@102 31 # include <cstddef>
Chris@102 32 #endif
Chris@102 33
Chris@102 34 namespace boost
Chris@102 35 {
Chris@102 36
Chris@102 37 namespace core
Chris@102 38 {
Chris@102 39
Chris@102 40 inline char const * demangle_alloc( char const * name ) BOOST_NOEXCEPT;
Chris@102 41 inline void demangle_free( char const * name ) BOOST_NOEXCEPT;
Chris@102 42
Chris@102 43 class scoped_demangled_name
Chris@102 44 {
Chris@102 45 private:
Chris@102 46 char const * m_p;
Chris@102 47
Chris@102 48 public:
Chris@102 49 explicit scoped_demangled_name( char const * name ) BOOST_NOEXCEPT :
Chris@102 50 m_p( demangle_alloc( name ) )
Chris@102 51 {
Chris@102 52 }
Chris@102 53
Chris@102 54 ~scoped_demangled_name() BOOST_NOEXCEPT
Chris@102 55 {
Chris@102 56 demangle_free( m_p );
Chris@102 57 }
Chris@102 58
Chris@102 59 char const * get() const BOOST_NOEXCEPT
Chris@102 60 {
Chris@102 61 return m_p;
Chris@102 62 }
Chris@102 63
Chris@102 64 BOOST_DELETED_FUNCTION(scoped_demangled_name( scoped_demangled_name const& ))
Chris@102 65 BOOST_DELETED_FUNCTION(scoped_demangled_name& operator= ( scoped_demangled_name const& ))
Chris@102 66 };
Chris@102 67
Chris@102 68
Chris@102 69 #if defined( BOOST_CORE_HAS_CXXABI_H )
Chris@102 70
Chris@102 71 inline char const * demangle_alloc( char const * name ) BOOST_NOEXCEPT
Chris@102 72 {
Chris@102 73 int status = 0;
Chris@102 74 std::size_t size = 0;
Chris@102 75 return abi::__cxa_demangle( name, NULL, &size, &status );
Chris@102 76 }
Chris@102 77
Chris@102 78 inline void demangle_free( char const * name ) BOOST_NOEXCEPT
Chris@102 79 {
Chris@102 80 std::free( const_cast< char* >( name ) );
Chris@102 81 }
Chris@102 82
Chris@102 83 inline std::string demangle( char const * name )
Chris@102 84 {
Chris@102 85 scoped_demangled_name demangled_name( name );
Chris@102 86 char const * const p = demangled_name.get();
Chris@102 87 if( p )
Chris@102 88 {
Chris@102 89 return p;
Chris@102 90 }
Chris@102 91 else
Chris@102 92 {
Chris@102 93 return name;
Chris@102 94 }
Chris@102 95 }
Chris@102 96
Chris@102 97 #else
Chris@102 98
Chris@102 99 inline char const * demangle_alloc( char const * name ) BOOST_NOEXCEPT
Chris@102 100 {
Chris@102 101 return name;
Chris@102 102 }
Chris@102 103
Chris@102 104 inline void demangle_free( char const * ) BOOST_NOEXCEPT
Chris@102 105 {
Chris@102 106 }
Chris@102 107
Chris@102 108 inline std::string demangle( char const * name )
Chris@102 109 {
Chris@102 110 return name;
Chris@102 111 }
Chris@102 112
Chris@102 113 #endif
Chris@102 114
Chris@102 115 } // namespace core
Chris@102 116
Chris@102 117 } // namespace boost
Chris@102 118
Chris@102 119 #undef BOOST_CORE_HAS_CXXABI_H
Chris@102 120
Chris@102 121 #endif // #ifndef BOOST_CORE_DEMANGLE_HPP_INCLUDED