CodeMover prototype
[dyninst.git] / external / boost / exception / to_string_stub.hpp
1 //Copyright (c) 2006-2008 Emil Dotchevski and Reverge Studios, Inc.\r
2 \r
3 //Distributed under the Boost Software License, Version 1.0. (See accompanying\r
4 //file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\r
5 \r
6 #ifndef UUID_E788439ED9F011DCB181F25B55D89593\r
7 #define UUID_E788439ED9F011DCB181F25B55D89593\r
8 \r
9 #include <boost/exception/to_string.hpp>\r
10 #include <boost/exception/detail/object_hex_dump.hpp>\r
11 #include <boost/assert.hpp>\r
12 \r
13 namespace\r
14 boost\r
15     {\r
16     namespace\r
17     exception_detail\r
18         {\r
19         template <bool ToStringAvailable>\r
20         struct\r
21         to_string_dispatcher\r
22             {\r
23             template <class T,class Stub>\r
24             static\r
25             std::string\r
26             convert( T const & x, Stub )\r
27                 {\r
28                 return to_string(x);\r
29                 }\r
30             };\r
31 \r
32         template <>\r
33         struct\r
34         to_string_dispatcher<false>\r
35             {\r
36             template <class T,class Stub>\r
37             static\r
38             std::string\r
39             convert( T const & x, Stub s )\r
40                 {\r
41                 return s(x);\r
42                 }\r
43 \r
44             template <class T>\r
45             static\r
46             std::string\r
47             convert( T const & x, std::string s )\r
48                 {\r
49                 return s;\r
50                 }\r
51 \r
52             template <class T>\r
53             static\r
54             std::string\r
55             convert( T const & x, char const * s )\r
56                 {\r
57                 BOOST_ASSERT(s!=0);\r
58                 return s;\r
59                 }\r
60             };\r
61 \r
62         namespace\r
63         to_string_dispatch\r
64             {\r
65             template <class T,class Stub>\r
66             inline\r
67             std::string\r
68             dispatch( T const & x, Stub s )\r
69                 {\r
70                 return to_string_dispatcher<has_to_string<T>::value>::convert(x,s);\r
71                 }\r
72             }\r
73 \r
74         template <class T>\r
75         inline\r
76         std::string\r
77         string_stub_dump( T const & x )\r
78             {\r
79             return "[ " + exception_detail::object_hex_dump(x) + " ]";\r
80             }\r
81         }\r
82 \r
83     template <class T>\r
84     inline\r
85     std::string\r
86     to_string_stub( T const & x )\r
87         {\r
88         return exception_detail::to_string_dispatch::dispatch(x,&exception_detail::string_stub_dump<T>);\r
89         }\r
90 \r
91     template <class T,class Stub>\r
92     inline\r
93     std::string\r
94     to_string_stub( T const & x, Stub s )\r
95         {\r
96         return exception_detail::to_string_dispatch::dispatch(x,s);\r
97         }\r
98     }\r
99 \r
100 #endif\r