600
|
1 |
// Boost system_error.hpp --------------------------------------------------//
|
|
2 |
|
|
3 |
// Copyright Beman Dawes 2006
|
|
4 |
|
|
5 |
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
|
6 |
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
7 |
|
|
8 |
#ifndef BOOST_SYSTEM_ERROR_HPP
|
|
9 |
#define BOOST_SYSTEM_ERROR_HPP
|
|
10 |
|
|
11 |
#include <string>
|
|
12 |
#include <stdexcept>
|
|
13 |
#include <cassert>
|
|
14 |
#include <boost/system/error_code.hpp>
|
|
15 |
|
|
16 |
namespace boost
|
|
17 |
{
|
|
18 |
namespace system
|
|
19 |
{
|
|
20 |
// class system_error --------------------------------------------------//
|
|
21 |
|
|
22 |
class system_error : public std::runtime_error
|
|
23 |
{
|
|
24 |
public:
|
|
25 |
system_error( error_code ec )
|
|
26 |
: std::runtime_error(""), m_error_code(ec) {}
|
|
27 |
|
|
28 |
system_error( error_code ec, const std::string & what_arg )
|
|
29 |
: std::runtime_error(what_arg), m_error_code(ec) {}
|
|
30 |
|
|
31 |
system_error( error_code ec, const char* what_arg )
|
|
32 |
: std::runtime_error(what_arg), m_error_code(ec) {}
|
|
33 |
|
|
34 |
system_error( int ev, const error_category & ecat )
|
|
35 |
: std::runtime_error(""), m_error_code(ev,ecat) {}
|
|
36 |
|
|
37 |
system_error( int ev, const error_category & ecat,
|
|
38 |
const std::string & what_arg )
|
|
39 |
: std::runtime_error(what_arg), m_error_code(ev,ecat) {}
|
|
40 |
|
|
41 |
system_error( int ev, const error_category & ecat,
|
|
42 |
const char * what_arg )
|
|
43 |
: std::runtime_error(what_arg), m_error_code(ev,ecat) {}
|
|
44 |
|
|
45 |
virtual ~system_error() throw() {}
|
|
46 |
|
|
47 |
const error_code & code() const throw() { return m_error_code; }
|
|
48 |
const char * what() const throw();
|
|
49 |
|
|
50 |
private:
|
|
51 |
error_code m_error_code;
|
|
52 |
mutable std::string m_what;
|
|
53 |
};
|
|
54 |
|
|
55 |
// implementation ------------------------------------------------------//
|
|
56 |
|
|
57 |
inline const char * system_error::what() const throw()
|
|
58 |
// see http://www.boost.org/more/error_handling.html for lazy build rationale
|
|
59 |
{
|
|
60 |
if ( m_what.empty() )
|
|
61 |
{
|
|
62 |
try
|
|
63 |
{
|
|
64 |
m_what = this->std::runtime_error::what();
|
|
65 |
if ( m_error_code )
|
|
66 |
{
|
|
67 |
if ( !m_what.empty() ) m_what += ": ";
|
|
68 |
m_what += m_error_code.message();
|
|
69 |
}
|
|
70 |
}
|
|
71 |
catch (...) { return std::runtime_error::what(); }
|
|
72 |
}
|
|
73 |
return m_what.c_str();
|
|
74 |
}
|
|
75 |
|
|
76 |
} // namespace system
|
|
77 |
} // namespace boost
|
|
78 |
|
|
79 |
#endif // BOOST_SYSTEM_ERROR_HPP
|
|
80 |
|
|
81 |
|