Chris@16: // ---------------------------------------------------------------------------- Chris@16: // boost/format/exceptions.hpp Chris@16: // ---------------------------------------------------------------------------- Chris@16: Chris@16: // Copyright Samuel Krempp 2003. Chris@16: // Chris@16: // Distributed under the Boost Software License, Version 1.0. Chris@16: // (See accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: // Chris@16: // Chris@16: // See http://www.boost.org/libs/format/ for library home page Chris@16: Chris@16: // ---------------------------------------------------------------------------- Chris@16: Chris@16: #ifndef BOOST_FORMAT_EXCEPTIONS_HPP Chris@16: #define BOOST_FORMAT_EXCEPTIONS_HPP Chris@16: Chris@16: Chris@16: #include Chris@16: Chris@16: Chris@16: namespace boost { Chris@16: Chris@16: namespace io { Chris@16: Chris@16: // **** exceptions ----------------------------------------------- Chris@16: Chris@16: class format_error : public std::exception Chris@16: { Chris@16: public: Chris@16: format_error() {} Chris@16: virtual const char *what() const throw() { Chris@16: return "boost::format_error: " Chris@16: "format generic failure"; Chris@16: } Chris@16: }; Chris@16: Chris@16: class bad_format_string : public format_error Chris@16: { Chris@16: std::size_t pos_, next_; Chris@16: public: Chris@16: bad_format_string(std::size_t pos, std::size_t size) Chris@16: : pos_(pos), next_(size) {} Chris@16: std::size_t get_pos() const { return pos_; } Chris@16: std::size_t get_next() const { return next_; } Chris@16: virtual const char *what() const throw() { Chris@16: return "boost::bad_format_string: format-string is ill-formed"; Chris@16: } Chris@16: }; Chris@16: Chris@16: class too_few_args : public format_error Chris@16: { Chris@16: std::size_t cur_, expected_; Chris@16: public: Chris@16: too_few_args(std::size_t cur, std::size_t expected) Chris@16: : cur_(cur), expected_(expected) {} Chris@16: std::size_t get_cur() const { return cur_; } Chris@16: std::size_t get_expected() const { return expected_; } Chris@16: virtual const char *what() const throw() { Chris@16: return "boost::too_few_args: " Chris@16: "format-string referred to more arguments than were passed"; Chris@16: } Chris@16: }; Chris@16: Chris@16: class too_many_args : public format_error Chris@16: { Chris@16: std::size_t cur_, expected_; Chris@16: public: Chris@16: too_many_args(std::size_t cur, std::size_t expected) Chris@16: : cur_(cur), expected_(expected) {} Chris@16: std::size_t get_cur() const { return cur_; } Chris@16: std::size_t get_expected() const { return expected_; } Chris@16: virtual const char *what() const throw() { Chris@16: return "boost::too_many_args: " Chris@16: "format-string referred to less arguments than were passed"; Chris@16: } Chris@16: }; Chris@16: Chris@16: Chris@16: class out_of_range : public format_error Chris@16: { Chris@16: int index_, beg_, end_; // range is [ beg, end [ Chris@16: public: Chris@16: out_of_range(int index, int beg, int end) Chris@16: : index_(index), beg_(beg), end_(end) {} Chris@16: int get_index() const { return index_; } Chris@16: int get_beg() const { return beg_; } Chris@16: int get_end() const { return end_; } Chris@16: virtual const char *what() const throw() { Chris@16: return "boost::out_of_range: " Chris@16: "tried to refer to an argument (or item) number which" Chris@16: " is out of range, according to the format string"; Chris@16: } Chris@16: }; Chris@16: Chris@16: Chris@16: } // namespace io Chris@16: Chris@16: } // namespace boost Chris@16: Chris@16: Chris@16: #endif // BOOST_FORMAT_EXCEPTIONS_HPP