lsst.pex.exceptions
21.0.0-2-gde069b7+44dbdb3492
include
lsst
pex
exceptions
Exception.h
Go to the documentation of this file.
1
/*
2
* This file is part of pex_exceptions.
3
*
4
* Developed for the LSST Data Management System.
5
* This product includes software developed by the LSST Project
6
* (https://www.lsst.org).
7
* See the COPYRIGHT file at the top-level directory of this distribution
8
* for details of code ownership.
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 3 of the License, or
13
* (at your option) any later version.
14
*
15
* This program is distributed in the hope that it will be useful,
16
* but WITHOUT ANY WARRANTY; without even the implied warranty of
17
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
* GNU General Public License for more details.
19
*
20
* You should have received a copy of the GNU General Public License
21
* along with this program. If not, see <https://www.gnu.org/licenses/>.
22
*/
23
24
#ifndef LSST_PEX_EXCEPTIONS_EXCEPTION_H
25
#define LSST_PEX_EXCEPTIONS_EXCEPTION_H
26
27
#include <exception>
28
#include <ostream>
29
#include <string>
30
#include <vector>
31
32
#include "
lsst/base.h
"
33
#include "boost/current_function.hpp"
34
35
namespace
lsst
{
36
namespace
pex {
37
namespace
exceptions {
38
40
#define LSST_EXCEPT_HERE __FILE__, __LINE__, BOOST_CURRENT_FUNCTION
41
48
#define LSST_EXCEPT(type, ...) type(LSST_EXCEPT_HERE, __VA_ARGS__)
49
54
#define LSST_EXCEPT_ADD(e, m) e.addMessage(LSST_EXCEPT_HERE, m)
55
57
#define LSST_EARGS_TYPED char const *ex_file, int ex_line, char const *ex_func, std::string const &ex_message
58
60
#define LSST_EARGS_UNTYPED ex_file, ex_line, ex_func, ex_message
61
69
#define LSST_EXCEPTION_TYPE(t, b, c) \
70
class LSST_EXPORT t : public b { \
71
public: \
72
t(LSST_EARGS_TYPED) : b(LSST_EARGS_UNTYPED){}; \
73
t(std::string const& message) : b(message){}; \
74
virtual char const* getType(void) const noexcept { return #c " *"; }; \
75
virtual lsst::pex::exceptions::Exception* clone(void) const { return new t(*this); }; \
76
};
77
79
struct
Tracepoint
{
88
Tracepoint
(
char
const
* file,
int
line,
char
const
* func,
std::string
const
& message);
89
90
char
const
*
_file
;
// Compiled strings only; does not need deletion
91
int
_line
;
92
char
const
*
_func
;
// Compiled strings only; does not need deletion
93
std::string
_message
;
94
};
95
typedef
std::vector<Tracepoint>
Traceback
;
96
107
class
LSST_EXPORT
Exception
:
public
std::exception
{
108
public
:
117
Exception
(
char
const
* file,
int
line,
char
const
* func,
118
std::string
const
& message);
// Should use LSST_EARGS_TYPED, but that confuses doxygen.
119
130
explicit
Exception
(
std::string
const
& message);
131
132
virtual
~
Exception
(
void
) noexcept;
133
142
void
addMessage(
char
const
* file,
int
line,
char
const
* func,
std::string
const
& message);
143
145
Traceback
const
& getTraceback(
void
)
const
noexcept;
146
154
virtual
std::ostream
& addToStream(
std::ostream
& stream)
const
;
155
166
virtual
char
const
* what(
void
)
const
noexcept;
167
175
virtual
char
const
* getType(
void
)
const
noexcept;
176
183
virtual
Exception
* clone(
void
)
const
;
184
185
private
:
186
std::string
_message;
187
Traceback
_traceback;
188
};
189
197
std::ostream
&
operator<<
(
std::ostream
& stream,
Exception
const
& e);
198
}
199
}
// namespace pex
200
}
// namespace lsst
201
202
#endif
lsst::pex::exceptions::Tracepoint::_message
std::string _message
Definition:
Exception.h:93
std::string
STL class.
std::exception
STL class.
LSST_EXPORT
#define LSST_EXPORT
lsst::pex::exceptions::Traceback
std::vector< Tracepoint > Traceback
Definition:
Exception.h:95
std::vector< Tracepoint >
base.h
lsst::pex::exceptions::Tracepoint::_file
char const * _file
Definition:
Exception.h:90
lsst::pex::exceptions::Tracepoint::_line
int _line
Definition:
Exception.h:91
std::ostream
STL class.
lsst::pex::exceptions::Tracepoint::_func
char const * _func
Definition:
Exception.h:92
lsst
lsst::pex::exceptions::operator<<
std::ostream & operator<<(std::ostream &stream, Exception const &e)
Push the text representation of an exception onto a stream.
Definition:
Exception.cc:105
lsst::pex::exceptions::Exception
Provides consistent interface for LSST exceptions.
Definition:
Exception.h:107
lsst::pex::exceptions::Tracepoint
One point in the Traceback vector held by Exception.
Definition:
Exception.h:79
lsst::pex::exceptions::Tracepoint::Tracepoint
Tracepoint(char const *file, int line, char const *func, std::string const &message)
Standard constructor, intended for C++ use.
Definition:
Exception.cc:39
Generated on Wed Dec 9 2020 01:57:53 for lsst.pex.exceptions by
1.8.18