Mercurial > hg > vamp-build-and-test
diff DEPENDENCIES/generic/include/boost/wave/cpp_throw.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DEPENDENCIES/generic/include/boost/wave/cpp_throw.hpp Tue Aug 05 11:11:38 2014 +0100 @@ -0,0 +1,180 @@ +/*============================================================================= + Boost.Wave: A Standard compliant C++ preprocessor library + + http://www.boost.org/ + + Copyright (c) 2001-2012 Hartmut Kaiser. 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) +=============================================================================*/ + +#if !defined(BOOST_WAVE_CPP_THROW_HPP_INCLUDED) +#define BOOST_WAVE_CPP_THROW_HPP_INCLUDED + +#include <string> +#include <boost/throw_exception.hpp> + +#ifdef BOOST_NO_STRINGSTREAM +#include <strstream> +#else +#include <sstream> +#endif + +namespace boost { namespace wave { namespace util +{ +#ifdef BOOST_NO_STRINGSTREAM + template <typename Exception, typename S1, typename Pos> + void throw_(typename Exception::error_code code, S1 msg, Pos const& pos) + { + std::strstream stream; + stream << Exception::severity_text(code) << ": " + << Exception::error_text(code); + if (msg[0] != 0) + stream << ": " << msg; + stream << std::ends; + std::string throwmsg = stream.str(); stream.freeze(false); + boost::throw_exception(Exception(throwmsg.c_str(), code, + pos.get_line(), pos.get_column(), pos.get_file().c_str())); + } + + template <typename Exception, typename Context, typename S1, typename Pos> + void throw_(Context& ctx, typename Exception::error_code code, + S1 msg, Pos const& pos) + { + std::strstream stream; + stream << Exception::severity_text(code) << ": " + << Exception::error_text(code); + if (msg[0] != 0) + stream << ": " << msg; + stream << std::ends; + std::string throwmsg = stream.str(); stream.freeze(false); + ctx.get_hooks().throw_exception(ctx.derived(), + Exception(throwmsg.c_str(), code, pos.get_line(), pos.get_column(), + pos.get_file().c_str())); + } + + template <typename Exception, typename S1, typename Pos, typename S2> + void throw_(typename Exception::error_code code, S1 msg, Pos const& pos, + S2 name) + { + std::strstream stream; + stream << Exception::severity_text(code) << ": " + << Exception::error_text(code); + if (msg[0] != 0) + stream << ": " << msg; + stream << std::ends; + std::string throwmsg = stream.str(); stream.freeze(false); + boost::throw_exception(Exception(throwmsg.c_str(), code, + pos.get_line(), pos.get_column(), pos.get_file().c_str(), name)); + } + + template <typename Exception, typename Context, typename S1, typename Pos, + typename S2> + void throw_(Context& ctx, typename Exception::error_code code, + S1 msg, Pos const& pos, S2 name) + { + std::strstream stream; + stream << Exception::severity_text(code) << ": " + << Exception::error_text(code); + if (msg[0] != 0) + stream << ": " << msg; + stream << std::ends; + std::string throwmsg = stream.str(); stream.freeze(false); + ctx.get_hooks().throw_exception(ctx.derived(), + Exception(throwmsg.c_str(), code, pos.get_line(), pos.get_column(), + pos.get_file().c_str(), name)); + } +#else + template <typename Exception, typename S1, typename Pos> + void throw_(typename Exception::error_code code, S1 msg, Pos const& pos) + { + std::stringstream stream; + stream << Exception::severity_text(code) << ": " + << Exception::error_text(code); + if (msg[0] != 0) + stream << ": " << msg; + stream << std::ends; + std::string throwmsg = stream.str(); + boost::throw_exception(Exception(throwmsg.c_str(), code, + pos.get_line(), pos.get_column(), pos.get_file().c_str())); + } + + template <typename Exception, typename Context, typename S1, typename Pos> + void throw_(Context& ctx, typename Exception::error_code code, + S1 msg, Pos const& pos) + { + std::stringstream stream; + stream << Exception::severity_text(code) << ": " + << Exception::error_text(code); + if (msg[0] != 0) + stream << ": " << msg; + stream << std::ends; + std::string throwmsg = stream.str(); + ctx.get_hooks().throw_exception(ctx.derived(), + Exception(throwmsg.c_str(), code, pos.get_line(), pos.get_column(), + pos.get_file().c_str())); + } + + template <typename Exception, typename S1, typename Pos, typename S2> + void throw_(typename Exception::error_code code, S1 msg, Pos const& pos, + S2 name) + { + std::stringstream stream; + stream << Exception::severity_text(code) << ": " + << Exception::error_text(code); + if (msg[0] != 0) + stream << ": " << msg; + stream << std::ends; + std::string throwmsg = stream.str(); + boost::throw_exception(Exception(throwmsg.c_str(), code, + pos.get_line(), pos.get_column(), pos.get_file().c_str(), name)); + } + + template <typename Exception, typename Context, typename S1, typename Pos1, + typename S2> + void throw_(Context& ctx, typename Exception::error_code code, + S1 msg, Pos1 const& pos, S2 name) + { + std::stringstream stream; + stream << Exception::severity_text(code) << ": " + << Exception::error_text(code); + if (msg[0] != 0) + stream << ": " << msg; + stream << std::ends; + std::string throwmsg = stream.str(); + ctx.get_hooks().throw_exception(ctx.derived(), + Exception(throwmsg.c_str(), code, pos.get_line(), pos.get_column(), + pos.get_file().c_str(), name)); + } +#endif +}}} + +/////////////////////////////////////////////////////////////////////////////// +// helper macro for throwing exceptions +#if !defined(BOOST_WAVE_THROW) +#define BOOST_WAVE_THROW(cls, code, msg, act_pos) \ + boost::wave::util::throw_<cls>(cls::code, msg, act_pos) \ + /**/ + +#define BOOST_WAVE_THROW_CTX(ctx, cls, code, msg, act_pos) \ + boost::wave::util::throw_<cls>(ctx, cls::code, msg, act_pos) \ + /**/ +#endif // BOOST_WAVE_THROW + +/////////////////////////////////////////////////////////////////////////////// +// helper macro for throwing exceptions with additional parameter +#if !defined(BOOST_WAVE_THROW_NAME_CTX) +#define BOOST_WAVE_THROW_NAME_CTX(ctx, cls, code, msg, act_pos, name) \ + boost::wave::util::throw_<cls>(cls::code, msg, act_pos, name) \ + /**/ +#endif // BOOST_WAVE_THROW_NAME_CTX + +/////////////////////////////////////////////////////////////////////////////// +// helper macro for throwing exceptions with additional parameter +#if !defined(BOOST_WAVE_THROW_VAR_CTX) +#define BOOST_WAVE_THROW_VAR_CTX(ctx, cls, code, msg, act_pos) \ + boost::wave::util::throw_<cls>(ctx, code, msg, act_pos) \ + /**/ +#endif // BOOST_WAVE_THROW_VAR_CTX + +#endif // !defined(BOOST_WAVE_CPP_THROW_HPP_INCLUDED)