1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
|
///////////////////////////////////////////////////////////////////////////////
/// \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)
# 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.
/// \param str The message string of this regex_error.
/// \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
|