Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00030 #ifndef __CLAW_ASSERT_HPP__
00031 #define __CLAW_ASSERT_HPP__
00032
00033 #include <iostream>
00034 #include <sstream>
00035 #include <cstdlib>
00036
00055 #ifndef NDEBUG
00056
00057 namespace claw
00058 {
00059
00068 inline void debug_assert( const char* file, const char* func,
00069 unsigned int line, bool b, const std::string& s )
00070 {
00071 if ( !(b) )
00072 {
00073 std::cerr << file << ":" << line << "\n\t"
00074 << func << " : \n" << s << std::endl;
00075 abort();
00076 }
00077 }
00078
00079 }
00080
00081
00082 #define CLAW_ASSERT( b, s ) \
00083 claw::debug_assert( __FILE__, __FUNCTION__, __LINE__, (b), (s) )
00084
00085
00086 #define CLAW_FAIL( s ) \
00087 claw::debug_assert( __FILE__, __FUNCTION__, __LINE__, false, (s) )
00088
00089
00090 #define CLAW_PRECOND( b ) CLAW_ASSERT( b, "precondition failed : " #b )
00091
00092
00093 #define CLAW_POSTCOND( b ) CLAW_ASSERT( b, "postcondition failed : " #b )
00094
00095 #else // def NDEBUG
00096
00097 #define CLAW_ASSERT( b, s )
00098 #define CLAW_FAIL( s )
00099 #define CLAW_PRECOND( b )
00100 #define CLAW_POSTCOND( b )
00101
00102 #endif // NDEBUG
00103
00104 #endif // __CLAW_ASSERT_HPP__