00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef MEMRY_H
00021 #define MEMRY_H
00022
00023 #include <stddef.h>
00024 #include "host.h"
00025
00026 #define JUSTCHECKS 0
00027 #define MEMCHECKS 1
00028 #define FULLMEMCHECKS 2
00029
00030 #ifdef __MSW32__
00031 #define NEWDELETE \
00032 void *operator new( \
00033 size_t size, \
00034 const char* file=NULL, \
00035 inT32 line=0) \
00036 {\
00037 return alloc_struct(size); \
00038 }\
00039 \
00040 void operator delete( \
00041 void *deadstruct, \
00042 size_t size) \
00043 {\
00044 free_struct(deadstruct,size); \
00045 }\
00046
00047 #define NEWDELETE2(name) \
00048 void *operator new( \
00049 size_t size, \
00050 const char* file=NULL, \
00051 inT32 line=0) \
00052 {\
00053 return alloc_struct(size,#name); \
00054 }\
00055 \
00056 void operator delete( \
00057 void *deadstruct, \
00058 size_t size) \
00059 {\
00060 free_struct(deadstruct,size,#name); \
00061 }\
00062
00063
00064 #undef NEWDELETE
00065 #define NEWDELETE
00066 #undef NEWDELETE2
00067 #define NEWDELETE2(name)
00068
00069 #else
00070 #define NEWDELETE \
00071 void *operator new( \
00072 size_t size) \
00073 {\
00074 return alloc_struct(size); \
00075 }\
00076 \
00077 void operator delete( \
00078 void *deadstruct, \
00079 size_t size) \
00080 {\
00081 free_struct(deadstruct,size); \
00082 }\
00083
00084 #define NEWDELETE2(name) \
00085 void *operator new( \
00086 size_t size) \
00087 {\
00088 return alloc_struct(size,#name); \
00089 }\
00090 \
00091 void operator delete( \
00092 void *deadstruct, \
00093 size_t size) \
00094 {\
00095 free_struct(deadstruct,size,#name); \
00096 }\
00097
00098 #endif
00099
00100
00101
00102
00103
00104
00105 #define ALLOC_2D_ARRAY(x,y,mem,ptrs,type) \
00106 { \
00107 inT32 TMP_i; \
00108 mem=(type*)alloc_mem((x)*(y)*sizeof(type)); \
00109 ptrs=(type**)alloc_mem((x)*sizeof(type*)); \
00110 for (TMP_i=0;TMP_i<(x);TMP_i++)\
00111 ptrs[TMP_i]=mem+(y)*TMP_i; \
00112 } \
00113
00114
00115
00116
00117
00118
00119
00120 #define FREE_2D_ARRAY(mem,ptrs) \
00121 { \
00122 free_mem(mem); \
00123 free_mem(ptrs); \
00124 } \
00125
00126
00127
00128
00129
00130
00131
00132
00133 #define ALLOC_BIG_2D_ARRAY(x,y,mem,ptrs,type) \
00134 { \
00135 inT32 TMP_i; \
00136 mem=(type*)alloc_big_mem((x)*(y)*sizeof(type)); \
00137 ptrs=(type**)alloc_big_mem((x)*sizeof(type*)); \
00138 for (TMP_i=0;TMP_i<(x);TMP_i++)\
00139 ptrs[TMP_i]=mem+(y)*TMP_i; \
00140 } \
00141
00142
00143
00144
00145
00146
00147
00148 #define FREE_BIG_2D_ARRAY(mem,ptrs) \
00149 { \
00150 free_big_mem(mem); \
00151 free_big_mem(ptrs); \
00152 } \
00153
00154 extern DLLSYM void check_mem(
00155 const char *string,
00156 inT8 level
00157 );
00158
00159 extern DLLSYM char *alloc_string(inT32 count
00160 );
00161 extern DLLSYM void free_string(
00162 char *string
00163 );
00164
00165 extern DLLSYM void *alloc_struct (
00166 inT32 count,
00167 const char *name = NULL
00168 );
00169 extern DLLSYM void free_struct (
00170 void *deadstruct,
00171 inT32 count,
00172 const char *name = NULL
00173 );
00174 extern DLLSYM void *alloc_mem_p(
00175 inT32 count
00176 );
00177 extern DLLSYM void *alloc_mem(
00178 inT32 count
00179 );
00180
00181 extern DLLSYM void *alloc_big_mem(inT32 count
00182 );
00183
00184 extern DLLSYM void *alloc_big_zeros(inT32 count
00185 );
00186 extern DLLSYM void free_mem(
00187 void *oldchunk
00188 );
00189 extern DLLSYM void free_big_mem(
00190 void *oldchunk
00191 );
00192 #endif