CodeMover prototype
[dyninst.git] / external / boost / exception / detail / object_hex_dump.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_6F463AC838DF11DDA3E6909F56D89593\r
7 #define UUID_6F463AC838DF11DDA3E6909F56D89593\r
8 \r
9 #include <boost/exception/detail/type_info.hpp>\r
10 #include <iomanip>\r
11 #include <ios>\r
12 #include <string>\r
13 #include <sstream>\r
14 \r
15 namespace\r
16 boost\r
17     {\r
18     namespace\r
19     exception_detail\r
20         {\r
21         template <class T>\r
22         inline\r
23         std::string\r
24         object_hex_dump( T const & x, size_t max_size=16 )\r
25             {\r
26             std::ostringstream s;\r
27             s << "type: " << type_name<T>() << ", size: " << sizeof(T) << ", dump: ";\r
28             size_t n=sizeof(T)>max_size?max_size:sizeof(T);\r
29             s.fill('0');\r
30             s.width(2);\r
31             unsigned char const * b=reinterpret_cast<unsigned char const *>(&x);\r
32             s << std::setw(2) << std::hex << (unsigned int)*b;\r
33             for( unsigned char const * e=b+n; ++b!=e; )\r
34                 s << " " << std::setw(2) << std::hex << (unsigned int)*b;\r
35             return s.str();\r
36             }\r
37         }\r
38     }\r
39 \r
40 #endif\r