2 * Copyright Andrey Semashev 2007 - 2014.
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)
9 * \author Andrey Semashev
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.
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>
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)
33 BOOST_LOG_OPEN_NAMESPACE
37 //! Attaches attribute name exception information
38 BOOST_LOG_API void attach_attribute_name_info(exception& e, attribute_name const& name)
40 e << attribute_name_info(name);
45 runtime_error::runtime_error(std::string const& descr) :
46 std::runtime_error(descr)
50 runtime_error::~runtime_error() throw()
54 missing_value::missing_value() :
55 runtime_error("Requested value not found")
59 missing_value::missing_value(std::string const& descr) :
64 missing_value::~missing_value() throw()
68 void missing_value::throw_(const char* file, std::size_t line)
70 boost::throw_exception(boost::enable_error_info(missing_value())
71 << boost::throw_file(file)
72 << boost::throw_line(line)
76 void missing_value::throw_(const char* file, std::size_t line, std::string const& descr)
78 boost::throw_exception(boost::enable_error_info(missing_value(descr))
79 << boost::throw_file(file)
80 << boost::throw_line(line)
84 void missing_value::throw_(const char* file, std::size_t line, std::string const& descr, attribute_name const& name)
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)
93 invalid_type::invalid_type() :
94 runtime_error("Requested value has invalid type")
98 invalid_type::invalid_type(std::string const& descr) :
103 invalid_type::~invalid_type() throw()
107 void invalid_type::throw_(const char* file, std::size_t line)
109 boost::throw_exception(boost::enable_error_info(invalid_type())
110 << boost::throw_file(file)
111 << boost::throw_line(line)
115 void invalid_type::throw_(const char* file, std::size_t line, std::string const& descr)
117 boost::throw_exception(boost::enable_error_info(invalid_type(descr))
118 << boost::throw_file(file)
119 << boost::throw_line(line)
123 void invalid_type::throw_(const char* file, std::size_t line, std::string const& descr, attribute_name const& name)
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)
132 void invalid_type::throw_(const char* file, std::size_t line, std::string const& descr, type_info_wrapper const& type)
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)
141 void invalid_type::throw_(const char* file, std::size_t line, std::string const& descr, attribute_name const& name, type_info_wrapper const& type)
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)
151 invalid_value::invalid_value() :
152 runtime_error("The value is invalid")
156 invalid_value::invalid_value(std::string const& descr) :
161 invalid_value::~invalid_value() throw()
165 void invalid_value::throw_(const char* file, std::size_t line)
167 boost::throw_exception(boost::enable_error_info(invalid_value())
168 << boost::throw_file(file)
169 << boost::throw_line(line)
173 void invalid_value::throw_(const char* file, std::size_t line, std::string const& descr)
175 boost::throw_exception(boost::enable_error_info(invalid_value(descr))
176 << boost::throw_file(file)
177 << boost::throw_line(line)
181 parse_error::parse_error() :
182 runtime_error("Failed to parse content")
186 parse_error::parse_error(std::string const& descr) :
191 parse_error::~parse_error() throw()
195 void parse_error::throw_(const char* file, std::size_t line)
197 boost::throw_exception(boost::enable_error_info(parse_error())
198 << boost::throw_file(file)
199 << boost::throw_line(line)
203 void parse_error::throw_(const char* file, std::size_t line, std::string const& descr)
205 boost::throw_exception(boost::enable_error_info(parse_error(descr))
206 << boost::throw_file(file)
207 << boost::throw_line(line)
211 void parse_error::throw_(const char* file, std::size_t line, std::string const& descr, std::size_t content_line)
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)
220 void parse_error::throw_(const char* file, std::size_t line, std::string const& descr, attribute_name const& name)
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)
229 conversion_error::conversion_error() :
230 runtime_error("Failed to perform conversion")
234 conversion_error::conversion_error(std::string const& descr) :
239 conversion_error::~conversion_error() throw()
243 void conversion_error::throw_(const char* file, std::size_t line)
245 boost::throw_exception(boost::enable_error_info(conversion_error())
246 << boost::throw_file(file)
247 << boost::throw_line(line)
251 void conversion_error::throw_(const char* file, std::size_t line, std::string const& descr)
253 boost::throw_exception(boost::enable_error_info(conversion_error(descr))
254 << boost::throw_file(file)
255 << boost::throw_line(line)
259 system_error::system_error() :
260 runtime_error("Underlying API operation failed")
264 system_error::system_error(std::string const& descr) :
269 system_error::~system_error() throw()
273 void system_error::throw_(const char* file, std::size_t line)
275 boost::throw_exception(boost::enable_error_info(system_error())
276 << boost::throw_file(file)
277 << boost::throw_line(line)
281 void system_error::throw_(const char* file, std::size_t line, std::string const& descr)
283 boost::throw_exception(boost::enable_error_info(system_error(descr))
284 << boost::throw_file(file)
285 << boost::throw_line(line)
289 logic_error::logic_error(std::string const& descr) :
290 std::logic_error(descr)
294 logic_error::~logic_error() throw()
298 odr_violation::odr_violation() :
299 logic_error("ODR violation detected")
303 odr_violation::odr_violation(std::string const& descr) :
308 odr_violation::~odr_violation() throw()
312 void odr_violation::throw_(const char* file, std::size_t line)
314 boost::throw_exception(boost::enable_error_info(odr_violation())
315 << boost::throw_file(file)
316 << boost::throw_line(line)
320 void odr_violation::throw_(const char* file, std::size_t line, std::string const& descr)
322 boost::throw_exception(boost::enable_error_info(odr_violation(descr))
323 << boost::throw_file(file)
324 << boost::throw_line(line)
328 unexpected_call::unexpected_call() :
329 logic_error("Invalid call sequence")
333 unexpected_call::unexpected_call(std::string const& descr) :
338 unexpected_call::~unexpected_call() throw()
342 void unexpected_call::throw_(const char* file, std::size_t line)
344 boost::throw_exception(boost::enable_error_info(unexpected_call())
345 << boost::throw_file(file)
346 << boost::throw_line(line)
350 void unexpected_call::throw_(const char* file, std::size_t line, std::string const& descr)
352 boost::throw_exception(boost::enable_error_info(unexpected_call(descr))
353 << boost::throw_file(file)
354 << boost::throw_line(line)
358 setup_error::setup_error() :
359 logic_error("The library is not initialized properly")
363 setup_error::setup_error(std::string const& descr) :
368 setup_error::~setup_error() throw()
372 void setup_error::throw_(const char* file, std::size_t line)
374 boost::throw_exception(boost::enable_error_info(setup_error())
375 << boost::throw_file(file)
376 << boost::throw_line(line)
380 void setup_error::throw_(const char* file, std::size_t line, std::string const& descr)
382 boost::throw_exception(boost::enable_error_info(setup_error(descr))
383 << boost::throw_file(file)
384 << boost::throw_line(line)
388 limitation_error::limitation_error() :
389 logic_error("Boost.Log library limit reached")
393 limitation_error::limitation_error(std::string const& descr) :
398 limitation_error::~limitation_error() throw()
402 void limitation_error::throw_(const char* file, std::size_t line)
404 boost::throw_exception(boost::enable_error_info(limitation_error())
405 << boost::throw_file(file)
406 << boost::throw_line(line)
410 void limitation_error::throw_(const char* file, std::size_t line, std::string const& descr)
412 boost::throw_exception(boost::enable_error_info(limitation_error(descr))
413 << boost::throw_file(file)
414 << boost::throw_line(line)
418 BOOST_LOG_CLOSE_NAMESPACE // namespace log
426 #include <boost/log/detail/footer.hpp>