Mercurial > hg > vamp-build-and-test
diff DEPENDENCIES/generic/include/boost/units/detail/utility.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children | c530137014c0 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DEPENDENCIES/generic/include/boost/units/detail/utility.hpp Tue Aug 05 11:11:38 2014 +0100 @@ -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