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)42 static inline void enable_trace(const char * tag) {}
enable_all_trace(bool flag)43 static inline void enable_all_trace(bool flag) {}
disable_trace(const char * tag)44 static inline void disable_trace(const char * tag) {}
is_trace_enabled(const char * tag)45 static inline bool is_trace_enabled(const char * tag) { return false; }
close_trace()46 static inline void close_trace() {}
open_trace()47 static inline void open_trace() {}
finalize_trace()48 static 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