-rw-r--r-- | include/konforka/exception.h | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/include/konforka/exception.h b/include/konforka/exception.h index 5e0bf96..dbfe27c 100644 --- a/include/konforka/exception.h +++ b/include/konforka/exception.h | |||
@@ -1,76 +1,107 @@ | |||
1 | #ifndef __KONFORKA_EXCEPTION_H | 1 | #ifndef __KONFORKA_EXCEPTION_H |
2 | #define __KONFORKA_EXCEPTION_H | 2 | #define __KONFORKA_EXCEPTION_H |
3 | 3 | ||
4 | #include <exception> | 4 | #include <exception> |
5 | #include <string> | 5 | #include <string> |
6 | #include <list> | 6 | #include <list> |
7 | 7 | ||
8 | /** | 8 | /** |
9 | * @file | 9 | * @file |
10 | * @brief exception-related stuff. | 10 | * @brief exception-related stuff. |
11 | * | 11 | * |
12 | * Basic exception-related declarations and definitions. | 12 | * Basic exception-related declarations and definitions. |
13 | */ | 13 | */ |
14 | 14 | ||
15 | /** | 15 | /** |
16 | * @def CODEPOINT | 16 | * @def CODEPOINT |
17 | * the convenience definition of the parameters passed to the | 17 | * the convenience definition of the parameters passed to the |
18 | * konforka::code_point constructor. | 18 | * konforka::code_point constructor. |
19 | */ | 19 | */ |
20 | #defineCODEPOINT __FILE__,__PRETTY_FUNCTION__,__LINE__ | 20 | #defineCODEPOINT __FILE__,__PRETTY_FUNCTION__,__LINE__ |
21 | /** | 21 | /** |
22 | * @def NOCODEPOINT | 22 | * @def NOCODEPOINT |
23 | * the convenience definition for the codepoint denoting no particular point in | 23 | * the convenience definition for the codepoint denoting no particular point in |
24 | * code. | 24 | * code. |
25 | */ | 25 | */ |
26 | #define NOCODEPOINT "no information" | 26 | #define NOCODEPOINT "no information" |
27 | 27 | ||
28 | /** | 28 | /** |
29 | * @def KONFORKA_RETHROW | ||
30 | * the convenience definition for seeing the exception and rethrowing it further. | ||
31 | */ | ||
32 | #define KONFORKA_RETHROW catch(konforka::exception& e) { e.see(CODEPOINT); throw; } | ||
33 | |||
34 | /** | ||
35 | * @def KONFORKA_E_ARGS | ||
36 | * the convenience definition for naming codepoint parameters | ||
37 | */ | ||
38 | #define KONFORKA_E_PARS const string& fi,const string& fu,int l,const string& w | ||
39 | |||
40 | /** | ||
41 | * @def KONFORKA_E_CONS | ||
42 | * the convenience definition for passing parameters to constructor | ||
43 | */ | ||
44 | #define KONFORKA_E_CONS fi,fu,l,w | ||
45 | |||
46 | /** | ||
47 | * @def KONFORKA_E_SUBCLASS | ||
48 | * the convenience definition for subclassing konforka exceptions | ||
49 | * @param base base class | ||
50 | * @param derived derived class | ||
51 | */ | ||
52 | #define KONFORKA_E_SUBCLASS(derived,base) \ | ||
53 | class derived : public base { \ | ||
54 | public: \ | ||
55 | explicit derived(KONFORKA_E_PARS) \ | ||
56 | : base(KONFORKA_E_CONS) { } \ | ||
57 | } | ||
58 | |||
59 | /** | ||
29 | * @brief The main konforka namespace. | 60 | * @brief The main konforka namespace. |
30 | */ | 61 | */ |
31 | namespace konforka { | 62 | namespace konforka { |
32 | using std::string; | 63 | using std::string; |
33 | using std::list; | 64 | using std::list; |
34 | 65 | ||
35 | /** | 66 | /** |
36 | * @brief Pinpoint the code context. | 67 | * @brief Pinpoint the code context. |
37 | * | 68 | * |
38 | * Class, holding the point in code, for instance, where the exception | 69 | * Class, holding the point in code, for instance, where the exception |
39 | * occured. | 70 | * occured. |
40 | */ | 71 | */ |
41 | class code_point { | 72 | class code_point { |
42 | public: | 73 | public: |
43 | /** | 74 | /** |
44 | * The string describing the point in code. | 75 | * The string describing the point in code. |
45 | */ | 76 | */ |
46 | string where; | 77 | string where; |
47 | /** | 78 | /** |
48 | * The file (as provided by __FILE__) if available. | 79 | * The file (as provided by __FILE__) if available. |
49 | */ | 80 | */ |
50 | string file; | 81 | string file; |
51 | /** | 82 | /** |
52 | * The function name (as provided by __PRETTY_FUNCTION__) if | 83 | * The function name (as provided by __PRETTY_FUNCTION__) if |
53 | * available. | 84 | * available. |
54 | */ | 85 | */ |
55 | string function; | 86 | string function; |
56 | /** | 87 | /** |
57 | * The line number (as provided by __LINE__) if available. | 88 | * The line number (as provided by __LINE__) if available. |
58 | */ | 89 | */ |
59 | int line; | 90 | int line; |
60 | 91 | ||
61 | /** | 92 | /** |
62 | * Constructs the object, using only textual description of the | 93 | * Constructs the object, using only textual description of the |
63 | * point in code (no file, function, line information). | 94 | * point in code (no file, function, line information). |
64 | * @param w the description of the point in code. | 95 | * @param w the description of the point in code. |
65 | */ | 96 | */ |
66 | code_point(const string& w); | 97 | code_point(const string& w); |
67 | /** | 98 | /** |
68 | * Constructs the object, specifying the exact position in code. | 99 | * Constructs the object, specifying the exact position in code. |
69 | * @param fi source file name. | 100 | * @param fi source file name. |
70 | * @param fu function name. | 101 | * @param fu function name. |
71 | * @param l the line number. | 102 | * @param l the line number. |
72 | */ | 103 | */ |
73 | code_point(const string& fi,const string& fu,int l); | 104 | code_point(const string& fi,const string& fu,int l); |
74 | 105 | ||
75 | /** | 106 | /** |
76 | * Extract the information on the point in code. | 107 | * Extract the information on the point in code. |