| // ---------------------------------------------------------------------------- |
| // 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 |