tlx
core.cpp
Go to the documentation of this file.
1
/*******************************************************************************
2
* tlx/die/core.cpp
3
*
4
* Part of tlx - http://panthema.net/tlx
5
*
6
* Copyright (C) 2016-2018 Timo Bingmann <tb@panthema.net>
7
*
8
* All rights reserved. Published under the Boost Software License, Version 1.0
9
******************************************************************************/
10
11
#include <
tlx/die/core.hpp
>
12
13
#include <atomic>
14
#include <iostream>
15
#include <sstream>
16
17
namespace
tlx
{
18
19
/******************************************************************************/
20
21
static
std::atomic<bool>
s_die_with_exception
{
22
#if TLX_DIE_WITH_EXCEPTION
23
true
24
#else
25
false
26
#endif
27
};
28
29
void
die_with_message
(
const
std::string& msg) {
30
if
(
s_die_with_exception
) {
31
throw
DieException
(msg);
32
}
33
else
{
34
std::cerr << msg << std::endl;
35
std::terminate();
36
}
37
}
38
39
void
die_with_message
(
const
char
* msg,
const
char
* file,
size_t
line) {
40
std::ostringstream oss;
41
oss << msg <<
" @ "
<< file <<
':'
<< line;
42
die_with_message
(oss.str());
43
}
44
45
void
die_with_message
(
const
std::string& msg,
const
char
* file,
size_t
line) {
46
return
die_with_message
(msg.c_str(), file, line);
47
}
48
49
DieException::DieException
(
const
std::string& message)
50
: std::runtime_error(message) { }
51
52
bool
set_die_with_exception
(
bool
b) {
53
return
s_die_with_exception
.exchange(b);
54
}
55
56
/******************************************************************************/
57
/** \page tlx_die die() - Simple Invariant Testing
58
59
tlx contains a set of macros called `die_...` for simple invariant testing. They
60
test some condition and fail with nice output containing both the condition, and
61
file/line information where it occurred.
62
63
- `die(message)` - always terminates with given message.
64
- `die_unless(condition)` - terminates if condition is false
65
- `die_if(condition)` - terminates if condition is true
66
- `die_verbose_unless(condition,message)` - terminates if condition is false
67
- `die_verbose_if(condition,message)` - terminates if condition is true
68
69
- `die_unequal(a,b)` - terminates unless a == b.
70
- `die_unequal_eps6(a,b)` - terminates unless abs(a - b) < 1e-6 for approximate equality.
71
- `die_equal(a,b)` - terminates if a == b.
72
- `die_unless_throws(code,exception)` - terminate if code does not throw the exception
73
74
Furthermore, some additional assert macros are also available. These are only
75
active in Debug mode, if NDEBUG is defined they are compiled out.
76
77
- `assert_equal(a,b)` - checks if a == b.
78
- `assert_unequal(a,b)` - checks if a != b.
79
80
tlx die macros can also be modified to throw a DieException instead of calling
81
std::terminate. Either call `set_die_with_exception(true)` to define
82
TLX_DIE_WITH_EXCEPTION=1 using the preprocessor.
83
84
*/
85
86
}
// namespace tlx
87
88
/******************************************************************************/
tlx::set_die_with_exception
bool set_die_with_exception(bool b)
Switch between dying via std::terminate() and throwing an exception.
Definition:
core.cpp:60
tlx
Definition:
exclusive_scan.hpp:17
tlx::s_die_with_exception
static std::atomic< bool > s_die_with_exception
Definition:
core.cpp:29
tlx::DieException::DieException
DieException(const std::string &message)
Definition:
core.cpp:57
core.hpp
tlx::die_with_message
void die_with_message(const std::string &msg)
die with message - either throw an exception or die via std::terminate()
Definition:
core.cpp:37
tlx::DieException
Exception thrown by die_with_message() if.
Definition:
core.hpp:58
tlx
die
core.cpp
Generated on Fri Jan 31 2020 00:00:00 for tlx by
1.8.17