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