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 |
9 | * \author Andrey Semashev |
10 | * \date 31.10.2009 |
11 | * |
12 | * The header contains exception classes declarations. |
13 | */ |
14 | |
15 | #ifndef BOOST_LOG_EXCEPTIONS_HPP_INCLUDED_ |
16 | #define BOOST_LOG_EXCEPTIONS_HPP_INCLUDED_ |
17 | |
18 | #include <cstddef> |
19 | #include <string> |
20 | #include <stdexcept> |
21 | #include <boost/type_index.hpp> |
22 | #include <boost/preprocessor/seq/enum.hpp> |
23 | #include <boost/system/error_code.hpp> |
24 | #include <boost/system/system_error.hpp> |
25 | #include <boost/log/detail/config.hpp> |
26 | #include <boost/log/attributes/attribute_name.hpp> |
27 | #include <boost/log/detail/header.hpp> |
28 | |
29 | #ifdef BOOST_HAS_PRAGMA_ONCE |
30 | #pragma once |
31 | #endif |
32 | |
33 | namespace boost { |
34 | |
35 | // Forward-declaration of an exception base class from Boost.Exception |
36 | #if defined(__GNUC__) |
37 | # if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4) |
38 | # pragma GCC visibility push (default) |
39 | |
40 | class exception; |
41 | |
42 | # pragma GCC visibility pop |
43 | # else |
44 | |
45 | class exception; |
46 | |
47 | # endif |
48 | #else |
49 | |
50 | class BOOST_SYMBOL_VISIBLE exception; |
51 | |
52 | #endif |
53 | |
54 | BOOST_LOG_OPEN_NAMESPACE |
55 | |
56 | namespace aux { |
57 | |
58 | //! Attaches attribute name exception information |
59 | BOOST_LOG_API void attach_attribute_name_info(exception& e, attribute_name const& name); |
60 | |
61 | } // namespace aux |
62 | |
63 | /*! |
64 | * \brief Base class for memory allocation errors |
65 | * |
66 | * Exceptions derived from this class indicate problems with memory allocation. |
67 | */ |
68 | class BOOST_LOG_API bad_alloc : |
69 | public std::bad_alloc |
70 | { |
71 | private: |
72 | std::string m_message; |
73 | |
74 | public: |
75 | /*! |
76 | * Initializing constructor. Creates an exception with the specified error message. |
77 | */ |
78 | explicit bad_alloc(const char* descr); |
79 | /*! |
80 | * Initializing constructor. Creates an exception with the specified error message. |
81 | */ |
82 | explicit bad_alloc(std::string const& descr); |
83 | /*! |
84 | * Destructor |
85 | */ |
86 | ~bad_alloc() throw() BOOST_OVERRIDE; |
87 | |
88 | /*! |
89 | * Error message accessor. |
90 | */ |
91 | const char* what() const throw() BOOST_OVERRIDE; |
92 | |
93 | #ifndef BOOST_LOG_DOXYGEN_PASS |
94 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr); |
95 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr); |
96 | #endif |
97 | }; |
98 | |
99 | /*! |
100 | * \brief The exception is used to indicate reaching a storage capacity limit |
101 | */ |
102 | class BOOST_LOG_API capacity_limit_reached : |
103 | public bad_alloc |
104 | { |
105 | public: |
106 | /*! |
107 | * Initializing constructor. Creates an exception with the specified error message. |
108 | */ |
109 | explicit capacity_limit_reached(const char* descr); |
110 | /*! |
111 | * Initializing constructor. Creates an exception with the specified error message. |
112 | */ |
113 | explicit capacity_limit_reached(std::string const& descr); |
114 | /*! |
115 | * Destructor |
116 | */ |
117 | ~capacity_limit_reached() throw() BOOST_OVERRIDE; |
118 | |
119 | #ifndef BOOST_LOG_DOXYGEN_PASS |
120 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr); |
121 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr); |
122 | #endif |
123 | }; |
124 | |
125 | /*! |
126 | * \brief Base class for runtime exceptions from the logging library |
127 | * |
128 | * Exceptions derived from this class indicate a problem that may not directly |
129 | * be caused by the user's code that interacts with the library, such as |
130 | * errors caused by input data. |
131 | */ |
132 | class BOOST_LOG_API runtime_error : |
133 | public std::runtime_error |
134 | { |
135 | public: |
136 | /*! |
137 | * Initializing constructor. Creates an exception with the specified error message. |
138 | */ |
139 | explicit runtime_error(std::string const& descr); |
140 | /*! |
141 | * Destructor |
142 | */ |
143 | ~runtime_error() throw() BOOST_OVERRIDE; |
144 | }; |
145 | |
146 | /*! |
147 | * \brief Exception class that is used to indicate errors of missing values |
148 | */ |
149 | class BOOST_LOG_API missing_value : |
150 | public runtime_error |
151 | { |
152 | public: |
153 | /*! |
154 | * Default constructor. Creates an exception with the default error message. |
155 | */ |
156 | missing_value(); |
157 | /*! |
158 | * Initializing constructor. Creates an exception with the specified error message. |
159 | */ |
160 | explicit missing_value(std::string const& descr); |
161 | /*! |
162 | * Destructor |
163 | */ |
164 | ~missing_value() throw() BOOST_OVERRIDE; |
165 | |
166 | #ifndef BOOST_LOG_DOXYGEN_PASS |
167 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line); |
168 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr); |
169 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr); |
170 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr, attribute_name const& name); |
171 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr, attribute_name const& name); |
172 | #endif |
173 | }; |
174 | |
175 | /*! |
176 | * \brief Exception class that is used to indicate errors of incorrect type of an object |
177 | */ |
178 | class BOOST_LOG_API invalid_type : |
179 | public runtime_error |
180 | { |
181 | public: |
182 | /*! |
183 | * Default constructor. Creates an exception with the default error message. |
184 | */ |
185 | invalid_type(); |
186 | /*! |
187 | * Initializing constructor. Creates an exception with the specified error message. |
188 | */ |
189 | explicit invalid_type(std::string const& descr); |
190 | /*! |
191 | * Destructor |
192 | */ |
193 | ~invalid_type() throw() BOOST_OVERRIDE; |
194 | |
195 | #ifndef BOOST_LOG_DOXYGEN_PASS |
196 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line); |
197 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr); |
198 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr); |
199 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr, attribute_name const& name); |
200 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr, attribute_name const& name); |
201 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr, typeindex::type_index const& type); |
202 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr, typeindex::type_index const& type); |
203 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr, attribute_name const& name, typeindex::type_index const& type); |
204 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr, attribute_name const& name, typeindex::type_index const& type); |
205 | #endif |
206 | }; |
207 | |
208 | /*! |
209 | * \brief Exception class that is used to indicate errors of incorrect value of an object |
210 | */ |
211 | class BOOST_LOG_API invalid_value : |
212 | public runtime_error |
213 | { |
214 | public: |
215 | /*! |
216 | * Default constructor. Creates an exception with the default error message. |
217 | */ |
218 | invalid_value(); |
219 | /*! |
220 | * Initializing constructor. Creates an exception with the specified error message. |
221 | */ |
222 | explicit invalid_value(std::string const& descr); |
223 | /*! |
224 | * Destructor |
225 | */ |
226 | ~invalid_value() throw() BOOST_OVERRIDE; |
227 | |
228 | #ifndef BOOST_LOG_DOXYGEN_PASS |
229 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line); |
230 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr); |
231 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr); |
232 | #endif |
233 | }; |
234 | |
235 | /*! |
236 | * \brief Exception class that is used to indicate parsing errors |
237 | */ |
238 | class BOOST_LOG_API parse_error : |
239 | public runtime_error |
240 | { |
241 | public: |
242 | /*! |
243 | * Default constructor. Creates an exception with the default error message. |
244 | */ |
245 | parse_error(); |
246 | /*! |
247 | * Initializing constructor. Creates an exception with the specified error message. |
248 | */ |
249 | explicit parse_error(std::string const& descr); |
250 | /*! |
251 | * Destructor |
252 | */ |
253 | ~parse_error() throw() BOOST_OVERRIDE; |
254 | |
255 | #ifndef BOOST_LOG_DOXYGEN_PASS |
256 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line); |
257 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr); |
258 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr); |
259 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr, std::size_t content_line); |
260 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr, std::size_t content_line); |
261 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr, attribute_name const& name); |
262 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr, attribute_name const& name); |
263 | #endif |
264 | }; |
265 | |
266 | /*! |
267 | * \brief Exception class that is used to indicate conversion errors |
268 | */ |
269 | class BOOST_LOG_API conversion_error : |
270 | public runtime_error |
271 | { |
272 | public: |
273 | /*! |
274 | * Default constructor. Creates an exception with the default error message. |
275 | */ |
276 | conversion_error(); |
277 | /*! |
278 | * Initializing constructor. Creates an exception with the specified error message. |
279 | */ |
280 | explicit conversion_error(std::string const& descr); |
281 | /*! |
282 | * Destructor |
283 | */ |
284 | ~conversion_error() throw() BOOST_OVERRIDE; |
285 | |
286 | #ifndef BOOST_LOG_DOXYGEN_PASS |
287 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line); |
288 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr); |
289 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr); |
290 | #endif |
291 | }; |
292 | |
293 | /*! |
294 | * \brief Exception class that is used to indicate underlying OS API errors |
295 | */ |
296 | class BOOST_LOG_API system_error : |
297 | public boost::system::system_error |
298 | { |
299 | public: |
300 | /*! |
301 | * Initializing constructor. Creates an exception with the specified error message. |
302 | */ |
303 | system_error(boost::system::error_code code, std::string const& descr); |
304 | /*! |
305 | * Destructor |
306 | */ |
307 | ~system_error() throw() BOOST_OVERRIDE; |
308 | |
309 | #ifndef BOOST_LOG_DOXYGEN_PASS |
310 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr, int system_error_code); |
311 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr, int system_error_code); |
312 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr, boost::system::error_code code); |
313 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr, boost::system::error_code code); |
314 | #endif |
315 | }; |
316 | |
317 | /*! |
318 | * \brief Base class for logic exceptions from the logging library |
319 | * |
320 | * Exceptions derived from this class usually indicate errors on the user's side, such as |
321 | * incorrect library usage. |
322 | */ |
323 | class BOOST_LOG_API logic_error : |
324 | public std::logic_error |
325 | { |
326 | public: |
327 | /*! |
328 | * Initializing constructor. Creates an exception with the specified error message. |
329 | */ |
330 | explicit logic_error(std::string const& descr); |
331 | /*! |
332 | * Destructor |
333 | */ |
334 | ~logic_error() throw() BOOST_OVERRIDE; |
335 | |
336 | #ifndef BOOST_LOG_DOXYGEN_PASS |
337 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr); |
338 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr); |
339 | #endif |
340 | }; |
341 | |
342 | /*! |
343 | * \brief Exception class that is used to indicate ODR violation |
344 | */ |
345 | class BOOST_LOG_API odr_violation : |
346 | public logic_error |
347 | { |
348 | public: |
349 | /*! |
350 | * Default constructor. Creates an exception with the default error message. |
351 | */ |
352 | odr_violation(); |
353 | /*! |
354 | * Initializing constructor. Creates an exception with the specified error message. |
355 | */ |
356 | explicit odr_violation(std::string const& descr); |
357 | /*! |
358 | * Destructor |
359 | */ |
360 | ~odr_violation() throw() BOOST_OVERRIDE; |
361 | |
362 | #ifndef BOOST_LOG_DOXYGEN_PASS |
363 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line); |
364 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr); |
365 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr); |
366 | #endif |
367 | }; |
368 | |
369 | /*! |
370 | * \brief Exception class that is used to indicate invalid call sequence |
371 | */ |
372 | class BOOST_LOG_API unexpected_call : |
373 | public logic_error |
374 | { |
375 | public: |
376 | /*! |
377 | * Default constructor. Creates an exception with the default error message. |
378 | */ |
379 | unexpected_call(); |
380 | /*! |
381 | * Initializing constructor. Creates an exception with the specified error message. |
382 | */ |
383 | explicit unexpected_call(std::string const& descr); |
384 | /*! |
385 | * Destructor |
386 | */ |
387 | ~unexpected_call() throw() BOOST_OVERRIDE; |
388 | |
389 | #ifndef BOOST_LOG_DOXYGEN_PASS |
390 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line); |
391 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr); |
392 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr); |
393 | #endif |
394 | }; |
395 | |
396 | /*! |
397 | * \brief Exception class that is used to indicate invalid library setup |
398 | */ |
399 | class BOOST_LOG_API setup_error : |
400 | public logic_error |
401 | { |
402 | public: |
403 | /*! |
404 | * Default constructor. Creates an exception with the default error message. |
405 | */ |
406 | setup_error(); |
407 | /*! |
408 | * Initializing constructor. Creates an exception with the specified error message. |
409 | */ |
410 | explicit setup_error(std::string const& descr); |
411 | /*! |
412 | * Destructor |
413 | */ |
414 | ~setup_error() throw() BOOST_OVERRIDE; |
415 | |
416 | #ifndef BOOST_LOG_DOXYGEN_PASS |
417 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line); |
418 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr); |
419 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr); |
420 | #endif |
421 | }; |
422 | |
423 | /*! |
424 | * \brief Exception class that is used to indicate library limitation |
425 | */ |
426 | class BOOST_LOG_API limitation_error : |
427 | public logic_error |
428 | { |
429 | public: |
430 | /*! |
431 | * Default constructor. Creates an exception with the default error message. |
432 | */ |
433 | limitation_error(); |
434 | /*! |
435 | * Initializing constructor. Creates an exception with the specified error message. |
436 | */ |
437 | explicit limitation_error(std::string const& descr); |
438 | /*! |
439 | * Destructor |
440 | */ |
441 | ~limitation_error() throw() BOOST_OVERRIDE; |
442 | |
443 | #ifndef BOOST_LOG_DOXYGEN_PASS |
444 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line); |
445 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, const char* descr); |
446 | static BOOST_LOG_NORETURN void throw_(const char* file, std::size_t line, std::string const& descr); |
447 | #endif |
448 | }; |
449 | |
450 | BOOST_LOG_CLOSE_NAMESPACE // namespace log |
451 | |
452 | } // namespace boost |
453 | |
454 | #ifndef BOOST_LOG_DOXYGEN_PASS |
455 | |
456 | #define BOOST_LOG_THROW(ex)\ |
457 | ex::throw_(__FILE__, static_cast< std::size_t >(__LINE__)) |
458 | |
459 | #define BOOST_LOG_THROW_DESCR(ex, descr)\ |
460 | ex::throw_(__FILE__, static_cast< std::size_t >(__LINE__), descr) |
461 | |
462 | #define BOOST_LOG_THROW_DESCR_PARAMS(ex, descr, params)\ |
463 | ex::throw_(__FILE__, static_cast< std::size_t >(__LINE__), descr, BOOST_PP_SEQ_ENUM(params)) |
464 | |
465 | #endif // BOOST_LOG_DOXYGEN_PASS |
466 | |
467 | #include <boost/log/detail/footer.hpp> |
468 | |
469 | #endif // BOOST_LOG_EXCEPTIONS_HPP_INCLUDED_ |
470 | |