//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. | |
//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 UUID_E788439ED9F011DCB181F25B55D89593 | |
#define UUID_E788439ED9F011DCB181F25B55D89593 | |
#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) | |
#pragma GCC system_header | |
#endif | |
#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) | |
#pragma warning(push,1) | |
#endif | |
#include <boost/exception/to_string.hpp> | |
#include <boost/exception/detail/object_hex_dump.hpp> | |
#include <boost/assert.hpp> | |
namespace | |
boost | |
{ | |
namespace | |
exception_detail | |
{ | |
template <bool ToStringAvailable> | |
struct | |
to_string_dispatcher | |
{ | |
template <class T,class Stub> | |
static | |
std::string | |
convert( T const & x, Stub ) | |
{ | |
return to_string(x); | |
} | |
}; | |
template <> | |
struct | |
to_string_dispatcher<false> | |
{ | |
template <class T,class Stub> | |
static | |
std::string | |
convert( T const & x, Stub s ) | |
{ | |
return s(x); | |
} | |
template <class T> | |
static | |
std::string | |
convert( T const & x, std::string s ) | |
{ | |
return s; | |
} | |
template <class T> | |
static | |
std::string | |
convert( T const & x, char const * s ) | |
{ | |
BOOST_ASSERT(s!=0); | |
return s; | |
} | |
}; | |
namespace | |
to_string_dispatch | |
{ | |
template <class T,class Stub> | |
inline | |
std::string | |
dispatch( T const & x, Stub s ) | |
{ | |
return to_string_dispatcher<has_to_string<T>::value>::convert(x,s); | |
} | |
} | |
template <class T> | |
inline | |
std::string | |
string_stub_dump( T const & x ) | |
{ | |
return "[ " + exception_detail::object_hex_dump(x) + " ]"; | |
} | |
} | |
template <class T> | |
inline | |
std::string | |
to_string_stub( T const & x ) | |
{ | |
return exception_detail::to_string_dispatch::dispatch(x,&exception_detail::string_stub_dump<T>); | |
} | |
template <class T,class Stub> | |
inline | |
std::string | |
to_string_stub( T const & x, Stub s ) | |
{ | |
return exception_detail::to_string_dispatch::dispatch(x,s); | |
} | |
} | |
#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) | |
#pragma warning(pop) | |
#endif | |
#endif |