ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
PhysicsAnalysis
D3PDTools
RootCoreUtils
RootCoreUtils
Assert.h
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3
*/
4
6
7
#ifndef ROOT_CORE_UTILS__ASSERT_H
8
#define ROOT_CORE_UTILS__ASSERT_H
9
11
17
23
30
31
38
39
40
41
42
43
namespace
RCU
44
{
45
namespace
Check
46
{
47
enum
Type
48
{
50
assert_soft
,
51
assert_hard
,
52
assert_noimp
,
53
55
require_soft
,
56
require_hard
,
57
require_noimp
,
58
60
provide_soft
,
61
provide_hard
,
62
provide_noimp
,
63
65
invariant
66
};
67
const
int
typeNum
=
invariant
+ 1;
68
extern
const
char
*
const
typeLiteral
[
typeNum
];
69
extern
const
bool
typeAbort
[
typeNum
];
70
71
81
void
fail
(
const
char
*
file
,
unsigned
line,
82
Type
type
,
const
char
*
error
);
83
84
90
typedef
void (*
TestInvariantFunction
) (
const
void
*object);
91
template
<
class
T>
void
92
testInvariantVoid
(
const
void
*
object
)
93
{
94
static_cast<
const
T *
>
(object)->testInvariant ();
95
}
96
97
98
99
struct
TestInvariant
100
{
104
105
TestInvariant
(
TestInvariantFunction
function,
106
const
void
*
object
);
107
~TestInvariant
();
108
109
private
:
110
TestInvariantFunction
m_function
;
111
const
void
*
m_object
;
112
};
113
114
115
118
template
<
class
T>
inline
TestInvariant
invariant_tester
(T *
object
)
119
{
120
return
TestInvariant
(
testInvariantVoid<T>
,
object
);
121
}
122
}
123
}
124
125
126
127
128
132
#define RCU_CHECK(type,condition,message) \
133
(condition) ? (void) 0 : ::RCU::Check::fail (__FILE__, __LINE__, ::RCU::Check::type, message)
134
136
#define RCU_CHECK_JOIN2(a,b) RCU_CHECK_JOIN2_HIDDEN(a,b)
137
#define RCU_CHECK_JOIN2_HIDDEN(a,b) a ## b
138
139
140
141
#define RCU_REQUIRE_SOFT(x) \
142
RCU_CHECK (require_soft, x, #x)
143
#define RCU_REQUIRE2_SOFT(x,y) \
144
RCU_CHECK (require_soft, x, y)
145
#define RCU_REQUIRE0_SOFT(y) \
146
RCU_CHECK (require_soft, 0, y)
147
148
#define RCU_PROVIDE_SOFT(x) \
149
RCU_CHECK (provide_soft, x, #x)
150
#define RCU_PROVIDE2_SOFT(x,y) \
151
RCU_CHECK (provide_soft, x, y)
152
#define RCU_PROVIDE0_SOFT(y) \
153
RCU_CHECK (provide_soft, 0, y)
154
155
#define RCU_ASSERT_SOFT(x) \
156
RCU_CHECK (assert_soft, x, #x)
157
#define RCU_ASSERT2_SOFT(x,y) \
158
RCU_CHECK (assert_soft, x, y)
159
#define RCU_ASSERT0_SOFT(y) \
160
RCU_CHECK (assert_soft, 0, y)
161
162
163
164
#define RCU_REQUIRE_NOIMP(x) \
165
RCU_CHECK (require_noimp, x, #x)
166
#define RCU_REQUIRE2_NOIMP(x,y) \
167
RCU_CHECK (require_noimp, x, y)
168
#define RCU_REQUIRE0_NOIMP(y) \
169
RCU_CHECK (require_noimp, 0, y)
170
171
#define RCU_PROVIDE_NOIMP(x) \
172
RCU_CHECK (provide_noimp, x, #x)
173
#define RCU_PROVIDE2_NOIMP(x,y) \
174
RCU_CHECK (provide_noimp, x, y)
175
#define RCU_PROVIDE0_NOIMP(y) \
176
RCU_CHECK (provide_noimp, 0, y)
177
178
#define RCU_ASSERT_NOIMP(x) \
179
RCU_CHECK (assert_noimp, x, #x)
180
#define RCU_ASSERT2_NOIMP(x,y) \
181
RCU_CHECK (assert_noimp, x, y)
182
#define RCU_ASSERT0_NOIMP(y) \
183
RCU_CHECK (assert_noimp, 0, y)
184
185
186
187
#define RCU_INVARIANT(x) \
188
RCU_CHECK (invariant, x, #x)
189
#define RCU_INVARIANT2(x,y) \
190
RCU_CHECK (invariant, x, y)
191
#define RCU_INVARIANT0(y) \
192
RCU_CHECK (invariant, 0, y)
193
194
#ifndef NDEBUG
195
196
#define RCU_REQUIRE(x) \
197
RCU_CHECK (require_hard, x, #x)
198
#define RCU_REQUIRE2(x,y) \
199
RCU_CHECK (require_hard, x, y)
200
#define RCU_REQUIRE0(y) \
201
RCU_CHECK (require_hard, 0, y)
202
203
#define RCU_PROVIDE(x) \
204
RCU_CHECK (provide_hard, x, #x)
205
#define RCU_PROVIDE2(x,y) \
206
RCU_CHECK (provide_hard, x, y)
207
#define RCU_PROVIDE0(y) \
208
RCU_CHECK (provide_hard, 0, y)
209
210
#define RCU_ASSERT(x) \
211
RCU_CHECK (assert_hard, x, #x)
212
#define RCU_ASSERT2(x,y) \
213
RCU_CHECK (assert_hard, x, y)
214
#define RCU_ASSERT0(y) \
215
RCU_CHECK (assert_hard, 0, y)
216
217
#define RCU_READ_INVARIANT(x) \
218
(x)->testInvariant ()
219
#define RCU_CHANGE_INVARIANT(x) \
220
::RCU::Check::TestInvariant RCU_CHECK_JOIN2 (invariant, __LINE__) = ::RCU::Check::invariant_tester (x);
221
#define RCU_NEW_INVARIANT(x) \
222
(x)->testInvariant ()
223
#define RCU_DESTROY_INVARIANT(x) \
224
(x)->testInvariant ()
225
226
#else
227
228
#define RCU_REQUIRE(x) \
229
(void) 0
230
#define RCU_REQUIRE2(x,y) \
231
(void) 0
232
#define RCU_REQUIRE0(y) \
233
(void) 0
234
#define RCU_PROVIDE(x) \
235
(void) 0
236
#define RCU_PROVIDE2(x,y) \
237
(void) 0
238
#define RCU_PROVIDE0(y) \
239
(void) 0
240
#define RCU_ASSERT(x) \
241
(void) 0
242
#define RCU_ASSERT2(x,y) \
243
(void) 0
244
#define RCU_ASSERT0(y) \
245
(void) 0
246
#define RCU_READ_INVARIANT(x) \
247
(void) 0
248
#define RCU_CHANGE_INVARIANT(x) \
249
(void) 0
250
#define RCU_NEW_INVARIANT(x) \
251
(void) 0
252
#define RCU_DESTROY_INVARIANT(x) \
253
(void) 0
254
255
#endif
256
257
258
259
260
261
#ifdef RCU_DEBUG_SLOW
262
263
#define RCU_REQUIRE_SLOW(x) \
264
RCU_REQUIRE(x)
265
#define RCU_REQUIRE2_SLOW(x,y) \
266
RCU_REQUIRE2(x,y)
267
#define RCU_PROVIDE_SLOW(x) \
268
RCU_PROVIDE(x)
269
#define RCU_PROVIDE2_SLOW(x,y) \
270
RCU_PROVIDE2(x,y)
271
#define RCU_ASSERT_SLOW(x) \
272
RCU_ASSERT(x)
273
#define RCU_ASSERT2_SLOW(x,y) \
274
RCU_ASSERT2(x,y)
275
#define RCU_READ_INVARIANT_SLOW(x) \
276
RCU_READ_INVARIANT (x)
277
#define RCU_CHANGE_INVARIANT_SLOW(x) \
278
RCU_CHANGE_INVARIANT (x)
279
#define RCU_NEW_INVARIANT_SLOW(x) \
280
RCU_NEW_INVARIANT (x)
281
#define RCU_DESTROY_INVARIANT_SLOW(x) \
282
RCU_DESTROY_INVARIANT (x)
283
284
#else
285
286
#define RCU_REQUIRE_SLOW(x) \
287
(void) 0
288
#define RCU_REQUIRE2_SLOW(x,y) \
289
(void) 0
290
#define RCU_PROVIDE_SLOW(x) \
291
(void) 0
292
#define RCU_PROVIDE2_SLOW(x,y) \
293
(void) 0
294
#define RCU_ASSERT_SLOW(x) \
295
(void) 0
296
#define RCU_ASSERT2_SLOW(x,y) \
297
(void) 0
298
#define RCU_READ_INVARIANT_SLOW(x) \
299
(void) 0
300
#define RCU_CHANGE_INVARIANT_SLOW(x) \
301
(void) 0
302
#define RCU_NEW_INVARIANT_SLOW(x) \
303
(void) 0
304
#define RCU_DESTROY_INVARIANT_SLOW(x) \
305
(void) 0
306
307
#endif
308
309
310
#endif
RCU::Check
Definition
Assert.cxx:25
RCU::Check::typeAbort
const bool typeAbort[typeNum]
Definition
Assert.cxx:45
RCU::Check::invariant_tester
TestInvariant invariant_tester(T *object)
effects: create the right invariant testing object returns: the tester
Definition
Assert.h:118
RCU::Check::typeNum
const int typeNum
Definition
Assert.h:67
RCU::Check::testInvariantVoid
void testInvariantVoid(const void *object)
Definition
Assert.h:92
RCU::Check::Type
Type
Definition
Assert.h:48
RCU::Check::require_hard
@ require_hard
Definition
Assert.h:56
RCU::Check::provide_noimp
@ provide_noimp
Definition
Assert.h:62
RCU::Check::require_soft
@ require_soft
function parameter requirement
Definition
Assert.h:55
RCU::Check::invariant
@ invariant
invariant violation
Definition
Assert.h:65
RCU::Check::require_noimp
@ require_noimp
Definition
Assert.h:57
RCU::Check::assert_hard
@ assert_hard
Definition
Assert.h:51
RCU::Check::assert_noimp
@ assert_noimp
Definition
Assert.h:52
RCU::Check::assert_soft
@ assert_soft
regular old style assertion
Definition
Assert.h:50
RCU::Check::provide_soft
@ provide_soft
function postcondition
Definition
Assert.h:60
RCU::Check::provide_hard
@ provide_hard
Definition
Assert.h:61
RCU::Check::TestInvariantFunction
void(* TestInvariantFunction)(const void *object)
effects: apply the test invariant method on an object guarantee: no-fail availability: experts only r...
Definition
Assert.h:90
RCU::Check::typeLiteral
const char *const typeLiteral[typeNum]
Definition
Assert.cxx:26
RCU::Check::fail
void fail(const char *file, unsigned line, Type type, const char *error)
effects: report the error and abort either by exception or assert like guarantee: all-fail failures: ...
Definition
Assert.cxx:64
RCU
This module defines a variety of assert style macros.
Definition
Assert.cxx:23
error
Definition
IImpactPoint3dEstimator.h:72
type
RCU::Check::TestInvariant
Definition
Assert.h:100
RCU::Check::TestInvariant::~TestInvariant
~TestInvariant()
Definition
Assert.cxx:98
RCU::Check::TestInvariant::m_object
const void * m_object
Definition
Assert.h:111
RCU::Check::TestInvariant::m_function
TestInvariantFunction m_function
Definition
Assert.h:110
RCU::Check::TestInvariant::TestInvariant
TestInvariant(TestInvariantFunction function, const void *object)
availability: experts only description: this class will perform an invariant test as the object goes ...
Definition
Assert.cxx:88
file
TFile * file
Definition
tile_monitor.h:29
Generated on
for ATLAS Offline Software by
1.17.0