89 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			89 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | // ---------------------------------------------------------------------------- | ||
|  | // Copyright (C) 2002-2006 Marcin Kalicinski | ||
|  | // | ||
|  | // 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) | ||
|  | // | ||
|  | // For more information, see www.boost.org | ||
|  | // ---------------------------------------------------------------------------- | ||
|  | #ifndef BOOST_PROPERTY_TREE_DETAIL_FILE_PARSER_ERROR_HPP_INCLUDED | ||
|  | #define BOOST_PROPERTY_TREE_DETAIL_FILE_PARSER_ERROR_HPP_INCLUDED | ||
|  | 
 | ||
|  | #include <boost/property_tree/ptree.hpp> | ||
|  | #include <string> | ||
|  | 
 | ||
|  | namespace boost { namespace property_tree | ||
|  | { | ||
|  | 
 | ||
|  |     //! File parse error | ||
|  |     class file_parser_error: public ptree_error | ||
|  |     { | ||
|  | 
 | ||
|  |     public: | ||
|  | 
 | ||
|  |         /////////////////////////////////////////////////////////////////////// | ||
|  |         // Construction & destruction | ||
|  | 
 | ||
|  |         // Construct error | ||
|  |         file_parser_error(const std::string &msg, | ||
|  |                           const std::string &file, | ||
|  |                           unsigned long l) : | ||
|  |             ptree_error(format_what(msg, file, l)), | ||
|  |             m_message(msg), m_filename(file), m_line(l) | ||
|  |         { | ||
|  |         } | ||
|  | 
 | ||
|  |         ~file_parser_error() throw() | ||
|  |             // gcc 3.4.2 complains about lack of throw specifier on compiler | ||
|  |             // generated dtor | ||
|  |         { | ||
|  |         } | ||
|  | 
 | ||
|  |         /////////////////////////////////////////////////////////////////////// | ||
|  |         // Data access | ||
|  | 
 | ||
|  |         // Get error message (without line and file - use what() to get | ||
|  |         // full message) | ||
|  |         std::string message() const | ||
|  |         { | ||
|  |             return m_message; | ||
|  |         } | ||
|  | 
 | ||
|  |         // Get error filename | ||
|  |         std::string filename() const | ||
|  |         { | ||
|  |             return m_filename; | ||
|  |         } | ||
|  | 
 | ||
|  |         // Get error line number | ||
|  |         unsigned long line() const | ||
|  |         { | ||
|  |             return m_line; | ||
|  |         } | ||
|  | 
 | ||
|  |     private: | ||
|  | 
 | ||
|  |         std::string m_message; | ||
|  |         std::string m_filename; | ||
|  |         unsigned long m_line; | ||
|  | 
 | ||
|  |         // Format error message to be returned by std::runtime_error::what() | ||
|  |         static std::string format_what(const std::string &msg, | ||
|  |                                        const std::string &file, | ||
|  |                                        unsigned long l) | ||
|  |         { | ||
|  |             std::stringstream stream; | ||
|  |             stream << (file.empty() ? "<unspecified file>" : file.c_str()); | ||
|  |             if (l > 0) | ||
|  |                 stream << '(' << l << ')'; | ||
|  |             stream << ": " << msg; | ||
|  |             return stream.str(); | ||
|  |         } | ||
|  | 
 | ||
|  |     }; | ||
|  | 
 | ||
|  | } } | ||
|  | 
 | ||
|  | #endif |