cxx_memory.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00119 #ifndef CXX_MEMORY_INCLUDED
00120 #define CXX_MEMORY_INCLUDED
00121
00122 #ifndef mempool_INCLUDED
00123 #include "mempool.h"
00124 #endif
00125
00126 #define CXX_USE_STANDARD_NEW_AND_DELETE
00127 #ifdef CXX_USE_STANDARD_NEW_AND_DELETE
00128
00129 #define CXX_NEW(constructor, mempool) \
00130 (new constructor)
00131
00132 #define CXX_NEW_ARRAY(constructor, elements, mempool) \
00133 (new constructor[elements])
00134
00135 #define CXX_DELETE(pointer, mempool) \
00136 (delete pointer)
00137
00138 #define CXX_DELETE_ARRAY(pointer, mempool) \
00139 (delete[] pointer)
00140
00141 #else
00142
00143 #include <new>
00144 extern MEM_POOL* Delete_Mem_Pool;
00145
00146 extern MEM_POOL* _dummy_new_mempool;
00147 extern MEM_POOL* _dummy_delete_mempool;
00148
00149 #ifdef Is_True_On
00150 extern int _alloc_callsite_line;
00151 extern const char *_alloc_callsite_file;
00152 #endif
00153
00154 extern size_t _dummy_pad;
00155
00156 #ifdef Is_True_On
00157 #define CXX_NEW(constructor, mempool) \
00158 (_dummy_new_mempool = mempool, \
00159 _alloc_callsite_line = __LINE__, \
00160 _alloc_callsite_file = __FILE__, \
00161 new constructor)
00162
00163 #define CXX_NEW_ARRAY(constructor, elements, mempool) \
00164 (_dummy_new_mempool = mempool, \
00165 _alloc_callsite_line = __LINE__, \
00166 _alloc_callsite_file = __FILE__, \
00167 new constructor [elements])
00168
00169 #define CXX_NEW_VARIANT(constructor, pad, mempool) \
00170 (_dummy_new_mempool = mempool, \
00171 _alloc_callsite_line = __LINE__, \
00172 _alloc_callsite_file = __FILE__, \
00173 _dummy_pad = pad, new constructor)
00174 #else // Is_True_On
00175 #define CXX_NEW(constructor, mempool) \
00176 (_dummy_new_mempool = mempool, \
00177 new constructor)
00178
00179 #define CXX_NEW_ARRAY(constructor, elements, mempool) \
00180 (_dummy_new_mempool = mempool, \
00181 new constructor [elements])
00182
00183 #define CXX_NEW_VARIANT(constructor, pad, mempool) \
00184 (_dummy_new_mempool = mempool, \
00185 _dummy_pad = pad, new constructor)
00186 #endif
00187
00188 #define CXX_DELETE(pointer, mempool) \
00189 do { \
00190 MEM_POOL* save_mpool = _dummy_delete_mempool; \
00191 _dummy_delete_mempool = mempool; \
00192 delete pointer; \
00193 _dummy_delete_mempool = save_mpool; \
00194 } while (0)
00195
00196 #define CXX_DELETE_ARRAY(pointer, mempool) \
00197 do { \
00198 MEM_POOL* save_mpool = _dummy_delete_mempool; \
00199 _dummy_delete_mempool = mempool; \
00200 delete [] pointer; \
00201 _dummy_delete_mempool = save_mpool; \
00202 } while (0)
00203
00204 #endif
00205
00206 #endif