Changes in lemon/assert.h [218:0d6511647639:290:f6899946c1ac] in lemon
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
lemon/assert.h
r218 r290 28 28 namespace lemon { 29 29 30 inline void assert_fail_log(const char *file, int line, const char *function, 31 const char *message, const char *assertion) 30 inline void assert_fail_abort(const char *file, int line, 31 const char *function, const char* message, 32 const char *assertion) 32 33 { 33 34 std::cerr << file << ":" << line << ": "; … … 38 39 std::cerr << " (assertion '" << assertion << "' failed)"; 39 40 std::cerr << std::endl; 40 }41 42 inline void assert_fail_abort(const char *file, int line,43 const char *function, const char* message,44 const char *assertion)45 {46 assert_fail_log(file, line, function, message, assertion);47 41 std::abort(); 48 42 } … … 64 58 65 59 #undef LEMON_ASSERT 66 #undef LEMON_FIXME67 60 #undef LEMON_DEBUG 68 61 69 #if (defined(LEMON_ASSERT_LOG) ? 1 : 0) + \ 70 (defined(LEMON_ASSERT_ABORT) ? 1 : 0) + \ 62 #if (defined(LEMON_ASSERT_ABORT) ? 1 : 0) + \ 71 63 (defined(LEMON_ASSERT_CUSTOM) ? 1 : 0) > 1 72 64 #error "LEMON assertion system is not set properly" 73 65 #endif 74 66 75 #if ((defined(LEMON_ASSERT_LOG) ? 1 : 0) + \ 76 (defined(LEMON_ASSERT_ABORT) ? 1 : 0) + \ 67 #if ((defined(LEMON_ASSERT_ABORT) ? 1 : 0) + \ 77 68 (defined(LEMON_ASSERT_CUSTOM) ? 1 : 0) == 1 || \ 78 69 defined(LEMON_ENABLE_ASSERTS)) && \ … … 83 74 84 75 85 #if defined LEMON_ASSERT_LOG 86 # undef LEMON_ASSERT_HANDLER 87 # define LEMON_ASSERT_HANDLER ::lemon::assert_fail_log 88 #elif defined LEMON_ASSERT_ABORT 76 #if defined LEMON_ASSERT_ABORT 89 77 # undef LEMON_ASSERT_HANDLER 90 78 # define LEMON_ASSERT_HANDLER ::lemon::assert_fail_abort … … 108 96 # elif defined _MSC_VER 109 97 # define LEMON_FUNCTION_NAME (__FUNCSIG__) 98 # elif __STDC_VERSION__ >= 199901L 99 # define LEMON_FUNCTION_NAME (__func__) 110 100 # else 111 # define LEMON_FUNCTION_NAME ( __func__)101 # define LEMON_FUNCTION_NAME ("<unknown>") 112 102 # endif 113 103 #endif … … 119 109 /// \brief Macro for assertion with customizable message 120 110 /// 121 /// Macro for assertion with customizable message. \param exp An122 /// expression that must be convertible to \c bool. If it is \c123 /// false, then an assertion is raised. The concrete behaviour depends 124 /// on the settings of the assertion system. \param msg A <tt>const125 /// char*</tt> parameter, which can be used to provide information126 /// about the circumstances of the failed assertion.111 /// Macro for assertion with customizable message. 112 /// \param exp An expression that must be convertible to \c bool. If it is \c 113 /// false, then an assertion is raised. The concrete behaviour depends on the 114 /// settings of the assertion system. 115 /// \param msg A <tt>const char*</tt> parameter, which can be used to provide 116 /// information about the circumstances of the failed assertion. 127 117 /// 128 118 /// The assertions are enabled in the default behaviour. … … 138 128 /// The checking is also disabled when the standard macro \c NDEBUG is defined. 139 129 /// 140 /// The LEMON assertion system has a wide range of customization 141 /// properties. As a default behaviour the failed assertion prints a 142 /// short log message to the standard error and aborts the execution. 143 /// 144 /// The following modes can be used in the assertion system: 145 /// 146 /// - \c LEMON_ASSERT_LOG The failed assertion prints a short log 147 /// message to the standard error and continues the execution. 148 /// - \c LEMON_ASSERT_ABORT This mode is similar to the \c 149 /// LEMON_ASSERT_LOG, but it aborts the program. It is the default 150 /// behaviour. 130 /// As a default behaviour the failed assertion prints a short log message to 131 /// the standard error and aborts the execution. 132 /// 133 /// However, the following modes can be used in the assertion system: 134 /// - \c LEMON_ASSERT_ABORT The failed assertion prints a short log message to 135 /// the standard error and aborts the program. It is the default behaviour. 151 136 /// - \c LEMON_ASSERT_CUSTOM The user can define own assertion handler 152 137 /// function. … … 176 161 /// \ingroup exceptions 177 162 /// 178 /// \brief Macro for mark not yet implemented features.179 ///180 /// Macro for mark not yet implemented features and outstanding bugs.181 /// It is close to be the shortcut of the following code:182 /// \code183 /// LEMON_ASSERT(false, msg);184 /// \endcode185 ///186 /// \see LEMON_ASSERT187 # define LEMON_FIXME(msg) \188 (LEMON_ASSERT_HANDLER(__FILE__, __LINE__, LEMON_FUNCTION_NAME, \189 ::lemon::_assert_bits::cstringify(msg), \190 static_cast<const char*>(0)))191 192 /// \ingroup exceptions193 ///194 163 /// \brief Macro for internal assertions 195 164 /// … … 223 192 # ifndef LEMON_ASSERT_HANDLER 224 193 # define LEMON_ASSERT(exp, msg) (static_cast<void>(0)) 225 # define LEMON_FIXME(msg) (static_cast<void>(0))226 194 # define LEMON_DEBUG(exp, msg) (static_cast<void>(0)) 227 195 # else … … 232 200 ::lemon::_assert_bits::cstringify(msg), \ 233 201 #exp), 0))) 234 # define LEMON_FIXME(msg) \235 (LEMON_ASSERT_HANDLER(__FILE__, __LINE__, LEMON_FUNCTION_NAME, \236 ::lemon::_assert_bits::cstringify(msg), \237 static_cast<const char*>(0)))238 239 202 # if LEMON_ENABLE_DEBUG 240 203 # define LEMON_DEBUG(exp, msg) \
Note: See TracChangeset
for help on using the changeset viewer.