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
00060 #ifndef NDEBUG
00061
00062 namespace claw
00063 {
00064
00073 inline void debug_assert( const char* file, const char* func,
00074 unsigned int line, bool b, const std::string& s )
00075 {
00076 if ( !(b) )
00077 {
00078 std::cerr << file << ":" << line << "\n\t"
00079 << func << " : \n" << s << std::endl;
00080 abort();
00081 }
00082 }
00083
00084 }
00085
00086
00087 #define CLAW_ASSERT( b, s ) \
00088 claw::debug_assert( __FILE__, __FUNCTION__, __LINE__, (b), (s) )
00089
00090
00091 #define CLAW_FAIL( s ) \
00092 claw::debug_assert( __FILE__, __FUNCTION__, __LINE__, false, (s) )
00093
00094
00095 #define CLAW_PRECOND( b ) CLAW_ASSERT( b, "precondition failed: " #b )
00096
00097
00098 #define CLAW_POSTCOND( b ) CLAW_ASSERT( b, "postcondition failed: " #b )
00099
00100 #else // def NDEBUG
00101
00102 #define CLAW_ASSERT( b, s )
00103 #define CLAW_FAIL( s )
00104 #define CLAW_PRECOND( b )
00105 #define CLAW_POSTCOND( b )
00106
00107 #endif // NDEBUG
00108
00109 #endif // __CLAW_ASSERT_HPP__