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
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00050
00051
00052
00053 #ifndef _ERRORMACROS_H
00054 #define _ERRORMACROS_H
00055
00056 #include <iostream>
00057
00060 #ifdef NVERBOSE // Not verbose mode
00061 # ifndef REPORT
00062 # define REPORT
00063 # endif
00064 # ifndef MESSAGE
00065 # define MESSAGE(x)
00066 # endif
00067 # ifndef MESSAGE_IF
00068 # define MESSAGE_IF(cond, m)
00069 # endif
00070 #else // Verbose mode
00071 # ifndef REPORT
00072 # define REPORT std::cerr << "\nIn file " << __FILE__ << ", line " << __LINE__ << std::endl
00073 # endif
00074 # ifndef MESSAGE
00075 # define MESSAGE(x) std::cerr << "\nIn file " << __FILE__ << ", line " << __LINE__ << ": " << x << std::endl
00076 # endif
00077 # ifndef MESSAGE_IF
00078 # define MESSAGE_IF(cond, m) do {if(cond) MESSAGE(m);} while(0)
00079 # endif
00080 #endif
00081
00083 #ifndef THROW
00084 # define THROW(x) MESSAGE(x), throw std::exception()
00085 #endif
00086
00087 #define ALWAYS_ERROR_IF(condition, message) do {if(condition){ THROW(message);}} while(0)
00088
00092 #ifdef NDEBUG // Not in debug mode
00093 # ifndef ASSERT
00094 # define ASSERT(x)
00095 # endif
00096 # ifndef ASSERT2
00097 # define ASSERT2(cond, x)
00098 # endif
00099 # ifndef DEBUG_ERROR_IF
00100 # define DEBUG_ERROR_IF(cond, x)
00101 # endif
00102 #else // Debug mode
00103 # ifndef ASSERT
00104 # define ASSERT(cond) if (!(cond)) THROW("Assertation \'" #cond "\' failed.")
00105 # endif
00106 # ifndef ASSERT2
00107 # define ASSERT2(cond, x) do { if (!(cond)) THROW(x);} while(0)
00108 # endif
00109 # ifndef DEBUG_ERROR_IF
00110
00111 # define DEBUG_ERROR_IF(cond, x) do { if (cond) THROW(x); } while(0)
00112 # endif
00113 #endif
00114
00115
00116 #endif // _ERRORMACROS_H
00117
00118
00119
00120