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
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef CHECK_INCLUDED
00033 #define CHECK_INCLUDED
00034
00035 #include <vlCore/link_config.hpp>
00036
00037
00038 #if defined(VL_PLATFORM_WINDOWS)
00039 #ifndef WIN32_LEAN_AND_MEAN
00040 #define WIN32_LEAN_AND_MEAN 1
00041 #endif
00042 #ifndef NOMINMAX
00043 #define NOMINMAX
00044 #endif
00045 #include <windows.h>
00046 #endif
00047
00048 #if defined(__GNUG__) || defined(__MINGW32__)
00049 #include <cstdio>
00050 #endif
00051
00052 namespace vl
00053 {
00054 VLCORE_EXPORT void log_failed_check(const char*, const char*, int);
00055
00056 VLCORE_EXPORT void abort_vl();
00057
00058
00059 #define VL_COMPILE_TIME_CHECK( expr ) typedef char compile_time_assert[ (expr) ? 1 : -1 ];
00060
00061 #if defined(_DEBUG) || !defined(NDEBUG) || VL_FORCE_CHECKS == 1
00062
00063
00064 #if defined(_MSC_VER)
00065 #define VL_TRAP() { if (IsDebuggerPresent()) { __debugbreak(); } else ::vl::abort_vl(); }
00066
00067 #elif defined(__GNUG__) || defined(__MINGW32__)
00068 #define VL_TRAP() { fflush(stdout); fflush(stderr); asm("int $0x3"); }
00069 #else
00070 #define VL_TRAP() { ::vl::abort_vl(); }
00071 #endif
00072
00073 #define VL_CHECK(expr) { if(!(expr)) { ::vl::log_failed_check(#expr,__FILE__,__LINE__); VL_TRAP() } }
00074 #define VL_WARN(expr) { if(!(expr)) { ::vl::log_failed_check(#expr,__FILE__,__LINE__); } }
00075
00076
00077
00078 #else
00079 #define VL_WARN(expr) {}
00080 #define VL_CHECK(expr) {}
00081 #define VL_TRAP() {}
00082
00083
00084
00085 #endif
00086 }
00087
00088 #endif