Initial drop of Boost v1.44. This isn't the full library, just a subset that includes the more useful ones like shared_ptr and threads. Currently not wired into anything.
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
// Boost.Units - A C++ library for zero-overhead dimensional analysis and
|
||||
// unit/quantity manipulation and conversion
|
||||
//
|
||||
// Copyright (C) 2003-2008 Matthias Christian Schabel
|
||||
// Copyright (C) 2008 Steven Watanabe
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0. (See
|
||||
// accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
#ifndef BOOST_UNITS_UTILITY_HPP
|
||||
#define BOOST_UNITS_UTILITY_HPP
|
||||
|
||||
#include <cstdlib>
|
||||
#include <typeinfo>
|
||||
#include <string>
|
||||
|
||||
#if defined(__GLIBCXX__) || defined(__GLIBCPP__)
|
||||
#define BOOST_UNITS_USE_DEMANGLING
|
||||
#include <cxxabi.h>
|
||||
#endif // __GNUC__
|
||||
|
||||
#ifdef BOOST_UNITS_USE_DEMANGLING
|
||||
|
||||
#include <boost/algorithm/string/replace.hpp>
|
||||
|
||||
namespace boost {
|
||||
|
||||
namespace units {
|
||||
|
||||
namespace detail {
|
||||
|
||||
inline
|
||||
std::string
|
||||
demangle(const char* name)
|
||||
{
|
||||
// need to demangle C++ symbols
|
||||
char* realname;
|
||||
std::size_t len;
|
||||
int stat;
|
||||
|
||||
realname = abi::__cxa_demangle(name,NULL,&len,&stat);
|
||||
|
||||
if (realname != NULL)
|
||||
{
|
||||
std::string out(realname);
|
||||
|
||||
std::free(realname);
|
||||
|
||||
boost::replace_all(out,"boost::units::","");
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
return std::string("demangle :: error - unable to demangle specified symbol");
|
||||
}
|
||||
|
||||
} // namespace detail
|
||||
|
||||
template<class L>
|
||||
std::string simplify_typename(const L& /*source*/)
|
||||
{
|
||||
const std::string demangled = detail::demangle(typeid(L).name());
|
||||
|
||||
return demangled;
|
||||
}
|
||||
|
||||
} // namespace units
|
||||
|
||||
} // namespace boost
|
||||
|
||||
#else // BOOST_UNITS_USE_DEMANGLING
|
||||
|
||||
namespace boost {
|
||||
|
||||
namespace units {
|
||||
|
||||
namespace detail {
|
||||
|
||||
inline
|
||||
std::string
|
||||
demangle(const char* name)
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
} // namespace detail
|
||||
|
||||
template<class L>
|
||||
std::string simplify_typename(const L& /*source*/)
|
||||
{
|
||||
return std::string(typeid(L).name());
|
||||
}
|
||||
|
||||
} // namespace units
|
||||
|
||||
} // namespace boost
|
||||
|
||||
// To get system-specific predefined macros:
|
||||
// gcc -arch ppc -dM -E - < /dev/null | sort
|
||||
|
||||
#endif // BOOST_UNITS_USE_DEMANGLING
|
||||
|
||||
#endif // BOOST_UNITS_UTILITY_HPP
|
||||
Reference in New Issue
Block a user