Fawkes API Fawkes Development Version
exception.h
1
2/***************************************************************************
3 * exception.h - basic exception
4 *
5 * Generated: Thu Feb 09 13:02:37 2006 (from FireVision)
6 * Copyright 2005-2006 Tim Niemueller [www.niemueller.de]
7 *
8 ****************************************************************************/
9
10/* This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version. A runtime exception applies to
14 * this software (see LICENSE.GPL_WRE file mentioned below for details).
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU Library General Public License for more details.
20 *
21 * Read the full text in the LICENSE.GPL_WRE file in the doc directory.
22 */
23
24#ifndef _CORE_EXCEPTION_H_
25#define _CORE_EXCEPTION_H_
26
27// needed for va_list
28#include <cstdarg>
29#include <exception>
30
31namespace fawkes {
32
33class Mutex;
34
35class Exception : public std::exception
36{
37public:
38 Exception(const char *format, ...) noexcept;
39 Exception(int errnoval, const char *format, ...) noexcept;
40 Exception(const Exception &exc) noexcept;
41 virtual ~Exception() noexcept;
42
43 virtual void raise();
44 void prepend(const char *format, ...) noexcept;
45 void append(const char *format, ...) noexcept;
46 void append_va(const char *format, va_list va) noexcept;
47 void append(const Exception &e) noexcept;
48 void print_trace() noexcept;
49 void print_backtrace() const noexcept;
50 char * generate_backtrace() const noexcept;
51
52 int get_errno() noexcept;
53
54 void set_type_id(const char *id);
55 const char *type_id() const;
56
57 virtual const char *what() const noexcept;
58 virtual const char *what_no_backtrace() const noexcept;
59
60 Exception &operator=(const Exception &exc) noexcept;
61
62protected:
63 /** Internal exception message list */
65 {
66 message_list_t *next; /**< pointer to next element, NULL if last element */
67 char * msg; /**< pointer to message, may not be NULL, will be freed
68 * in dtor */
69 };
70
71public:
73 {
74 friend Exception;
75
76 private:
77 iterator(message_list_t *message_list);
78
79 public:
80 iterator(const iterator &i);
81 iterator();
82
83 iterator &operator++(); // prefix
84 iterator operator++(int inc); // postfix
85
86 bool operator==(const iterator &i) const;
87 bool operator!=(const iterator &i) const;
88
89 const char *operator*() const;
90 iterator & operator=(const iterator &i);
91
92 private:
93 message_list_t *mlist;
94 };
95
96 iterator begin() noexcept;
97 iterator end() noexcept;
98
99protected:
100 Exception() noexcept;
101
102 void append_nolock(const char *format, ...) noexcept;
103 void append_nolock_va(const char *format, va_list va) noexcept;
104 void append_nolock_nocopy(char *msg) noexcept;
105 void prepend_nolock_va(const char *format, va_list va) noexcept;
106 void copy_messages(const Exception &exc) noexcept;
107
112
114
115private:
116 const char *type_id_;
117};
118
119} // end namespace fawkes
120
121#endif
Message iterator for exceptions.
Definition: exception.h:73
iterator()
Plain constructor.
Definition: exception.cpp:710
bool operator!=(const iterator &i) const
Check inequality.
Definition: exception.cpp:764
const char * operator*() const
Get current message.
Definition: exception.cpp:774
iterator & operator++()
Prefix ++ operator.
Definition: exception.cpp:727
bool operator==(const iterator &i) const
Check equality.
Definition: exception.cpp:754
iterator & operator=(const iterator &i)
Assignment operator.
Definition: exception.cpp:788
Base class for exceptions in Fawkes.
Definition: exception.h:36
void print_trace() noexcept
Prints trace to stderr.
Definition: exception.cpp:601
virtual const char * what() const noexcept
Get primary string.
Definition: exception.cpp:639
Mutex * messages_mutex
Mutex to protect operations on messages list.
Definition: exception.h:111
iterator end() noexcept
Get end iterator for messages.
Definition: exception.cpp:692
message_list_t * messages_end
Pointer that points to the very last message.
Definition: exception.h:110
message_list_t * messages
List of messages.
Definition: exception.h:108
virtual const char * what_no_backtrace() const noexcept
Get primary string (does not implicitly print the back trace).
Definition: exception.cpp:663
void prepend_nolock_va(const char *format, va_list va) noexcept
Prepend messages without lock by formatted string.
Definition: exception.cpp:419
void copy_messages(const Exception &exc) noexcept
Copy messages from given exception.
Definition: exception.cpp:519
virtual void raise()
This can be used to throw this exception.
Definition: exception.cpp:540
void prepend(const char *format,...) noexcept
Prepend messages to the message list.
Definition: exception.cpp:314
void set_type_id(const char *id)
Set exception type ID.
Definition: exception.cpp:286
void print_backtrace() const noexcept
Prints a backtrace.
Definition: exception.cpp:547
void append_va(const char *format, va_list va) noexcept
Append messages to the message list.
Definition: exception.cpp:353
void append(const char *format,...) noexcept
Append messages to the message list.
Definition: exception.cpp:333
int get_errno() noexcept
Get errno.
Definition: exception.cpp:622
void append_nolock(const char *format,...) noexcept
Append messages without lock.
Definition: exception.cpp:383
void append_nolock_va(const char *format, va_list va) noexcept
Append messages without lock by formatted string.
Definition: exception.cpp:449
Exception() noexcept
Constructor for subclasses.
Definition: exception.cpp:253
void append_nolock_nocopy(char *msg) noexcept
Append message without copying.
Definition: exception.cpp:479
message_list_t * messages_iterator
Iterator to iterate over messages.
Definition: exception.h:109
int _errno
Error number, should be used if the error was caused by a method that supplies errno.
Definition: exception.h:113
const char * type_id() const
Get type ID.
Definition: exception.cpp:304
Exception & operator=(const Exception &exc) noexcept
Assign an Exception.
Definition: exception.cpp:506
iterator begin() noexcept
Get iterator for messages.
Definition: exception.cpp:676
virtual ~Exception() noexcept
Destructor.
Definition: exception.cpp:264
char * generate_backtrace() const noexcept
Generate backtrace string.
Definition: exception.cpp:569
Mutex mutual exclusion lock.
Definition: mutex.h:33
Fawkes library namespace.
Internal exception message list.
Definition: exception.h:65
message_list_t * next
pointer to next element, NULL if last element
Definition: exception.h:66
char * msg
pointer to message, may not be NULL, will be freed in dtor
Definition: exception.h:67