]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/wave/include/boost/wave/cpp_throw.hpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / wave / include / boost / wave / cpp_throw.hpp
1 /*=============================================================================
2 Boost.Wave: A Standard compliant C++ preprocessor library
3
4 http://www.boost.org/
5
6 Copyright (c) 2001-2012 Hartmut Kaiser. Distributed under the Boost
7 Software License, Version 1.0. (See accompanying file
8 LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9 =============================================================================*/
10
11 #if !defined(BOOST_WAVE_CPP_THROW_HPP_INCLUDED)
12 #define BOOST_WAVE_CPP_THROW_HPP_INCLUDED
13
14 #include <string>
15 #include <boost/throw_exception.hpp>
16
17 #ifdef BOOST_NO_STRINGSTREAM
18 #include <strstream>
19 #else
20 #include <sstream>
21 #endif
22
23 namespace boost { namespace wave { namespace util
24 {
25 #ifdef BOOST_NO_STRINGSTREAM
26 template <typename Exception, typename S1, typename Pos>
27 void throw_(typename Exception::error_code code, S1 msg, Pos const& pos)
28 {
29 std::strstream stream;
30 stream << Exception::severity_text(code) << ": "
31 << Exception::error_text(code);
32 if (msg[0] != 0)
33 stream << ": " << msg;
34 stream << std::ends;
35 std::string throwmsg = stream.str(); stream.freeze(false);
36 boost::throw_exception(Exception(throwmsg.c_str(), code,
37 pos.get_line(), pos.get_column(), pos.get_file().c_str()));
38 }
39
40 template <typename Exception, typename Context, typename S1, typename Pos>
41 void throw_(Context& ctx, typename Exception::error_code code,
42 S1 msg, Pos const& pos)
43 {
44 std::strstream stream;
45 stream << Exception::severity_text(code) << ": "
46 << Exception::error_text(code);
47 if (msg[0] != 0)
48 stream << ": " << msg;
49 stream << std::ends;
50 std::string throwmsg = stream.str(); stream.freeze(false);
51 ctx.get_hooks().throw_exception(ctx.derived(),
52 Exception(throwmsg.c_str(), code, pos.get_line(), pos.get_column(),
53 pos.get_file().c_str()));
54 }
55
56 template <typename Exception, typename S1, typename Pos, typename S2>
57 void throw_(typename Exception::error_code code, S1 msg, Pos const& pos,
58 S2 name)
59 {
60 std::strstream stream;
61 stream << Exception::severity_text(code) << ": "
62 << Exception::error_text(code);
63 if (msg[0] != 0)
64 stream << ": " << msg;
65 stream << std::ends;
66 std::string throwmsg = stream.str(); stream.freeze(false);
67 boost::throw_exception(Exception(throwmsg.c_str(), code,
68 pos.get_line(), pos.get_column(), pos.get_file().c_str(), name));
69 }
70
71 template <typename Exception, typename Context, typename S1, typename Pos,
72 typename S2>
73 void throw_(Context& ctx, typename Exception::error_code code,
74 S1 msg, Pos const& pos, S2 name)
75 {
76 std::strstream stream;
77 stream << Exception::severity_text(code) << ": "
78 << Exception::error_text(code);
79 if (msg[0] != 0)
80 stream << ": " << msg;
81 stream << std::ends;
82 std::string throwmsg = stream.str(); stream.freeze(false);
83 ctx.get_hooks().throw_exception(ctx.derived(),
84 Exception(throwmsg.c_str(), code, pos.get_line(), pos.get_column(),
85 pos.get_file().c_str(), name));
86 }
87 #else
88 template <typename Exception, typename S1, typename Pos>
89 void throw_(typename Exception::error_code code, S1 msg, Pos const& pos)
90 {
91 std::stringstream stream;
92 stream << Exception::severity_text(code) << ": "
93 << Exception::error_text(code);
94 if (msg[0] != 0)
95 stream << ": " << msg;
96 stream << std::ends;
97 std::string throwmsg = stream.str();
98 boost::throw_exception(Exception(throwmsg.c_str(), code,
99 pos.get_line(), pos.get_column(), pos.get_file().c_str()));
100 }
101
102 template <typename Exception, typename Context, typename S1, typename Pos>
103 void throw_(Context& ctx, typename Exception::error_code code,
104 S1 msg, Pos const& pos)
105 {
106 std::stringstream stream;
107 stream << Exception::severity_text(code) << ": "
108 << Exception::error_text(code);
109 if (msg[0] != 0)
110 stream << ": " << msg;
111 stream << std::ends;
112 std::string throwmsg = stream.str();
113 ctx.get_hooks().throw_exception(ctx.derived(),
114 Exception(throwmsg.c_str(), code, pos.get_line(), pos.get_column(),
115 pos.get_file().c_str()));
116 }
117
118 template <typename Exception, typename S1, typename Pos, typename S2>
119 void throw_(typename Exception::error_code code, S1 msg, Pos const& pos,
120 S2 name)
121 {
122 std::stringstream stream;
123 stream << Exception::severity_text(code) << ": "
124 << Exception::error_text(code);
125 if (msg[0] != 0)
126 stream << ": " << msg;
127 stream << std::ends;
128 std::string throwmsg = stream.str();
129 boost::throw_exception(Exception(throwmsg.c_str(), code,
130 pos.get_line(), pos.get_column(), pos.get_file().c_str(), name));
131 }
132
133 template <typename Exception, typename Context, typename S1, typename Pos1,
134 typename S2>
135 void throw_(Context& ctx, typename Exception::error_code code,
136 S1 msg, Pos1 const& pos, S2 name)
137 {
138 std::stringstream stream;
139 stream << Exception::severity_text(code) << ": "
140 << Exception::error_text(code);
141 if (msg[0] != 0)
142 stream << ": " << msg;
143 stream << std::ends;
144 std::string throwmsg = stream.str();
145 ctx.get_hooks().throw_exception(ctx.derived(),
146 Exception(throwmsg.c_str(), code, pos.get_line(), pos.get_column(),
147 pos.get_file().c_str(), name));
148 }
149 #endif
150 }}}
151
152 ///////////////////////////////////////////////////////////////////////////////
153 // helper macro for throwing exceptions
154 #if !defined(BOOST_WAVE_THROW)
155 #define BOOST_WAVE_THROW(cls, code, msg, act_pos) \
156 boost::wave::util::throw_<cls>(cls::code, msg, act_pos) \
157 /**/
158
159 #define BOOST_WAVE_THROW_CTX(ctx, cls, code, msg, act_pos) \
160 boost::wave::util::throw_<cls>(ctx, cls::code, msg, act_pos) \
161 /**/
162 #endif // BOOST_WAVE_THROW
163
164 ///////////////////////////////////////////////////////////////////////////////
165 // helper macro for throwing exceptions with additional parameter
166 #if !defined(BOOST_WAVE_THROW_NAME_CTX)
167 #define BOOST_WAVE_THROW_NAME_CTX(ctx, cls, code, msg, act_pos, name) \
168 boost::wave::util::throw_<cls>(cls::code, msg, act_pos, name) \
169 /**/
170 #endif // BOOST_WAVE_THROW_NAME_CTX
171
172 ///////////////////////////////////////////////////////////////////////////////
173 // helper macro for throwing exceptions with additional parameter
174 #if !defined(BOOST_WAVE_THROW_VAR_CTX)
175 #define BOOST_WAVE_THROW_VAR_CTX(ctx, cls, code, msg, act_pos) \
176 boost::wave::util::throw_<cls>(ctx, code, msg, act_pos) \
177 /**/
178 #endif // BOOST_WAVE_THROW_VAR_CTX
179
180 #endif // !defined(BOOST_WAVE_CPP_THROW_HPP_INCLUDED)