85 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			85 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | //  Boost system_error.hpp  --------------------------------------------------// | ||
|  | 
 | ||
|  | //  Copyright Beman Dawes 2006 | ||
|  | 
 | ||
|  | //  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 BOOST_SYSTEM_ERROR_HPP | ||
|  | #define BOOST_SYSTEM_ERROR_HPP | ||
|  | 
 | ||
|  | #include <string> | ||
|  | #include <stdexcept> | ||
|  | #include <cassert> | ||
|  | #include <boost/system/error_code.hpp> | ||
|  | 
 | ||
|  | namespace boost | ||
|  | { | ||
|  |   namespace system | ||
|  |   { | ||
|  |     //  class system_error  ------------------------------------------------------------// | ||
|  | 
 | ||
|  |     class BOOST_SYMBOL_VISIBLE system_error : public std::runtime_error | ||
|  |     // BOOST_SYMBOL_VISIBLE is needed by GCC to ensure system_error thrown from a shared | ||
|  |     // library can be caught. See svn.boost.org/trac/boost/ticket/3697 | ||
|  |     { | ||
|  |     public: | ||
|  |       system_error( error_code ec ) | ||
|  |           : std::runtime_error(""), m_error_code(ec) {} | ||
|  | 
 | ||
|  |       system_error( error_code ec, const std::string & what_arg ) | ||
|  |           : std::runtime_error(what_arg), m_error_code(ec) {} | ||
|  | 
 | ||
|  |       system_error( error_code ec, const char* what_arg ) | ||
|  |           : std::runtime_error(what_arg), m_error_code(ec) {} | ||
|  | 
 | ||
|  |       system_error( int ev, const error_category & ecat ) | ||
|  |           : std::runtime_error(""), m_error_code(ev,ecat) {} | ||
|  | 
 | ||
|  |       system_error( int ev, const error_category & ecat, | ||
|  |         const std::string & what_arg ) | ||
|  |           : std::runtime_error(what_arg), m_error_code(ev,ecat) {} | ||
|  | 
 | ||
|  |       system_error( int ev, const error_category & ecat, | ||
|  |         const char * what_arg ) | ||
|  |           : std::runtime_error(what_arg), m_error_code(ev,ecat) {} | ||
|  | 
 | ||
|  |       virtual ~system_error() throw() {} | ||
|  | 
 | ||
|  |       const error_code &  code() const throw() { return m_error_code; } | ||
|  |       const char *        what() const throw(); | ||
|  | 
 | ||
|  |     private: | ||
|  |       error_code           m_error_code; | ||
|  |       mutable std::string  m_what; | ||
|  |     }; | ||
|  | 
 | ||
|  |     //  implementation  ------------------------------------------------------// | ||
|  | 
 | ||
|  |     inline const char * system_error::what() const throw() | ||
|  |     // see http://www.boost.org/more/error_handling.html for lazy build rationale | ||
|  |     { | ||
|  |       if ( m_what.empty() ) | ||
|  |       { | ||
|  | #ifndef BOOST_NO_EXCEPTIONS | ||
|  |         try | ||
|  | #endif | ||
|  |         { | ||
|  |           m_what = this->std::runtime_error::what(); | ||
|  |           if ( !m_what.empty() ) m_what += ": "; | ||
|  |           m_what += m_error_code.message(); | ||
|  |         } | ||
|  | #ifndef BOOST_NO_EXCEPTIONS | ||
|  |         catch (...) { return std::runtime_error::what(); } | ||
|  | #endif | ||
|  |       } | ||
|  |       return m_what.c_str(); | ||
|  |     } | ||
|  | 
 | ||
|  |   } // namespace system | ||
|  | } // namespace boost | ||
|  | 
 | ||
|  | #endif // BOOST_SYSTEM_ERROR_HPP | ||
|  | 
 | ||
|  | 
 |