|
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ |
|
2 /* |
|
3 * Copyright (c) 2006 INRIA, 2010 NICTA |
|
4 * |
|
5 * This program is free software; you can redistribute it and/or modify |
|
6 * it under the terms of the GNU General Public License version 2 as |
|
7 * published by the Free Software Foundation; |
|
8 * |
|
9 * This program is distributed in the hope that it will be useful, |
|
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
12 * GNU General Public License for more details. |
|
13 * |
|
14 * You should have received a copy of the GNU General Public License |
|
15 * along with this program; if not, write to the Free Software |
|
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
17 * |
|
18 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr> |
|
19 * Quincy Tse <quincy.tse@nicta.com.au> |
|
20 */ |
|
21 #ifndef NS_ASSERT_H |
|
22 #define NS_ASSERT_H |
|
23 |
|
24 #ifdef NS3_ASSERT_ENABLE |
|
25 |
|
26 #include <iostream> |
|
27 |
|
28 #include "fatal-error.h" |
|
29 |
|
30 /** |
|
31 * \ingroup core |
|
32 * \defgroup debugging Debugging |
|
33 */ |
|
34 /** |
|
35 * \ingroup debugging |
|
36 * \defgroup assert Assert |
|
37 * |
|
38 * \brief assert functions and macros |
|
39 * |
|
40 * The assert macros are used to verify |
|
41 * at runtime that a certain condition is true. If it is |
|
42 * not true, the program halts. These checks are built |
|
43 * into the program only in debugging builds. They are |
|
44 * removed in optimized builds. |
|
45 * |
|
46 * These macro are intended to check certain conditions |
|
47 * to be true. Do not put code that also have side effects |
|
48 * that your program relies on (eg. code that advances |
|
49 * an iterator and return false at end of file) because |
|
50 * the code will not be executed on release builds!! |
|
51 * |
|
52 * If assertion-style checks are required for release |
|
53 * builds, use NS_ABORT_UNLESS and NS_ABORT_MSG_UNLESS. |
|
54 */ |
|
55 |
|
56 /** |
|
57 * \ingroup assert |
|
58 * \param condition condition to verify. |
|
59 * |
|
60 * At runtime, in debugging builds, if this condition is not |
|
61 * true, the program prints the source file, line number and |
|
62 * unverified condition and halts by calling std::terminate |
|
63 */ |
|
64 #define NS_ASSERT(condition) \ |
|
65 do \ |
|
66 { \ |
|
67 if (!(condition)) \ |
|
68 { \ |
|
69 std::cerr << "assert failed. cond=\"" << \ |
|
70 #condition << "\", "; \ |
|
71 NS_FATAL_ERROR_NO_MSG(); \ |
|
72 } \ |
|
73 } \ |
|
74 while (false) |
|
75 |
|
76 |
|
77 /** |
|
78 * \ingroup assert |
|
79 * \param condition condition to verify. |
|
80 * \param message message to output |
|
81 * |
|
82 * At runtime, in debugging builds, if this condition is not |
|
83 * true, the program prints the message to output and |
|
84 * halts by calling std::terminate. |
|
85 */ |
|
86 #define NS_ASSERT_MSG(condition, message) \ |
|
87 do \ |
|
88 { \ |
|
89 if (!(condition)) \ |
|
90 { \ |
|
91 std::cerr << "assert failed. cond=\"" << \ |
|
92 #condition << "\", "; \ |
|
93 NS_FATAL_ERROR (message); \ |
|
94 } \ |
|
95 } \ |
|
96 while (false) |
|
97 |
|
98 #else /* NS3_ASSERT_ENABLE */ |
|
99 |
|
100 #define NS_ASSERT(cond) |
|
101 #define NS_ASSERT_MSG(cond,msg) |
|
102 |
|
103 #endif /* NS3_ASSERT_ENABLE */ |
|
104 |
|
105 #endif /* ASSERT_H */ |