00001 #ifndef DEBUG_TOOLS_H
00002 #define DEBUG_TOOLS_H
00003
00004 #include "TSystem.h"
00005 #include "TStopwatch.h"
00006 #include <cstdio>
00007 #include <ios>
00008
00009
00010
00011
00012 #define _NUM_ARGS(X100, X99, X98, X97, X96, X95, X94, X93, X92, X91, X90,\
00013 X89, X88, X87, X86, X85, X84, X83, X82, X81, X80, X79, X78, X77, X76,\
00014 X75, X74, X73, X72, X71, X70, X69, X68, X67, X66, X65, X64, X63, X62,\
00015 X61, X60, X59, X58, X57, X56, X55, X54, X53, X52, X51, X50, X49, X48,\
00016 X47, X46, X45, X44, X43, X42, X41, X40, X39, X38, X37, X36, X35, X34,\
00017 X33, X32, X31, X30, X29, X28, X27, X26, X25, X24, X23, X22, X21, X20,\
00018 X19, X18, X17, X16, X15, X14, X13, X12, X11, X10, X9, X8, X7, X6, X5,\
00019 X4, X3, X2, X1, N, ...) N
00020
00021 #define NUM_ARGS(...) _NUM_ARGS(__VA_ARGS__, 100, 99, 98, 97, 96, 95, 94,\
00022 93, 92, 91, 90, 89, 88, 87, 86, 85, 84, 83, 82, 81, 80, 79, 78, 77,\
00023 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60,\
00024 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43,\
00025 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26,\
00026 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8,\
00027 7, 6, 5, 4, 3, 2, 1)
00028
00029 #define DEBUG_PREFIX std::cout << "@ " << __FILE__ << ":" << __LINE__
00030 #define DEBUG_VALUE_IMP(value) "\n "#value"= [" << (value) <<"]"
00031 #define DEBUG_VALUE_1(value) DEBUG_VALUE_IMP(value)
00032 #define DEBUG_VALUE_2(value, ...) DEBUG_VALUE_IMP(value)", " << DEBUG_VALUE_1(__VA_ARGS__)
00033 #define DEBUG_VALUE_3(value, ...) DEBUG_VALUE_IMP(value)", " << DEBUG_VALUE_2(__VA_ARGS__)
00034 #define DEBUG_VALUE_4(value, ...) DEBUG_VALUE_IMP(value)", " << DEBUG_VALUE_3(__VA_ARGS__)
00035 #define DEBUG_VALUE_5(value, ...) DEBUG_VALUE_IMP(value)", " << DEBUG_VALUE_4(__VA_ARGS__)
00036 #define DEBUG_VALUE_6(value, ...) DEBUG_VALUE_IMP(value)", " << DEBUG_VALUE_5(__VA_ARGS__)
00037
00038 #define DEBUG_VALUE_N_( n , ...) DEBUG_VALUE_##n(__VA_ARGS__)
00039 #define DEBUG_VALUE_N( n , ...) DEBUG_VALUE_N_(n,__VA_ARGS__)
00040
00041 #ifndef ALCAP_NO_DEBUG
00042 #define DEBUG_CHECKPOINT DEBUG_PREFIX << std::endl;
00043 #define DEBUG_PRINT(output) DEBUG_PREFIX<<output << std::endl;
00044 #define DEBUG_VALUE(...) DEBUG_PREFIX << ":" << std::boolalpha \
00045 << DEBUG_VALUE_N(NUM_ARGS(__VA_ARGS__),__VA_ARGS__) <<std::endl;
00046 #else
00047 #define DEBUG_CHECKPOINT
00048 #define DEBUG_PRINT(output)
00049 #define DEBUG_VALUE(...)
00050 #endif
00051
00052 namespace DEBUG {
00053
00054 struct time_log {
00055 time_log(int c, int u) ;
00056
00057 static char str[64];
00058 int cpu;
00059 int user;
00060 };
00061
00062 template<int I>
00063 const time_log check_clock(){
00064 static TStopwatch watch;
00065 watch.Stop();
00066 time_log log(1000 * watch.CpuTime(), 1000 * watch.RealTime());
00067 watch.Start();
00068 return log;
00069 }
00070
00071 time_log check_clock();
00072
00073
00074 struct mem_log {
00075 mem_log(int r, int v) ;
00076
00077 static char str[64];
00078 int res;
00079 int virt;
00080 };
00081
00082 const mem_log check_mem();
00083 };
00084
00085 #endif