| /////////////////////////////////////////////////////////////////////////////// |
| /// \file regex_error.hpp |
| /// Contains the definition of the regex_error exception class. |
| // |
| // Copyright 2008 Eric Niebler. 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) |
| |
| #ifndef BOOST_XPRESSIVE_REGEX_ERROR_HPP_EAN_10_04_2005 |
| #define BOOST_XPRESSIVE_REGEX_ERROR_HPP_EAN_10_04_2005 |
| |
| // MS compatible compilers support #pragma once |
| #if defined(_MSC_VER) && (_MSC_VER >= 1020) |
| # pragma once |
| #endif |
| |
| #include <string> |
| #include <stdexcept> |
| #include <boost/throw_exception.hpp> |
| #include <boost/current_function.hpp> |
| #include <boost/exception/exception.hpp> |
| #include <boost/exception/info.hpp> |
| #include <boost/xpressive/regex_constants.hpp> |
| |
| //{{AFX_DOC_COMMENT |
| /////////////////////////////////////////////////////////////////////////////// |
| // This is a hack to get Doxygen to show the inheritance relation between |
| // regex_error and std::runtime_error. |
| #ifdef BOOST_XPRESSIVE_DOXYGEN_INVOKED |
| /// INTERNAL ONLY |
| namespace std |
| { |
| /// INTERNAL ONLY |
| struct runtime_error {}; |
| } |
| #endif |
| //}}AFX_DOC_COMMENT |
| |
| namespace boost { namespace xpressive |
| { |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // regex_error |
| // |
| /// \brief The class regex_error defines the type of objects thrown as |
| /// exceptions to report errors during the conversion from a string representing |
| /// a regular expression to a finite state machine. |
| struct regex_error |
| : std::runtime_error |
| , boost::exception |
| { |
| /// Constructs an object of class regex_error. |
| /// \param code The error_type this regex_error represents. |
| /// \post code() == code |
| explicit regex_error(regex_constants::error_type code, char const *str = "") |
| : std::runtime_error(str) |
| , boost::exception() |
| , code_(code) |
| { |
| } |
| |
| /// Accessor for the error_type value |
| /// \return the error_type code passed to the constructor |
| /// \throw nothrow |
| regex_constants::error_type code() const |
| { |
| return this->code_; |
| } |
| |
| /// Destructor for class regex_error |
| /// \throw nothrow |
| virtual ~regex_error() throw() |
| {} |
| |
| private: |
| |
| regex_constants::error_type code_; |
| }; |
| |
| namespace detail |
| { |
| inline bool ensure_( |
| bool cond |
| , regex_constants::error_type code |
| , char const *msg |
| , char const *fun |
| , char const *file |
| , unsigned long line |
| ) |
| { |
| if(!cond) |
| { |
| #ifndef BOOST_EXCEPTION_DISABLE |
| boost::throw_exception( |
| boost::xpressive::regex_error(code, msg) |
| << boost::throw_function(fun) |
| << boost::throw_file(file) |
| << boost::throw_line((int)line) |
| ); |
| #else |
| boost::throw_exception(boost::xpressive::regex_error(code, msg)); |
| #endif |
| } |
| return true; |
| } |
| } |
| |
| #define BOOST_XPR_ENSURE_(pred, code, msg) \ |
| boost::xpressive::detail::ensure_(pred, code, msg, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__) \ |
| /**/ |
| |
| }} // namespace boost::xpressive |
| |
| #endif |