1 /*
2 * Copyright Andrey Semashev 2007 - 2015.
3 * Distributed under the Boost Software License, Version 1.0.
4 * (See accompanying file LICENSE_1_0.txt or copy at
5 * http://www.boost.org/LICENSE_1_0.txt)
6 */
7 /*!
8 * \file exceptions.cpp
9 * \author Andrey Semashev
10 * \date 31.10.2009
11 *
12 * \brief This header is the Boost.Log library implementation, see the library documentation
13 * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
14 */
15
16 #include <boost/throw_exception.hpp>
17 #include <boost/exception/exception.hpp>
18 #include <boost/exception/errinfo_at_line.hpp>
19 #include <boost/exception/info.hpp>
20 #include <boost/log/exceptions.hpp>
21 #include <boost/log/support/exception.hpp>
22 #include <boost/log/detail/header.hpp>
23
24 #ifdef _MSC_VER
25 #pragma warning(push)
26 // conversion from 'size_t' to 'boost::error_info<boost::throw_line_,int>::value_type', possible loss of data
27 // No idea why line number is stored as a signed integer in the error info...
28 #pragma warning(disable: 4267)
29 #endif
30
31 namespace boost {
32
33 BOOST_LOG_OPEN_NAMESPACE
34
35 namespace aux {
36
37 //! Attaches attribute name exception information
attach_attribute_name_info(exception & e,attribute_name const & name)38 BOOST_LOG_API void attach_attribute_name_info(exception& e, attribute_name const& name)
39 {
40 e << attribute_name_info(name);
41 }
42
43 } // namespace aux
44
runtime_error(std::string const & descr)45 runtime_error::runtime_error(std::string const& descr) :
46 std::runtime_error(descr)
47 {
48 }
49
~runtime_error()50 runtime_error::~runtime_error() throw()
51 {
52 }
53
missing_value()54 missing_value::missing_value() :
55 runtime_error("Requested value not found")
56 {
57 }
58
missing_value(std::string const & descr)59 missing_value::missing_value(std::string const& descr) :
60 runtime_error(descr)
61 {
62 }
63
~missing_value()64 missing_value::~missing_value() throw()
65 {
66 }
67
throw_(const char * file,std::size_t line)68 void missing_value::throw_(const char* file, std::size_t line)
69 {
70 boost::throw_exception(boost::enable_error_info(missing_value())
71 << boost::throw_file(file)
72 << boost::throw_line(line)
73 );
74 }
75
throw_(const char * file,std::size_t line,std::string const & descr)76 void missing_value::throw_(const char* file, std::size_t line, std::string const& descr)
77 {
78 boost::throw_exception(boost::enable_error_info(missing_value(descr))
79 << boost::throw_file(file)
80 << boost::throw_line(line)
81 );
82 }
83
throw_(const char * file,std::size_t line,std::string const & descr,attribute_name const & name)84 void missing_value::throw_(const char* file, std::size_t line, std::string const& descr, attribute_name const& name)
85 {
86 boost::throw_exception(boost::enable_error_info(missing_value(descr))
87 << boost::throw_file(file)
88 << boost::throw_line(line)
89 << attribute_name_info(name)
90 );
91 }
92
invalid_type()93 invalid_type::invalid_type() :
94 runtime_error("Requested value has invalid type")
95 {
96 }
97
invalid_type(std::string const & descr)98 invalid_type::invalid_type(std::string const& descr) :
99 runtime_error(descr)
100 {
101 }
102
~invalid_type()103 invalid_type::~invalid_type() throw()
104 {
105 }
106
throw_(const char * file,std::size_t line)107 void invalid_type::throw_(const char* file, std::size_t line)
108 {
109 boost::throw_exception(boost::enable_error_info(invalid_type())
110 << boost::throw_file(file)
111 << boost::throw_line(line)
112 );
113 }
114
throw_(const char * file,std::size_t line,std::string const & descr)115 void invalid_type::throw_(const char* file, std::size_t line, std::string const& descr)
116 {
117 boost::throw_exception(boost::enable_error_info(invalid_type(descr))
118 << boost::throw_file(file)
119 << boost::throw_line(line)
120 );
121 }
122
throw_(const char * file,std::size_t line,std::string const & descr,attribute_name const & name)123 void invalid_type::throw_(const char* file, std::size_t line, std::string const& descr, attribute_name const& name)
124 {
125 boost::throw_exception(boost::enable_error_info(invalid_type(descr))
126 << boost::throw_file(file)
127 << boost::throw_line(line)
128 << attribute_name_info(name)
129 );
130 }
131
throw_(const char * file,std::size_t line,std::string const & descr,typeindex::type_index const & type)132 void invalid_type::throw_(const char* file, std::size_t line, std::string const& descr, typeindex::type_index const& type)
133 {
134 boost::throw_exception(boost::enable_error_info(invalid_type(descr))
135 << boost::throw_file(file)
136 << boost::throw_line(line)
137 << type_info_info(type)
138 );
139 }
140
throw_(const char * file,std::size_t line,std::string const & descr,attribute_name const & name,typeindex::type_index const & type)141 void invalid_type::throw_(const char* file, std::size_t line, std::string const& descr, attribute_name const& name, typeindex::type_index const& type)
142 {
143 boost::throw_exception(boost::enable_error_info(invalid_type(descr))
144 << boost::throw_file(file)
145 << boost::throw_line(line)
146 << attribute_name_info(name)
147 << type_info_info(type)
148 );
149 }
150
invalid_value()151 invalid_value::invalid_value() :
152 runtime_error("The value is invalid")
153 {
154 }
155
invalid_value(std::string const & descr)156 invalid_value::invalid_value(std::string const& descr) :
157 runtime_error(descr)
158 {
159 }
160
~invalid_value()161 invalid_value::~invalid_value() throw()
162 {
163 }
164
throw_(const char * file,std::size_t line)165 void invalid_value::throw_(const char* file, std::size_t line)
166 {
167 boost::throw_exception(boost::enable_error_info(invalid_value())
168 << boost::throw_file(file)
169 << boost::throw_line(line)
170 );
171 }
172
throw_(const char * file,std::size_t line,std::string const & descr)173 void invalid_value::throw_(const char* file, std::size_t line, std::string const& descr)
174 {
175 boost::throw_exception(boost::enable_error_info(invalid_value(descr))
176 << boost::throw_file(file)
177 << boost::throw_line(line)
178 );
179 }
180
parse_error()181 parse_error::parse_error() :
182 runtime_error("Failed to parse content")
183 {
184 }
185
parse_error(std::string const & descr)186 parse_error::parse_error(std::string const& descr) :
187 runtime_error(descr)
188 {
189 }
190
~parse_error()191 parse_error::~parse_error() throw()
192 {
193 }
194
throw_(const char * file,std::size_t line)195 void parse_error::throw_(const char* file, std::size_t line)
196 {
197 boost::throw_exception(boost::enable_error_info(parse_error())
198 << boost::throw_file(file)
199 << boost::throw_line(line)
200 );
201 }
202
throw_(const char * file,std::size_t line,std::string const & descr)203 void parse_error::throw_(const char* file, std::size_t line, std::string const& descr)
204 {
205 boost::throw_exception(boost::enable_error_info(parse_error(descr))
206 << boost::throw_file(file)
207 << boost::throw_line(line)
208 );
209 }
210
throw_(const char * file,std::size_t line,std::string const & descr,std::size_t content_line)211 void parse_error::throw_(const char* file, std::size_t line, std::string const& descr, std::size_t content_line)
212 {
213 boost::throw_exception(boost::enable_error_info(parse_error(descr))
214 << boost::throw_file(file)
215 << boost::throw_line(line)
216 << boost::errinfo_at_line(content_line)
217 );
218 }
219
throw_(const char * file,std::size_t line,std::string const & descr,attribute_name const & name)220 void parse_error::throw_(const char* file, std::size_t line, std::string const& descr, attribute_name const& name)
221 {
222 boost::throw_exception(boost::enable_error_info(parse_error(descr))
223 << boost::throw_file(file)
224 << boost::throw_line(line)
225 << attribute_name_info(name)
226 );
227 }
228
conversion_error()229 conversion_error::conversion_error() :
230 runtime_error("Failed to perform conversion")
231 {
232 }
233
conversion_error(std::string const & descr)234 conversion_error::conversion_error(std::string const& descr) :
235 runtime_error(descr)
236 {
237 }
238
~conversion_error()239 conversion_error::~conversion_error() throw()
240 {
241 }
242
throw_(const char * file,std::size_t line)243 void conversion_error::throw_(const char* file, std::size_t line)
244 {
245 boost::throw_exception(boost::enable_error_info(conversion_error())
246 << boost::throw_file(file)
247 << boost::throw_line(line)
248 );
249 }
250
throw_(const char * file,std::size_t line,std::string const & descr)251 void conversion_error::throw_(const char* file, std::size_t line, std::string const& descr)
252 {
253 boost::throw_exception(boost::enable_error_info(conversion_error(descr))
254 << boost::throw_file(file)
255 << boost::throw_line(line)
256 );
257 }
258
system_error()259 system_error::system_error() :
260 runtime_error("Underlying API operation failed")
261 {
262 }
263
system_error(std::string const & descr)264 system_error::system_error(std::string const& descr) :
265 runtime_error(descr)
266 {
267 }
268
~system_error()269 system_error::~system_error() throw()
270 {
271 }
272
throw_(const char * file,std::size_t line)273 void system_error::throw_(const char* file, std::size_t line)
274 {
275 boost::throw_exception(boost::enable_error_info(system_error())
276 << boost::throw_file(file)
277 << boost::throw_line(line)
278 );
279 }
280
throw_(const char * file,std::size_t line,std::string const & descr)281 void system_error::throw_(const char* file, std::size_t line, std::string const& descr)
282 {
283 boost::throw_exception(boost::enable_error_info(system_error(descr))
284 << boost::throw_file(file)
285 << boost::throw_line(line)
286 );
287 }
288
logic_error(std::string const & descr)289 logic_error::logic_error(std::string const& descr) :
290 std::logic_error(descr)
291 {
292 }
293
~logic_error()294 logic_error::~logic_error() throw()
295 {
296 }
297
odr_violation()298 odr_violation::odr_violation() :
299 logic_error("ODR violation detected")
300 {
301 }
302
odr_violation(std::string const & descr)303 odr_violation::odr_violation(std::string const& descr) :
304 logic_error(descr)
305 {
306 }
307
~odr_violation()308 odr_violation::~odr_violation() throw()
309 {
310 }
311
throw_(const char * file,std::size_t line)312 void odr_violation::throw_(const char* file, std::size_t line)
313 {
314 boost::throw_exception(boost::enable_error_info(odr_violation())
315 << boost::throw_file(file)
316 << boost::throw_line(line)
317 );
318 }
319
throw_(const char * file,std::size_t line,std::string const & descr)320 void odr_violation::throw_(const char* file, std::size_t line, std::string const& descr)
321 {
322 boost::throw_exception(boost::enable_error_info(odr_violation(descr))
323 << boost::throw_file(file)
324 << boost::throw_line(line)
325 );
326 }
327
unexpected_call()328 unexpected_call::unexpected_call() :
329 logic_error("Invalid call sequence")
330 {
331 }
332
unexpected_call(std::string const & descr)333 unexpected_call::unexpected_call(std::string const& descr) :
334 logic_error(descr)
335 {
336 }
337
~unexpected_call()338 unexpected_call::~unexpected_call() throw()
339 {
340 }
341
throw_(const char * file,std::size_t line)342 void unexpected_call::throw_(const char* file, std::size_t line)
343 {
344 boost::throw_exception(boost::enable_error_info(unexpected_call())
345 << boost::throw_file(file)
346 << boost::throw_line(line)
347 );
348 }
349
throw_(const char * file,std::size_t line,std::string const & descr)350 void unexpected_call::throw_(const char* file, std::size_t line, std::string const& descr)
351 {
352 boost::throw_exception(boost::enable_error_info(unexpected_call(descr))
353 << boost::throw_file(file)
354 << boost::throw_line(line)
355 );
356 }
357
setup_error()358 setup_error::setup_error() :
359 logic_error("The library is not initialized properly")
360 {
361 }
362
setup_error(std::string const & descr)363 setup_error::setup_error(std::string const& descr) :
364 logic_error(descr)
365 {
366 }
367
~setup_error()368 setup_error::~setup_error() throw()
369 {
370 }
371
throw_(const char * file,std::size_t line)372 void setup_error::throw_(const char* file, std::size_t line)
373 {
374 boost::throw_exception(boost::enable_error_info(setup_error())
375 << boost::throw_file(file)
376 << boost::throw_line(line)
377 );
378 }
379
throw_(const char * file,std::size_t line,std::string const & descr)380 void setup_error::throw_(const char* file, std::size_t line, std::string const& descr)
381 {
382 boost::throw_exception(boost::enable_error_info(setup_error(descr))
383 << boost::throw_file(file)
384 << boost::throw_line(line)
385 );
386 }
387
limitation_error()388 limitation_error::limitation_error() :
389 logic_error("Boost.Log library limit reached")
390 {
391 }
392
limitation_error(std::string const & descr)393 limitation_error::limitation_error(std::string const& descr) :
394 logic_error(descr)
395 {
396 }
397
~limitation_error()398 limitation_error::~limitation_error() throw()
399 {
400 }
401
throw_(const char * file,std::size_t line)402 void limitation_error::throw_(const char* file, std::size_t line)
403 {
404 boost::throw_exception(boost::enable_error_info(limitation_error())
405 << boost::throw_file(file)
406 << boost::throw_line(line)
407 );
408 }
409
throw_(const char * file,std::size_t line,std::string const & descr)410 void limitation_error::throw_(const char* file, std::size_t line, std::string const& descr)
411 {
412 boost::throw_exception(boost::enable_error_info(limitation_error(descr))
413 << boost::throw_file(file)
414 << boost::throw_line(line)
415 );
416 }
417
418 BOOST_LOG_CLOSE_NAMESPACE // namespace log
419
420 } // namespace boost
421
422 #ifdef _MSC_VER
423 #pragma warning(pop)
424 #endif
425
426 #include <boost/log/detail/footer.hpp>
427