blob: 43a09672f410c386abb515d0ac13ec11440c5043 (
plain)
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
|
/*
* PARSEC HEADER
* Debugging Support V1.20
*
* Copyright (c) Markus Hadwiger 1996-1999
* All Rights Reserved.
*/
#ifndef _DEBUG_H_
#define _DEBUG_H_
// debug control --------------------------------------------------------------
//
#define PARSEC_DEBUG
// memory allocation control (also used in non-debug mode) --------------------
//
#define USE_ALIGNED_MEMBLOCKS
// verbose assertions include the actual text of the evaluated expression -----
//
//#define VERBOSE_ASSERTIONS
// debug control --------------------------------------------------------------
//NOTE:
// the following flags determine what checks are performed in debug mode.
//#define LOG_MEMORY_BLOCKS
//#define EXTENSIVE_MEMORY_CHECKS
//#define CHECK_MEM_INTEGRITY_ON_FREE
// ----------------------------------------------------------------------------
#ifdef PARSEC_DEBUG
// debug only statement encapsulation (pass through)
#define DBG(x) x
// don't inline in debug build
#define INLINE
// put private functions into global namespace
#define PRIVATE
#define PUBLIC
#else // PARSEC_DEBUG
// debug only statement encapsulation (eliminate)
#define DBG(x)
// do inlining in release build
#define INLINE inline
// declare private functions as static
#define PRIVATE static
#define PUBLIC
// print warning message, when compiling RELEASE version
#ifdef ENABLE_CHEAT_COMMANDS
#ifdef SYSTEM_COMPILER_MSVC
#pragma message ( "WARNING: ENABLE_CHEAT_COMMANDS is defined in RELEASE build !" )
#endif // SYSTEM_COMPILER_MSVC
#endif // ENABLE_CHEAT_COMMANDS
#endif // PARSEC_DEBUG
// define heap functions to use
#define HEAP_ALLOC malloc // C runtime library malloc()
#define HEAP_FREE free // C runtime library free()
// used in function declarations to tell the compiler that the function won't return
#ifdef SYSTEM_COMPILER_MSVC
#define FUNCTION_NORETURN(x) __declspec(noreturn) x
#else
#define FUNCTION_NORETURN(x) x __attribute__((__noreturn__))
#endif
// external functions
void* _AlignedMalloc( size_t );
void _AlignedFree( void* );
void _SysAssert( const char*, unsigned );
void* _LogAllocMem( size_t );
void _LogFreeMem( void* );
void _CheckHeapBaseRef( void* );
void _CheckHeapRef( void* );
void _CheckMemIntegrity();
// define function wrappers ---------------------------------------------------
#ifdef PARSEC_DEBUG
#include <assert.h>
#define ASSERT( f ) assert( f )
#ifdef LOG_MEMORY_BLOCKS
#define ALLOCMEM( s ) _LogAllocMem( s )
#define FREEMEM( m ) _LogFreeMem( m )
#else // LOG_MEMORY_BLOCKS
#ifdef USE_ALIGNED_MEMBLOCKS
#define ALLOCMEM( s ) _AlignedMalloc( s )
#define FREEMEM( m ) _AlignedFree( m )
#else // USE_ALIGNED_MEMBLOCKS
#define ALLOCMEM( s ) HEAP_ALLOC( s )
#define FREEMEM( m ) HEAP_FREE( m )
#endif // USE_ALIGNED_MEMBLOCKS
#endif // LOG_MEMORY_BLOCKS
#ifdef EXTENSIVE_MEMORY_CHECKS
#define CHECKHEAPBASEREF( r ) _CheckHeapBaseRef( r )
#define CHECKHEAPREF( r ) _CheckHeapRef( r )
#define CHECKMEMINTEGRITY() _CheckMemIntegrity()
#else // EXTENSIVE_MEMORY_CHECKS
#define CHECKHEAPBASEREF( r ) {}
#define CHECKHEAPREF( r ) {}
#define CHECKMEMINTEGRITY() {}
#endif // EXTENSIVE_MEMORY_CHECKS
#else // PARSEC_DEBUG
#ifdef USE_ALIGNED_MEMBLOCKS
#define ALLOCMEM( s ) _AlignedMalloc( s )
#define FREEMEM( m ) _AlignedFree( m )
#else // USE_ALIGNED_MEMBLOCKS
#define ALLOCMEM( s ) HEAP_ALLOC( s )
#define FREEMEM( m ) HEAP_FREE( m )
#endif // USE_ALIGNED_MEMBLOCKS
#define ASSERT( f ) {}
#define CHECKHEAPBASEREF( r ) {}
#define CHECKHEAPREF( r ) {}
#define CHECKMEMINTEGRITY() {}
#endif // PARSEC_DEBUG
// message control ------------------------------------------------------------
//
//NOTE: the following flags determine, what messages get printed out by the
// various DBGTXT, UPDTXT, UPDTXT2, UPDTXT3, RMEVTXT, ADXTXT macros
// these flags were moved from NET_CONF.H as they prove generally useful
#define DEBUG_TEXTS
#define SHOW_UPDATE_TEXT
#define RMEV_MESSAGES
#define PRINT_ADDRESSES
#ifdef DEBUG_TEXTS
#define DBGTXT(x) { if ( AUX_ENABLE_CONSOLE_DEBUG_MESSAGES ) { x } else {} }
#else // !DEBUG_TEXTS
#define DBGTXT(x)
#endif // !DEBUG_TEXTS
#ifdef SHOW_UPDATE_TEXT
#define UPDTXT(x) DBGTXT(x)
#else // !SHOW_UPDATE_TEXT
#define UPDTXT(x)
#endif // !SHOW_UPDATE_TEXT
#ifdef SHOW_UPDATE_TEXT2
#define UPDTXT2(x) DBGTXT(x)
#else // !SHOW_UPDATE_TEXT2
#define UPDTXT2(x)
#endif // !SHOW_UPDATE_TEXT2
#ifdef SHOW_UPDATE_TEXT3
#define UPDTXT3(x) DBGTXT(x)
#else // !SHOW_UPDATE_TEXT3
#define UPDTXT3(x)
#endif // !SHOW_UPDATE_TEXT3
#ifdef RMEV_MESSAGES
#define RMEVTXT(x) DBGTXT(x)
#else // !RMEV_MESSAGES
#define RMEVTXT(x)
#endif // !RMEV_MESSAGES
#ifdef PRINT_ADDRESSES
#define ADXTXT(x) DBGTXT(x)
#else // !PRINT_ADDRESSES
#define ADXTXT(x)
#endif // !PRINT_ADDRESSES
#ifdef DMALLOC
#include "dmalloc.h"
#endif
#endif // _DEBUG_H_
|