World Builder  1.1.0-pre
A geodynamic initial conditions generator
assert.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2018-2024 by the authors of the World Builder code.
3 
4  This file is part of the World Builder.
5 
6  This program is free software: you can redistribute it and/or modify
7  it under the terms of the GNU Lesser General Public License as published
8  by the Free Software Foundation, either version 2 of the License, or
9  (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU Lesser General Public License for more details.
15 
16  You should have received a copy of the GNU Lesser General Public License
17  along with this program. If not, see <https://www.gnu.org/licenses/>.
18 */
19 #ifndef WORLD_BUILDER_ASSERT_H_
20 #define WORLD_BUILDER_ASSERT_H_
21 
22 #include <sstream>
23 
24 namespace WorldBuilder
25 {
26 #ifndef NDEBUG
27 # define WBAssert(condition, message) \
28  do { \
29  if (! (condition)) { \
30  std::stringstream smessage; \
31  smessage << "Assert `" #condition "` failed in " << __FILE__ \
32  << " at line " << __LINE__ << ": " << message << std::endl << std::endl << "Error not recoverable, aborting program."; \
33  throw std::runtime_error(smessage.str()); \
34  } \
35  } while (false)
36 #else
37 # define WBAssert(condition, message) do { } while (false)
38 #endif
39 
40 # define WBAssertThrow(condition, message) \
41  do { \
42  if (! (condition)) { \
43  std::stringstream smessage; \
44  smessage << "AssertThrow `" #condition "` failed in " << __FILE__ \
45  << " at line " << __LINE__ << ": " << message << std::endl << std::endl << "Error not recoverable, aborting program."; \
46  throw std::runtime_error(smessage.str()); \
47  } \
48  } while (false)
49 
50 
51 # define WBAssertThrowExc(condition, exc, message) \
52  do { \
53  if (! (condition)) { \
54  exc \
55  std::stringstream smessage; \
56  smessage << "AssertThrow `" #condition "` failed in " << __FILE__ \
57  << " at line " << __LINE__ << ": " << message << std::endl; \
58  throw std::runtime_error(smessage.str()); \
59  } \
60  } while (false)
61 } // namespace WorldBuilder
62 
63 #endif