// ---------------------------------------------------------------------------- // 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 #include 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() ? "" : file.c_str()); if (l > 0) stream << '(' << l << ')'; stream << ": " << msg; return stream.str(); } }; } } #endif