]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/boost/log/exceptions.hpp
import quincy beta 17.1.0
[ceph.git] / ceph / src / boost / boost / log / exceptions.hpp
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_