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
 |