Mercurial > hg > vamp-build-and-test
diff DEPENDENCIES/generic/include/boost/xpressive/regex_error.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children | c530137014c0 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DEPENDENCIES/generic/include/boost/xpressive/regex_error.hpp Tue Aug 05 11:11:38 2014 +0100 @@ -0,0 +1,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) && (_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. + /// \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