-
Notifications
You must be signed in to change notification settings - Fork 3
/
trace.h
132 lines (100 loc) · 2.33 KB
/
trace.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#ifndef INCLUDE_TRACE_H
#define INCLUDE_TRACE_H
// trace.h
// Revision 16-apr-2006
#include <cstddef>
#include <string>
#include "config_debug.h"
#ifndef NDEBUG
#include <sstream>
#endif
class TraceFunc {
public:
TraceFunc (const char * funcname_n, const char * shortname_n= 0);
~TraceFunc ();
void message (const std::string & text);
static void show (int);
private:
const char * funcname;
const char * shortname;
TraceFunc * * previous;
TraceFunc * next;
};
#ifndef NDEBUG
#define TRFUNC(tr,name) \
TraceFunc tr (name, name)
#define TRMESSAGE(tr,text) \
tr.message (text)
#define TRSTREAM(tr,tex) \
{ \
std::ostringstream oss; \
oss << tex; \
tr.message (oss.str () ); \
}
#ifdef HAVE_FUNCTION
#ifdef HAVE_PRETTY_FUNCTION
#define TRF \
TraceFunc tracefunc_obj (__PRETTY_FUNCTION__, __FUNCTION__)
#define TRFDEB(text) \
TraceFunc tracefunc_obj (__PRETTY_FUNCTION__, __FUNCTION__); \
tracefunc_obj.message (text)
#define TRFDEBS(tex) \
TraceFunc tracefunc_obj (__PRETTY_FUNCTION__, __FUNCTION__); \
{ \
std::ostringstream oss; \
oss << tex; \
tracefunc_obj.message (oss.str () ); \
}
#else
#define TRF \
TraceFunc tracefunc_obj (__FUNCTION__)
#define TRFDEB(text) \
TraceFunc tracefunc_obj (__FUNCTION__); \
tracefunc_obj.message (text)
#define TRFDEBS(tex) \
TraceFunc tracefunc_obj (__FUNCTION__); \
{ \
std::ostringstream oss; \
oss << tex; \
tracefunc_obj.message (oss.str () ); \
}
#endif
#else
#define TRF \
TraceFunc tracefunc_obj ("[unknown function name]")
#define TRFDEB(text) \
TraceFunc tracefunc_obj ("[unknown function name]"); \
tracefunc_obj.message (text)
#define TRFDEBS(tex) \
TraceFunc tracefunc_obj ("[unknown function name]"); \
{ \
std::ostringstream oss; \
oss << tex; \
tracefunc_obj.message (oss.str () ); \
}
#endif
#define TRDEB(text) \
tracefunc_obj.message (text)
#define TRDEBS(tex) \
{ \
std::ostringstream oss; \
oss << tex; \
tracefunc_obj.message (oss.str () ); \
}
void trace_assertion_failed (const char * a, const char * file, size_t line);
#define ASSERT(a) \
if (a) ; \
else trace_assertion_failed (#a, __FILE__, __LINE__)
#else
#define TRFUNC(tr,name)
#define TRMESSAGE(tr,text)
#define TRSTREAM(tr,text)
#define TRF
#define TRFDEB(text)
#define TRFDEBS(tex)
#define TRDEB(text)
#define TRDEBS(tex)
#define ASSERT(a)
#endif
#endif
// Fin de trace.h