#ifndef DEBUG_H #define DEBUG_H #include "Behavioural/include/Debug_component.h" #include #include #include #include #include using namespace std; // Debug's Level : // * None : print elementary information // * Info : print basic information // * Trace : trace internal variable // * Func : trace call and return function // * All : print all information enum _debug_verbosity { DEBUG_NONE , DEBUG_INFO , DEBUG_TRACE, DEBUG_FUNC , DEBUG_ALL }; #ifdef DEBUG //Debug # define log_printf(level, component, func, str... ) \ do \ { \ if ( (DEBUG == DEBUG_ALL) or \ (( DEBUG_ ## level <= DEBUG) and \ ( DEBUG_ ## component == true )) ) \ { \ if (DEBUG >= DEBUG_ALL ) \ { \ switch (DEBUG_ ## level) \ { \ case DEBUG_NONE : fprintf(stdout,"(none ) "); break; \ case DEBUG_INFO : fprintf(stdout,"(information) "); break; \ case DEBUG_TRACE : fprintf(stdout,"(trace ) "); break; \ case DEBUG_FUNC : fprintf(stdout,"(function ) "); break; \ case DEBUG_ALL : fprintf(stdout,"(all ) "); break; \ default : fprintf(stdout,"(undefine ) "); break; \ } \ } \ fprintf(stdout,"In file %s, ",__FILE__); \ fprintf(stdout,"at line %d, ",__LINE__); \ if (DEBUG >= DEBUG_FUNC) \ { \ fprintf(stdout,"in function \"%s\" ",func); \ } \ fprintf(stdout,": "); \ fprintf(stdout,str); \ fprintf(stdout,"\n"); \ fflush (stdout); \ } \ } while(0) #else // No debug # define log_printf(level, component, func, str... ) \ do \ { \ } while(0) #endif // DEBUG #endif // !DEBUG_H