include
exotica_core
tools
exception.h
Go to the documentation of this file.
1
//
2
// Copyright (c) 2018, University of Edinburgh
3
// All rights reserved.
4
//
5
// Redistribution and use in source and binary forms, with or without
6
// modification, are permitted provided that the following conditions are met:
7
//
8
// * Redistributions of source code must retain the above copyright notice,
9
// this list of conditions and the following disclaimer.
10
// * Redistributions in binary form must reproduce the above copyright
11
// notice, this list of conditions and the following disclaimer in the
12
// documentation and/or other materials provided with the distribution.
13
// * Neither the name of nor the names of its contributors may be used to
14
// endorse or promote products derived from this software without specific
15
// prior written permission.
16
//
17
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
// POSSIBILITY OF SUCH DAMAGE.
28
//
29
30
#ifndef EXOTICA_CORE_EXCEPTION_H_
31
#define EXOTICA_CORE_EXCEPTION_H_
32
33
#include <exception>
34
#include <sstream>
35
36
#define ThrowPretty(m) \
37
{ \
38
std::stringstream ss; \
39
ss << m; \
40
throw exotica::Exception(ss.str(), __FILE__, __PRETTY_FUNCTION__, __LINE__); \
41
}
42
#define ThrowNamed(m) \
43
{ \
44
std::stringstream ss; \
45
ss << m; \
46
throw exotica::Exception(ss.str(), __FILE__, __PRETTY_FUNCTION__, __LINE__, this->object_name_); \
47
}
48
49
namespace
exotica
50
{
51
class
Exception
:
public
std::exception
52
{
53
public
:
54
enum
ReportingType
55
{
56
Message
= 1,
57
FileName
= 2,
58
FunctionName
= 4,
59
LineNumber
= 8,
60
ObjectName
= 16
61
};
62
63
explicit
Exception
(
const
std::string &msg,
const
char
*file,
const
char
*func,
int
line,
const
std::string &
object
= std::string());
64
virtual
const
char
*
what
() const noexcept;
65
66
std
::
string
msg_
;
67
68
private:
69
static
ReportingType
reporting_
;
70
};
71
72
inline
Exception
::
ReportingType
operator|(
Exception
::
ReportingType
a,
Exception
::
ReportingType
b) noexcept
73
{
74
return
static_cast<
Exception::ReportingType
>
(
static_cast<
int
>
(a) |
static_cast<
int
>
(b));
75
}
76
77
class
SolveException
:
public
Exception
78
{
79
using
Exception::Exception
;
80
};
81
}
// namespace exotica
82
83
#endif // EXOTICA_CORE_EXCEPTION_H_
exotica::Exception
Definition:
exception.h:51
exotica::Exception::what
virtual const char * what() const noexcept
Definition:
exception.cpp:47
exotica::Exception::ReportingType
ReportingType
Definition:
exception.h:54
exotica::Exception::Exception
Exception(const std::string &msg, const char *file, const char *func, int line, const std::string &object=std::string())
Definition:
exception.cpp:36
exotica::Exception::LineNumber
@ LineNumber
Definition:
exception.h:59
exotica::Exception::Message
@ Message
Definition:
exception.h:56
exotica::Exception::reporting_
static ReportingType reporting_
Definition:
exception.h:69
exotica
Definition:
collision_scene.h:46
exotica::SolveException
Definition:
exception.h:77
exotica::Exception::ObjectName
@ ObjectName
Definition:
exception.h:60
exotica::Exception::msg_
std::string msg_
Definition:
exception.h:66
exotica::Exception::FileName
@ FileName
Definition:
exception.h:57
exotica::Exception::FunctionName
@ FunctionName
Definition:
exception.h:58
std
exotica_core
Author(s): Yiming Yang, Michael Camilleri
autogenerated on Fri Aug 2 2024 08:43:02