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 #ifndef DEBUG_HPP_
00030 #define DEBUG_HPP_
00031
00032 #include <iostream>
00033 #include <cassert>
00034
00040 #ifndef NDEBUG
00041
00042 #define TRACE(stuff) std::cout << "DEBUG: " << stuff << std::endl << std::flush;
00043
00045 #define PRINT_VARIABLE(var) std::cout << "DEBUG: " #var " = " << var << std::endl << std::flush;
00046 #define PRINT_VARIABLES(var1,var2) std::cout << "DEBUG: " #var1 " = " << var1 << ", " #var2 " = " << var2 << std::endl << std::flush;
00047 #define PRINT_3_VARIABLES(var1,var2,var3) std::cout << "DEBUG: " #var1 " = " << var1 << ", " #var2 " = " << var2 << ", " #var3 " = " << var3 << std::endl << std::flush;
00048 #define PRINT_4_VARIABLES(var1,var2,var3,var4) std::cout << "DEBUG: " #var1 " = " << var1 << ", " #var2 " = " << var2 << ", " #var3 " = " << var3 << ", " #var4 " = " << var4 << std::endl << std::flush;
00049
00051 #define QUIT_AFTER_N_VISITS(n) { static unsigned counter=1; if(counter++==(n)) {TRACE("User-forced quit."); assert(0);} }
00052
00054 #define HOW_MANY_TIMES_HERE(message) { static unsigned counter=1; std::cout << "DEBUG: Num times here ("<< message << "): " << counter++ << std::endl << std::flush; }
00055
00057 #define TRACE_FROM_NTH_VISIT(stuff,n) { static unsigned counter=1; if(counter++>=(n)) {TRACE(stuff<<" (visit "<<counter-1<<")");} }
00058 #else
00059
00060 #define TRACE(stuff)
00061 #define PRINT_VARIABLE(var)
00062 #define PRINT_VARIABLES(var1,var2)
00063 #define PRINT_3_VARIABLES(var1,var2,var3)
00064 #define PRINT_4_VARIABLES(var1,var2,var3,var4)
00065 #define QUIT_AFTER_N_VISITS(n)
00066 #define HOW_MANY_TIMES_HERE(message)
00067 #define TRACE_FROM_NTH_VISIT(stuff,n)
00068 #endif
00069
00070
00071 #endif