Exception.cci
Go to the documentation of this file.
1 //
2 // Copyright (c) 2020 Fraunhofer Institute for Applied Information Technology (FIT)
3 // Network Research Group (NET)
4 // Schloss Birlinghoven, 53754 Sankt Augustin, GERMANY
5 // Contact: support@wiback.org
6 //
7 // This file is part of the SENF code tree.
8 // It is licensed under the 3-clause BSD License (aka New BSD License).
9 // See LICENSE.txt in the top level directory for details or visit
10 // https://opensource.org/licenses/BSD-3-Clause
11 //
12 
13 
14 /** \file
15  \brief Exception inline non-template implementation */
16 
17 // Custom includes
18 #include <errno.h>
19 #include <cstring>
20 
21 #define prefix_ inline
22 //-/////////////////////////////////////////////////////////////////////////////////////////////////
23 
24 //-/////////////////////////////////////////////////////////////////////////////////////////////////
25 // senf::ExceptionMixin
26 
27 prefix_ senf::ExceptionMixin::ExceptionMixin(std::string const & description)
28  : what_(description)
29 {
30 #ifdef SENF_BACKTRACE
31  addBacktrace();
32 #endif
33 }
34 
35 prefix_ std::string senf::ExceptionMixin::message()
36  const
37 {
38 #ifdef SENF_BACKTRACE
39  return what_.substr(excLen_);
40 #else
41  return what_;
42 #endif
43 }
44 
45 prefix_ std::string senf::ExceptionMixin::backtrace()
46  const
47 {
48 #ifdef SENF_BACKTRACE
49  return what_.substr(0,excLen_-4);
50 #else
51  return "";
52 #endif
53 }
54 
55 prefix_ void senf::ExceptionMixin::append(std::string text)
56 {
57  what_ += text;
58 }
59 
60 //-/////////////////////////////////////////////////////////////////////////////////////////////////
61 // senf::Exception
62 
63 prefix_ senf::Exception::Exception(std::string const & description)
64  : ExceptionMixin(description)
65 {}
66 
67 //-/////////////////////////////////////////////////////////////////////////////////////////////////
68 // senf::SystemException
69 
70 prefix_ senf::SystemException::SystemException(std::string const & descr _SENF_EXC_DEBUG_ARGS_ND)
71 {
72  init(descr, errno _SENF_EXC_DEBUG_ARGS_P);
73 }
74 
75 prefix_ senf::SystemException::SystemException(int code _SENF_EXC_DEBUG_ARGS_ND)
76 {
77  init("", code _SENF_EXC_DEBUG_ARGS_P);
78 }
79 
80 prefix_ senf::SystemException::SystemException(std::string const & descr, int code
81  _SENF_EXC_DEBUG_ARGS_ND)
82 {
83  init(descr, code _SENF_EXC_DEBUG_ARGS_P);
84 }
85 
86 prefix_ int senf::SystemException::errorNumber()
87  const
88 {
89  return code_;
90 }
91 
92 prefix_ char const * senf::SystemException::errorString()
93  const
94 {
95  return std::strerror(code_);
96 }
97 
98 prefix_ bool senf::SystemException::anyOf(int c0, int c1, int c2, int c3, int c4, int c5,
99  int c6, int c7, int c8, int c9)
100  const
101 {
102  return
103  (c0 && code_ == c0) ||
104  (c1 && code_ == c1) ||
105  (c2 && code_ == c2) ||
106  (c3 && code_ == c3) ||
107  (c4 && code_ == c4) ||
108  (c5 && code_ == c5) ||
109  (c6 && code_ == c6) ||
110  (c7 && code_ == c7) ||
111  (c8 && code_ == c8) ||
112  (c9 && code_ == c9);
113 }
114 
115 prefix_ senf::SystemException::~SystemException()
116  throw()
117 {}
118 
119 //-/////////////////////////////////////////////////////////////////////////////////////////////////
120 // senf::InvalidArgumentException
121 
122 prefix_ senf::InvalidArgumentException::InvalidArgumentException(std::string const & what_arg)
123  : WrapException<std::invalid_argument>(std::invalid_argument(what_arg))
124 {}
125 
126 //-/////////////////////////////////////////////////////////////////////////////////////////////////
127 #undef prefix_
128 
129 
130 // Local Variables:
131 // mode: c++
132 // fill-column: 100
133 // c-file-style: "senf"
134 // indent-tabs-mode: nil
135 // ispell-local-dictionary: "american"
136 // compile-command: "scons -u test"
137 // comment-column: 40
138 // End: