1 /*++ 2 Copyright (c) 2006 Microsoft Corporation 3 4 Module Name: 5 6 trace.h 7 8 Abstract: 9 10 Trace message support. 11 12 Author: 13 14 Leonardo de Moura (leonardo) 2006-09-13. 15 16 Revision History: 17 18 --*/ 19 20 #pragma once 21 22 #include<fstream> 23 24 #ifdef _TRACE 25 extern std::ofstream tout; 26 #define TRACE_CODE(CODE) { CODE } ((void) 0 ) 27 28 void enable_trace(const char * tag); 29 void enable_all_trace(bool flag); 30 void disable_trace(const char * tag); 31 bool is_trace_enabled(const char * tag); 32 void close_trace(); 33 void open_trace(); 34 void finalize_trace(); 35 /* 36 ADD_FINALIZER('finalize_trace();') 37 */ 38 39 #else 40 #define TRACE_CODE(CODE) ((void) 0) 41 enable_trace(const char * tag)42static inline void enable_trace(const char * tag) {} enable_all_trace(bool flag)43static inline void enable_all_trace(bool flag) {} disable_trace(const char * tag)44static inline void disable_trace(const char * tag) {} is_trace_enabled(const char * tag)45static inline bool is_trace_enabled(const char * tag) { return false; } close_trace()46static inline void close_trace() {} open_trace()47static inline void open_trace() {} finalize_trace()48static inline void finalize_trace() {} 49 #endif 50 51 #define TRACE(TAG, CODE) TRACE_CODE(if (is_trace_enabled(TAG)) { tout << "-------- [" << TAG << "] " << __FUNCTION__ << " " << __FILE__ << ":" << __LINE__ << " ---------\n"; CODE tout << "------------------------------------------------\n"; tout.flush(); }) 52 53 #define STRACE(TAG, CODE) TRACE_CODE(if (is_trace_enabled(TAG)) { CODE tout.flush(); }) 54 55 #define SCTRACE(TAG, COND, CODE) TRACE_CODE(if (is_trace_enabled(TAG) && (COND)) { CODE tout.flush(); }) 56 57 #define CTRACE(TAG, COND, CODE) TRACE_CODE(if (is_trace_enabled(TAG) && (COND)) { tout << "-------- [" << TAG << "] " << __FUNCTION__ << " " << __FILE__ << ":" << __LINE__ << " ---------\n"; CODE tout << "------------------------------------------------\n"; tout.flush(); }) 58