1 /* ///////////////////////////////////////////////////////////////////////
10 * Copyright (c) 2008-2020, Waruqi All rights reserved.
11 * //////////////////////////////////////////////////////////////////// */
13 #ifndef EXTL_LOG_TRACE_H
14 #define EXTL_LOG_TRACE_H
20 # error trace.h need be supported by c++.
23 /* ///////////////////////////////////////////////////////////////////////
27 #include "console_log.h"
29 /* ///////////////////////////////////////////////////////////////////////
32 #ifdef EXTL_TRACE_FILENAME_ENABLE
33 # define EXTL_TRACE_FILENAME(trace) trace.report_a("file: %s ", EXTL_FILENAME);
35 # define EXTL_TRACE_FILENAME(trace)
38 #ifdef EXTL_TRACE_LINENUM_ENABLE
39 # define EXTL_TRACE_LINENUM(trace) trace.report_a("line: %d ", EXTL_LINENUM);
41 # define EXTL_TRACE_LINENUM(trace)
44 #ifdef EXTL_TRACE_FUNCNAME_ENABLE
45 # define EXTL_TRACE_FUNCNAME(trace) trace.report_a("func: %s ", EXTL_CURRENT_FUNCTION);
47 # define EXTL_TRACE_FUNCNAME(trace)
50 #define EXTL_TRACE_RETURN(trace) trace.report_a("\n");
52 /// Custom trace helper
53 #define EXTL_TRACE_(trace) \
54 EXTL_TRACE_RETURN(trace) \
55 EXTL_TRACE_LINENUM(trace) \
56 EXTL_TRACE_FILENAME(trace) \
57 EXTL_TRACE_FUNCNAME(trace) \
58 EXTL_TRACE_RETURN(trace) \
61 #define EXTL_TRACE_A_(trace) \
62 EXTL_TRACE_RETURN(trace) \
63 EXTL_TRACE_LINENUM(trace) \
64 EXTL_TRACE_FILENAME(trace) \
65 EXTL_TRACE_FUNCNAME(trace) \
66 EXTL_TRACE_RETURN(trace) \
69 #define EXTL_TRACE_W_(trace) \
70 EXTL_TRACE_RETURN(trace) \
71 EXTL_TRACE_LINENUM(trace) \
72 EXTL_TRACE_FILENAME(trace) \
73 EXTL_TRACE_FUNCNAME(trace) \
74 EXTL_TRACE_RETURN(trace) \
77 /// Custom trace helper
78 #define EXTL_TRACE_2_(trace) \
79 EXTL_TRACE_RETURN(trace) \
82 #define EXTL_TRACE_A_2_(trace) \
83 EXTL_TRACE_RETURN(trace) \
86 #define EXTL_TRACE_W_2_(trace) \
87 EXTL_TRACE_RETURN(trace) \
91 * \note EXTL_TRACE is not non-atomic
94 for (; ; ) EXTL_TRACE(_T("...")); // is incorrect
97 EXTL_TRACE(_T("...")); // is correct
102 #ifndef EXTL_TRACE_DISABLE
103 # define EXTL_TRACE EXTL_TRACE_(EXTL_NS(g_trace))
104 # define EXTL_TRACEA EXTL_TRACE_A_(EXTL_NS(g_trace))
105 # define EXTL_TRACEW EXTL_TRACE_W_(EXTL_NS(g_trace))
113 /// Unit-testing report
114 #define EXTL_TEST_TRACE EXTL_TRACE_2_(EXTL_NS(g_unittest_trace))
115 #define EXTL_TEST_TRACEA EXTL_TRACE_A_2_(EXTL_NS(g_unittest_trace))
116 #define EXTL_TEST_TRACEW EXTL_TRACE_W_2_(EXTL_NS(g_unittest_trace))
117 /* ///////////////////////////////////////////////////////////////////////
122 #if defined(EXTL_TRACE_FILE)
124 static file_log
g_trace(EXTL_LOG_FILE_TRACE_FILENAME
);
126 #elif defined(EXTL_TRACE_CONSOLE)
128 static console_log g_trace
;
130 # error Unknown trace.
133 /* Unit-testing trace */
134 static file_log
g_unittest_trace(EXTL_LOG_TEST_FILENAME
);
135 /* ///////////////////////////////////////////////////////////////////////
140 /* //////////////////////////////////////////////////////////////////// */
141 #endif /* EXTL_LOG_TRACE_H */
142 /* //////////////////////////////////////////////////////////////////// */