25#ifndef JAU_EXCEPTIONS_HPP_
26#define JAU_EXCEPTIONS_HPP_
31#include <system_error>
52 std::rethrow_exception(eptr);
54 }
catch (
const std::exception &e) {
55 ::fprintf(stderr,
"Exception caught: %s\n", e.what());
72 std::rethrow_exception(eptr);
74 }
catch (
const std::exception &e) {
96 std::string backtrace_;
101 ExceptionBase(std::string&&
type, std::string
const& m,
const char* file,
int line)
noexcept;
113 const std::string&
backtrace() const noexcept {
return backtrace_; }
124 virtual const char*
what() const noexcept {
172 public std::bad_alloc {
175 :
ExceptionBase(
"OutOfMemoryError", m, file, line), bad_alloc() { }
177 const char*
what() const noexcept
override {
183 public std::runtime_error {
200 const
char*
what() const noexcept
override {
205 public std::logic_error {
207 LogicError(std::string&&
type, std::string
const& m,
const char* file,
int line) noexcept
211 LogicError(std::string
const& m,
const char* file,
int line) noexcept
212 :
LogicError(
"LogicErrorStd", m, file, line) { }
221 const
char*
what() const noexcept
override {
226 public std::system_error {
242 const
char*
what() const noexcept
override {
248 public std::out_of_range {
255 :
IndexOutOfBoundsError(file, line,
"IndexOutOfBoundsError",
"Index " + std::to_string(index) +
", data length " + std::to_string(length)) { }
257 IndexOutOfBoundsError(
const std::string& msg,
const std::size_t index,
const std::size_t length,
const char* file,
int line) noexcept
258 :
IndexOutOfBoundsError(file, line,
"IndexOutOfBoundsError", msg +
": index " + std::to_string(index) +
", data length " + std::to_string(length)) { }
261 :
IndexOutOfBoundsError(file, line,
"IndexOutOfBoundsError",
"Index " + index_s +
", data length " + length_s) { }
263 IndexOutOfBoundsError(
const std::size_t index,
const std::size_t count,
const std::size_t length,
const char* file,
int line) noexcept
264 :
IndexOutOfBoundsError(file, line,
"IndexOutOfBoundsError",
"Index " + std::to_string(index) +
", count " + std::to_string(count) +
", data length " + std::to_string(length)) { }
266 const char*
what() const noexcept
override {
272 public std::invalid_argument {
281 const char*
what() const noexcept
override {
287 public std::domain_error {
296 const char*
what() const noexcept
override {
302 public std::ios_base::failure {
304 IOError(std::string
const& m,
const char* file,
int line,
const std::error_code& ec = std::io_errc::stream) noexcept
307 const char*
what() const noexcept
override {
Class template jau::function is a general-purpose static-polymorphic function wrapper.
const std::string & backtrace() const noexcept
Returns optional whole backtrace.
const std::string & whole_message() const noexcept
Returns brief message and optional whole backtrace, i.e.
LogicError(std::string &&type, std::string const &m, const char *file, int line) noexcept
OutOfMemoryError(std::string const &m, const char *file, int line)
bool handle_exception(std::exception_ptr eptr)
Handle given optional exception (nullable std::exception_ptr) and send std::exception::what() message...
RuntimeException(std::string const &m, const char *file, int line) noexcept
IndexOutOfBoundsError(const std::string &msg, const std::size_t index, const std::size_t length, const char *file, int line) noexcept
NullPointerException(std::string const &m, const char *file, int line) noexcept
ExceptionBase(std::string &&type, std::string const &m, const char *file, int line) noexcept
UnsupportedOperationException(std::string const &m, const char *file, int line) noexcept
~RuntimeExceptionBase() noexcept override=default
RuntimeSystemExceptionBase(std::string &&type, const std::error_code &ec, std::string const &m, const char *file, int line) noexcept
IndexOutOfBoundsError(const std::size_t index, const std::size_t count, const std::size_t length, const char *file, int line) noexcept
std::ostream & operator<<(std::ostream &out) noexcept
virtual ~ExceptionBase() noexcept=default
InternalError(std::string const &m, const char *file, int line) noexcept
IOError(std::string const &m, const char *file, int line, const std::error_code &ec=std::io_errc::stream) noexcept
const std::string & brief_message() const noexcept
Returns brief message.
RuntimeSystemException(const std::error_code &ec, std::string const &m, const char *file, int line) noexcept
const char * what() const noexcept override
IllegalArgumentError(std::string &&type, std::string const &m, const char *file, int line) noexcept
IndexOutOfBoundsError(const std::size_t index, const std::size_t length, const char *file, int line) noexcept
const char * what() const noexcept override
const char * what() const noexcept override
jau::function< bool(const std::exception &)> exception_handler_t
virtual const char * what() const noexcept
~RuntimeSystemExceptionBase() noexcept override=default
IllegalStateError(std::string &&type, std::string const &m, const char *file, int line) noexcept
LogicErrorBase(std::string &&type, std::string const &m, const char *file, int line) noexcept
NotImplementedException(std::string const &m, const char *file, int line) noexcept
const char * what() const noexcept override
const char * what() const noexcept override
const char * what() const noexcept override
IllegalArgumentError(std::string const &m, const char *file, int line) noexcept
~RuntimeException() noexcept override=default
const char * what() const noexcept override
const char * what() const noexcept override
~RuntimeSystemException() noexcept override=default
LogicError(std::string const &m, const char *file, int line) noexcept
~LogicError() noexcept override=default
const std::error_code & code() const noexcept
IndexOutOfBoundsError(const std::string &index_s, const std::string &length_s, const char *file, int line) noexcept
IllegalStateError(std::string const &m, const char *file, int line) noexcept
RuntimeExceptionBase(std::string &&type, std::string const &m, const char *file, int line) noexcept
RuntimeSystemException(std::string &&type, const std::error_code &ec, std::string const &m, const char *file, int line) noexcept
IndexOutOfBoundsError(const char *file, int line, std::string &&type, std::string const &m) noexcept
~LogicErrorBase() noexcept override=default
RuntimeException(std::string &&type, std::string const &m, const char *file, int line) noexcept
__pack(...): Produces MSVC, clang and gcc compatible lead-in and -out macros.