• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/log/detail/config.hpp>
17  #include <boost/throw_exception.hpp>
18  #include <boost/exception/exception.hpp>
19  #include <boost/exception/errinfo_at_line.hpp>
20  #include <boost/exception/info.hpp>
21  #include <boost/log/exceptions.hpp>
22  #include <boost/log/support/exception.hpp>
23  #include <boost/log/detail/header.hpp>
24  
25  #ifdef _MSC_VER
26  #pragma warning(push)
27  // conversion from 'size_t' to 'boost::error_info<boost::throw_line_,int>::value_type', possible loss of data
28  // No idea why line number is stored as a signed integer in the error info...
29  #pragma warning(disable: 4267)
30  #endif
31  
32  namespace boost {
33  
34  BOOST_LOG_OPEN_NAMESPACE
35  
36  namespace aux {
37  
38  //! Attaches attribute name exception information
attach_attribute_name_info(exception & e,attribute_name const & name)39  BOOST_LOG_API void attach_attribute_name_info(exception& e, attribute_name const& name)
40  {
41      e << attribute_name_info(name);
42  }
43  
44  } // namespace aux
45  
bad_alloc(const char * descr)46  bad_alloc::bad_alloc(const char* descr) :
47      m_message(descr)
48  {
49  }
50  
bad_alloc(std::string const & descr)51  bad_alloc::bad_alloc(std::string const& descr) :
52      m_message(descr)
53  {
54  }
55  
~bad_alloc()56  bad_alloc::~bad_alloc() throw()
57  {
58  }
59  
what() const60  const char* bad_alloc::what() const throw()
61  {
62      return m_message.c_str();
63  }
64  
throw_(const char * file,std::size_t line,const char * descr)65  void bad_alloc::throw_(const char* file, std::size_t line, const char* descr)
66  {
67      boost::throw_exception(boost::enable_error_info(bad_alloc(descr))
68          << boost::throw_file(file)
69          << boost::throw_line(line)
70      );
71  }
72  
throw_(const char * file,std::size_t line,std::string const & descr)73  void bad_alloc::throw_(const char* file, std::size_t line, std::string const& descr)
74  {
75      boost::throw_exception(boost::enable_error_info(bad_alloc(descr))
76          << boost::throw_file(file)
77          << boost::throw_line(line)
78      );
79  }
80  
capacity_limit_reached(const char * descr)81  capacity_limit_reached::capacity_limit_reached(const char* descr) :
82      bad_alloc(descr)
83  {
84  }
85  
capacity_limit_reached(std::string const & descr)86  capacity_limit_reached::capacity_limit_reached(std::string const& descr) :
87      bad_alloc(descr)
88  {
89  }
90  
~capacity_limit_reached()91  capacity_limit_reached::~capacity_limit_reached() throw()
92  {
93  }
94  
throw_(const char * file,std::size_t line,const char * descr)95  void capacity_limit_reached::throw_(const char* file, std::size_t line, const char* descr)
96  {
97      boost::throw_exception(boost::enable_error_info(capacity_limit_reached(descr))
98          << boost::throw_file(file)
99          << boost::throw_line(line)
100      );
101  }
102  
throw_(const char * file,std::size_t line,std::string const & descr)103  void capacity_limit_reached::throw_(const char* file, std::size_t line, std::string const& descr)
104  {
105      boost::throw_exception(boost::enable_error_info(capacity_limit_reached(descr))
106          << boost::throw_file(file)
107          << boost::throw_line(line)
108      );
109  }
110  
runtime_error(std::string const & descr)111  runtime_error::runtime_error(std::string const& descr) :
112      std::runtime_error(descr)
113  {
114  }
115  
~runtime_error()116  runtime_error::~runtime_error() throw()
117  {
118  }
119  
missing_value()120  missing_value::missing_value() :
121      runtime_error("Requested value not found")
122  {
123  }
124  
missing_value(std::string const & descr)125  missing_value::missing_value(std::string const& descr) :
126      runtime_error(descr)
127  {
128  }
129  
~missing_value()130  missing_value::~missing_value() throw()
131  {
132  }
133  
throw_(const char * file,std::size_t line)134  void missing_value::throw_(const char* file, std::size_t line)
135  {
136      boost::throw_exception(boost::enable_error_info(missing_value())
137          << boost::throw_file(file)
138          << boost::throw_line(line)
139      );
140  }
141  
throw_(const char * file,std::size_t line,const char * descr)142  void missing_value::throw_(const char* file, std::size_t line, const char* descr)
143  {
144      boost::throw_exception(boost::enable_error_info(missing_value(descr))
145          << boost::throw_file(file)
146          << boost::throw_line(line)
147      );
148  }
149  
throw_(const char * file,std::size_t line,std::string const & descr)150  void missing_value::throw_(const char* file, std::size_t line, std::string const& descr)
151  {
152      boost::throw_exception(boost::enable_error_info(missing_value(descr))
153          << boost::throw_file(file)
154          << boost::throw_line(line)
155      );
156  }
157  
throw_(const char * file,std::size_t line,const char * descr,attribute_name const & name)158  void missing_value::throw_(const char* file, std::size_t line, const char* descr, attribute_name const& name)
159  {
160      boost::throw_exception(boost::enable_error_info(missing_value(descr))
161          << boost::throw_file(file)
162          << boost::throw_line(line)
163          << attribute_name_info(name)
164      );
165  }
166  
throw_(const char * file,std::size_t line,std::string const & descr,attribute_name const & name)167  void missing_value::throw_(const char* file, std::size_t line, std::string const& descr, attribute_name const& name)
168  {
169      boost::throw_exception(boost::enable_error_info(missing_value(descr))
170          << boost::throw_file(file)
171          << boost::throw_line(line)
172          << attribute_name_info(name)
173      );
174  }
175  
invalid_type()176  invalid_type::invalid_type() :
177      runtime_error("Requested value has invalid type")
178  {
179  }
180  
invalid_type(std::string const & descr)181  invalid_type::invalid_type(std::string const& descr) :
182      runtime_error(descr)
183  {
184  }
185  
~invalid_type()186  invalid_type::~invalid_type() throw()
187  {
188  }
189  
throw_(const char * file,std::size_t line)190  void invalid_type::throw_(const char* file, std::size_t line)
191  {
192      boost::throw_exception(boost::enable_error_info(invalid_type())
193          << boost::throw_file(file)
194          << boost::throw_line(line)
195      );
196  }
197  
throw_(const char * file,std::size_t line,const char * descr)198  void invalid_type::throw_(const char* file, std::size_t line, const char* descr)
199  {
200      boost::throw_exception(boost::enable_error_info(invalid_type(descr))
201          << boost::throw_file(file)
202          << boost::throw_line(line)
203      );
204  }
205  
throw_(const char * file,std::size_t line,std::string const & descr)206  void invalid_type::throw_(const char* file, std::size_t line, std::string const& descr)
207  {
208      boost::throw_exception(boost::enable_error_info(invalid_type(descr))
209          << boost::throw_file(file)
210          << boost::throw_line(line)
211      );
212  }
213  
throw_(const char * file,std::size_t line,const char * descr,attribute_name const & name)214  void invalid_type::throw_(const char* file, std::size_t line, const char* descr, attribute_name const& name)
215  {
216      boost::throw_exception(boost::enable_error_info(invalid_type(descr))
217          << boost::throw_file(file)
218          << boost::throw_line(line)
219          << attribute_name_info(name)
220      );
221  }
222  
throw_(const char * file,std::size_t line,std::string const & descr,attribute_name const & name)223  void invalid_type::throw_(const char* file, std::size_t line, std::string const& descr, attribute_name const& name)
224  {
225      boost::throw_exception(boost::enable_error_info(invalid_type(descr))
226          << boost::throw_file(file)
227          << boost::throw_line(line)
228          << attribute_name_info(name)
229      );
230  }
231  
throw_(const char * file,std::size_t line,const char * descr,typeindex::type_index const & type)232  void invalid_type::throw_(const char* file, std::size_t line, const char* descr, typeindex::type_index const& type)
233  {
234      boost::throw_exception(boost::enable_error_info(invalid_type(descr))
235          << boost::throw_file(file)
236          << boost::throw_line(line)
237          << type_info_info(type)
238      );
239  }
240  
throw_(const char * file,std::size_t line,std::string const & descr,typeindex::type_index const & type)241  void invalid_type::throw_(const char* file, std::size_t line, std::string const& descr, typeindex::type_index const& type)
242  {
243      boost::throw_exception(boost::enable_error_info(invalid_type(descr))
244          << boost::throw_file(file)
245          << boost::throw_line(line)
246          << type_info_info(type)
247      );
248  }
249  
throw_(const char * file,std::size_t line,const char * descr,attribute_name const & name,typeindex::type_index const & type)250  void invalid_type::throw_(const char* file, std::size_t line, const char* descr, attribute_name const& name, typeindex::type_index const& type)
251  {
252      boost::throw_exception(boost::enable_error_info(invalid_type(descr))
253          << boost::throw_file(file)
254          << boost::throw_line(line)
255          << attribute_name_info(name)
256          << type_info_info(type)
257      );
258  }
259  
throw_(const char * file,std::size_t line,std::string const & descr,attribute_name const & name,typeindex::type_index const & type)260  void invalid_type::throw_(const char* file, std::size_t line, std::string const& descr, attribute_name const& name, typeindex::type_index const& type)
261  {
262      boost::throw_exception(boost::enable_error_info(invalid_type(descr))
263          << boost::throw_file(file)
264          << boost::throw_line(line)
265          << attribute_name_info(name)
266          << type_info_info(type)
267      );
268  }
269  
invalid_value()270  invalid_value::invalid_value() :
271      runtime_error("The value is invalid")
272  {
273  }
274  
invalid_value(std::string const & descr)275  invalid_value::invalid_value(std::string const& descr) :
276      runtime_error(descr)
277  {
278  }
279  
~invalid_value()280  invalid_value::~invalid_value() throw()
281  {
282  }
283  
throw_(const char * file,std::size_t line)284  void invalid_value::throw_(const char* file, std::size_t line)
285  {
286      boost::throw_exception(boost::enable_error_info(invalid_value())
287          << boost::throw_file(file)
288          << boost::throw_line(line)
289      );
290  }
291  
throw_(const char * file,std::size_t line,const char * descr)292  void invalid_value::throw_(const char* file, std::size_t line, const char* descr)
293  {
294      boost::throw_exception(boost::enable_error_info(invalid_value(descr))
295          << boost::throw_file(file)
296          << boost::throw_line(line)
297      );
298  }
299  
throw_(const char * file,std::size_t line,std::string const & descr)300  void invalid_value::throw_(const char* file, std::size_t line, std::string const& descr)
301  {
302      boost::throw_exception(boost::enable_error_info(invalid_value(descr))
303          << boost::throw_file(file)
304          << boost::throw_line(line)
305      );
306  }
307  
parse_error()308  parse_error::parse_error() :
309      runtime_error("Failed to parse content")
310  {
311  }
312  
parse_error(std::string const & descr)313  parse_error::parse_error(std::string const& descr) :
314      runtime_error(descr)
315  {
316  }
317  
~parse_error()318  parse_error::~parse_error() throw()
319  {
320  }
321  
throw_(const char * file,std::size_t line)322  void parse_error::throw_(const char* file, std::size_t line)
323  {
324      boost::throw_exception(boost::enable_error_info(parse_error())
325          << boost::throw_file(file)
326          << boost::throw_line(line)
327      );
328  }
329  
throw_(const char * file,std::size_t line,const char * descr)330  void parse_error::throw_(const char* file, std::size_t line, const char* descr)
331  {
332      boost::throw_exception(boost::enable_error_info(parse_error(descr))
333          << boost::throw_file(file)
334          << boost::throw_line(line)
335      );
336  }
337  
throw_(const char * file,std::size_t line,std::string const & descr)338  void parse_error::throw_(const char* file, std::size_t line, std::string const& descr)
339  {
340      boost::throw_exception(boost::enable_error_info(parse_error(descr))
341          << boost::throw_file(file)
342          << boost::throw_line(line)
343      );
344  }
345  
throw_(const char * file,std::size_t line,const char * descr,std::size_t content_line)346  void parse_error::throw_(const char* file, std::size_t line, const char* descr, std::size_t content_line)
347  {
348      boost::throw_exception(boost::enable_error_info(parse_error(descr))
349          << boost::throw_file(file)
350          << boost::throw_line(line)
351          << boost::errinfo_at_line(content_line)
352      );
353  }
354  
throw_(const char * file,std::size_t line,std::string const & descr,std::size_t content_line)355  void parse_error::throw_(const char* file, std::size_t line, std::string const& descr, std::size_t content_line)
356  {
357      boost::throw_exception(boost::enable_error_info(parse_error(descr))
358          << boost::throw_file(file)
359          << boost::throw_line(line)
360          << boost::errinfo_at_line(content_line)
361      );
362  }
363  
throw_(const char * file,std::size_t line,const char * descr,attribute_name const & name)364  void parse_error::throw_(const char* file, std::size_t line, const char* descr, attribute_name const& name)
365  {
366      boost::throw_exception(boost::enable_error_info(parse_error(descr))
367          << boost::throw_file(file)
368          << boost::throw_line(line)
369          << attribute_name_info(name)
370      );
371  }
372  
throw_(const char * file,std::size_t line,std::string const & descr,attribute_name const & name)373  void parse_error::throw_(const char* file, std::size_t line, std::string const& descr, attribute_name const& name)
374  {
375      boost::throw_exception(boost::enable_error_info(parse_error(descr))
376          << boost::throw_file(file)
377          << boost::throw_line(line)
378          << attribute_name_info(name)
379      );
380  }
381  
conversion_error()382  conversion_error::conversion_error() :
383      runtime_error("Failed to perform conversion")
384  {
385  }
386  
conversion_error(std::string const & descr)387  conversion_error::conversion_error(std::string const& descr) :
388      runtime_error(descr)
389  {
390  }
391  
~conversion_error()392  conversion_error::~conversion_error() throw()
393  {
394  }
395  
throw_(const char * file,std::size_t line)396  void conversion_error::throw_(const char* file, std::size_t line)
397  {
398      boost::throw_exception(boost::enable_error_info(conversion_error())
399          << boost::throw_file(file)
400          << boost::throw_line(line)
401      );
402  }
403  
throw_(const char * file,std::size_t line,const char * descr)404  void conversion_error::throw_(const char* file, std::size_t line, const char* descr)
405  {
406      boost::throw_exception(boost::enable_error_info(conversion_error(descr))
407          << boost::throw_file(file)
408          << boost::throw_line(line)
409      );
410  }
411  
throw_(const char * file,std::size_t line,std::string const & descr)412  void conversion_error::throw_(const char* file, std::size_t line, std::string const& descr)
413  {
414      boost::throw_exception(boost::enable_error_info(conversion_error(descr))
415          << boost::throw_file(file)
416          << boost::throw_line(line)
417      );
418  }
419  
system_error(boost::system::error_code code,std::string const & descr)420  system_error::system_error(boost::system::error_code code, std::string const& descr) :
421      boost::system::system_error(code, descr)
422  {
423  }
424  
~system_error()425  system_error::~system_error() throw()
426  {
427  }
428  
throw_(const char * file,std::size_t line,const char * descr,int system_error_code)429  void system_error::throw_(const char* file, std::size_t line, const char* descr, int system_error_code)
430  {
431      boost::throw_exception(boost::enable_error_info(system_error(boost::system::error_code(system_error_code, boost::system::system_category()), descr))
432          << boost::throw_file(file)
433          << boost::throw_line(line)
434      );
435  }
436  
throw_(const char * file,std::size_t line,std::string const & descr,int system_error_code)437  void system_error::throw_(const char* file, std::size_t line, std::string const& descr, int system_error_code)
438  {
439      boost::throw_exception(boost::enable_error_info(system_error(boost::system::error_code(system_error_code, boost::system::system_category()), descr))
440          << boost::throw_file(file)
441          << boost::throw_line(line)
442      );
443  }
444  
throw_(const char * file,std::size_t line,const char * descr,boost::system::error_code code)445  void system_error::throw_(const char* file, std::size_t line, const char* descr, boost::system::error_code code)
446  {
447      boost::throw_exception(boost::enable_error_info(system_error(code, descr))
448          << boost::throw_file(file)
449          << boost::throw_line(line)
450      );
451  }
452  
throw_(const char * file,std::size_t line,std::string const & descr,boost::system::error_code code)453  void system_error::throw_(const char* file, std::size_t line, std::string const& descr, boost::system::error_code code)
454  {
455      boost::throw_exception(boost::enable_error_info(system_error(code, descr))
456          << boost::throw_file(file)
457          << boost::throw_line(line)
458      );
459  }
460  
logic_error(std::string const & descr)461  logic_error::logic_error(std::string const& descr) :
462      std::logic_error(descr)
463  {
464  }
465  
~logic_error()466  logic_error::~logic_error() throw()
467  {
468  }
469  
throw_(const char * file,std::size_t line,const char * descr)470  void logic_error::throw_(const char* file, std::size_t line, const char* descr)
471  {
472      boost::throw_exception(boost::enable_error_info(logic_error(descr))
473          << boost::throw_file(file)
474          << boost::throw_line(line)
475      );
476  }
477  
throw_(const char * file,std::size_t line,std::string const & descr)478  void logic_error::throw_(const char* file, std::size_t line, std::string const& descr)
479  {
480      boost::throw_exception(boost::enable_error_info(logic_error(descr))
481          << boost::throw_file(file)
482          << boost::throw_line(line)
483      );
484  }
485  
odr_violation()486  odr_violation::odr_violation() :
487      logic_error("ODR violation detected")
488  {
489  }
490  
odr_violation(std::string const & descr)491  odr_violation::odr_violation(std::string const& descr) :
492      logic_error(descr)
493  {
494  }
495  
~odr_violation()496  odr_violation::~odr_violation() throw()
497  {
498  }
499  
throw_(const char * file,std::size_t line)500  void odr_violation::throw_(const char* file, std::size_t line)
501  {
502      boost::throw_exception(boost::enable_error_info(odr_violation())
503          << boost::throw_file(file)
504          << boost::throw_line(line)
505      );
506  }
507  
throw_(const char * file,std::size_t line,const char * descr)508  void odr_violation::throw_(const char* file, std::size_t line, const char* descr)
509  {
510      boost::throw_exception(boost::enable_error_info(odr_violation(descr))
511          << boost::throw_file(file)
512          << boost::throw_line(line)
513      );
514  }
515  
throw_(const char * file,std::size_t line,std::string const & descr)516  void odr_violation::throw_(const char* file, std::size_t line, std::string const& descr)
517  {
518      boost::throw_exception(boost::enable_error_info(odr_violation(descr))
519          << boost::throw_file(file)
520          << boost::throw_line(line)
521      );
522  }
523  
unexpected_call()524  unexpected_call::unexpected_call() :
525      logic_error("Invalid call sequence")
526  {
527  }
528  
unexpected_call(std::string const & descr)529  unexpected_call::unexpected_call(std::string const& descr) :
530      logic_error(descr)
531  {
532  }
533  
~unexpected_call()534  unexpected_call::~unexpected_call() throw()
535  {
536  }
537  
throw_(const char * file,std::size_t line)538  void unexpected_call::throw_(const char* file, std::size_t line)
539  {
540      boost::throw_exception(boost::enable_error_info(unexpected_call())
541          << boost::throw_file(file)
542          << boost::throw_line(line)
543      );
544  }
545  
throw_(const char * file,std::size_t line,const char * descr)546  void unexpected_call::throw_(const char* file, std::size_t line, const char* descr)
547  {
548      boost::throw_exception(boost::enable_error_info(unexpected_call(descr))
549          << boost::throw_file(file)
550          << boost::throw_line(line)
551      );
552  }
553  
throw_(const char * file,std::size_t line,std::string const & descr)554  void unexpected_call::throw_(const char* file, std::size_t line, std::string const& descr)
555  {
556      boost::throw_exception(boost::enable_error_info(unexpected_call(descr))
557          << boost::throw_file(file)
558          << boost::throw_line(line)
559      );
560  }
561  
setup_error()562  setup_error::setup_error() :
563      logic_error("The library is not initialized properly")
564  {
565  }
566  
setup_error(std::string const & descr)567  setup_error::setup_error(std::string const& descr) :
568      logic_error(descr)
569  {
570  }
571  
~setup_error()572  setup_error::~setup_error() throw()
573  {
574  }
575  
throw_(const char * file,std::size_t line)576  void setup_error::throw_(const char* file, std::size_t line)
577  {
578      boost::throw_exception(boost::enable_error_info(setup_error())
579          << boost::throw_file(file)
580          << boost::throw_line(line)
581      );
582  }
583  
throw_(const char * file,std::size_t line,const char * descr)584  void setup_error::throw_(const char* file, std::size_t line, const char* descr)
585  {
586      boost::throw_exception(boost::enable_error_info(setup_error(descr))
587          << boost::throw_file(file)
588          << boost::throw_line(line)
589      );
590  }
591  
throw_(const char * file,std::size_t line,std::string const & descr)592  void setup_error::throw_(const char* file, std::size_t line, std::string const& descr)
593  {
594      boost::throw_exception(boost::enable_error_info(setup_error(descr))
595          << boost::throw_file(file)
596          << boost::throw_line(line)
597      );
598  }
599  
limitation_error()600  limitation_error::limitation_error() :
601      logic_error("Boost.Log library limit reached")
602  {
603  }
604  
limitation_error(std::string const & descr)605  limitation_error::limitation_error(std::string const& descr) :
606      logic_error(descr)
607  {
608  }
609  
~limitation_error()610  limitation_error::~limitation_error() throw()
611  {
612  }
613  
throw_(const char * file,std::size_t line)614  void limitation_error::throw_(const char* file, std::size_t line)
615  {
616      boost::throw_exception(boost::enable_error_info(limitation_error())
617          << boost::throw_file(file)
618          << boost::throw_line(line)
619      );
620  }
621  
throw_(const char * file,std::size_t line,const char * descr)622  void limitation_error::throw_(const char* file, std::size_t line, const char* descr)
623  {
624      boost::throw_exception(boost::enable_error_info(limitation_error(descr))
625          << boost::throw_file(file)
626          << boost::throw_line(line)
627      );
628  }
629  
throw_(const char * file,std::size_t line,std::string const & descr)630  void limitation_error::throw_(const char* file, std::size_t line, std::string const& descr)
631  {
632      boost::throw_exception(boost::enable_error_info(limitation_error(descr))
633          << boost::throw_file(file)
634          << boost::throw_line(line)
635      );
636  }
637  
638  BOOST_LOG_CLOSE_NAMESPACE // namespace log
639  
640  } // namespace boost
641  
642  #ifdef _MSC_VER
643  #pragma warning(pop)
644  #endif
645  
646  #include <boost/log/detail/footer.hpp>
647