remove \r
[extl.git] / extl / log / trace.h
blob18d909c947458bb012f4a753f21476742cdf20b5
1 /* ///////////////////////////////////////////////////////////////////////
2 * File: trace.h
4 * Created: 08.06.08
5 * Updated: 08.06.08
7 * Brief: trace class
9 * [<Home>]
10 * Copyright (c) 2008-2020, Waruqi All rights reserved.
11 * //////////////////////////////////////////////////////////////////// */
13 #ifndef EXTL_LOG_TRACE_H
14 #define EXTL_LOG_TRACE_H
16 /*!\file trace.h
17 * \brief trace class
19 #ifndef __cplusplus
20 # error trace.h need be supported by c++.
21 #endif
23 /* ///////////////////////////////////////////////////////////////////////
24 * Includes
26 #include "file_log.h"
27 #include "console_log.h"
29 /* ///////////////////////////////////////////////////////////////////////
30 * Macros
32 #ifdef EXTL_TRACE_FILENAME_ENABLE
33 # define EXTL_TRACE_FILENAME(trace) trace.report_a("file: %s ", EXTL_FILENAME);
34 #else
35 # define EXTL_TRACE_FILENAME(trace)
36 #endif
38 #ifdef EXTL_TRACE_LINENUM_ENABLE
39 # define EXTL_TRACE_LINENUM(trace) trace.report_a("line: %d ", EXTL_LINENUM);
40 #else
41 # define EXTL_TRACE_LINENUM(trace)
42 #endif
44 #ifdef EXTL_TRACE_FUNCNAME_ENABLE
45 # define EXTL_TRACE_FUNCNAME(trace) trace.report_a("func: %s ", EXTL_CURRENT_FUNCTION);
46 #else
47 # define EXTL_TRACE_FUNCNAME(trace)
48 #endif
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) \
59 trace.report
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) \
67 trace.report_a
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) \
75 trace.report_w
77 /// Custom trace helper
78 #define EXTL_TRACE_2_(trace) \
79 EXTL_TRACE_RETURN(trace) \
80 trace.report
82 #define EXTL_TRACE_A_2_(trace) \
83 EXTL_TRACE_RETURN(trace) \
84 trace.report_a
86 #define EXTL_TRACE_W_2_(trace) \
87 EXTL_TRACE_RETURN(trace) \
88 trace.report_w
90 /*!Trace
91 * \note EXTL_TRACE is not non-atomic
92 * \code
93 e.g.
94 for (; ; ) EXTL_TRACE(_T("...")); // is incorrect
95 for (; ; )
97 EXTL_TRACE(_T("...")); // is correct
99 * \endcode
101 /// @{
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))
106 #else
107 # define EXTL_TRACE
108 # define EXTL_TRACEA
109 # define EXTL_TRACEW
110 #endif
111 /// @}
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 /* ///////////////////////////////////////////////////////////////////////
118 * ::extl namespace
120 EXTL_BEGIN_NAMESPACE
122 #if defined(EXTL_TRACE_FILE)
123 /* file trace */
124 static file_log g_trace(EXTL_LOG_FILE_TRACE_FILENAME);
126 #elif defined(EXTL_TRACE_CONSOLE)
127 /* console trace */
128 static console_log g_trace;
129 #else
130 # error Unknown trace.
131 #endif
133 /* Unit-testing trace */
134 static file_log g_unittest_trace(EXTL_LOG_TEST_FILENAME);
135 /* ///////////////////////////////////////////////////////////////////////
136 * ::extl namespace
138 EXTL_END_NAMESPACE
140 /* //////////////////////////////////////////////////////////////////// */
141 #endif /* EXTL_LOG_TRACE_H */
142 /* //////////////////////////////////////////////////////////////////// */