diff options
author | Remko Tronçon <git@el-tramo.be> | 2010-05-06 17:44:27 (GMT) |
---|---|---|
committer | Remko Tronçon <git@el-tramo.be> | 2010-05-06 17:44:27 (GMT) |
commit | d76ada0ab59634e3333f9eb5a92d0e850f60d7bf (patch) | |
tree | 5eaae441173fad2ec19ba67d6589f28ecd740991 /3rdParty/Boost/src/boost/units/detail/utility.hpp | |
parent | 6f49e5abee37d37b351d68c01374232eccdac458 (diff) | |
download | swift-contrib-d76ada0ab59634e3333f9eb5a92d0e850f60d7bf.zip swift-contrib-d76ada0ab59634e3333f9eb5a92d0e850f60d7bf.tar.bz2 |
Updated Boost to 1.43.0.
Diffstat (limited to '3rdParty/Boost/src/boost/units/detail/utility.hpp')
-rw-r--r-- | 3rdParty/Boost/src/boost/units/detail/utility.hpp | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/3rdParty/Boost/src/boost/units/detail/utility.hpp b/3rdParty/Boost/src/boost/units/detail/utility.hpp new file mode 100644 index 0000000..da46b45 --- /dev/null +++ b/3rdParty/Boost/src/boost/units/detail/utility.hpp @@ -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 |