00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00028 #ifndef __RTXMEMORY_H__
00029 #define __RTXMEMORY_H__
00030
00031 #include "rtxsrc/rtxContext.h"
00032
00033 #define RT_MH_DONTKEEPFREE 0x1
00034
00035 #define OSRTMH_PROPID_DEFBLKSIZE 1
00036 #define OSRTMH_PROPID_SETFLAGS 2
00037 #define OSRTMH_PROPID_CLEARFLAGS 3
00038
00039 #define OSRTMH_PROPID_USER 10
00040
00041 #define OSRTXM_K_MEMBLKSIZ (4*1024)
00042
00056 #define OSRTALLOCTYPE(pctxt,type) \
00057 (type*) rtxMemHeapAlloc (&(pctxt)->pMemHeap, sizeof(type))
00058
00065 #define OSRTALLOCTYPEZ(pctxt,type) \
00066 (type*) rtxMemHeapAllocZ (&(pctxt)->pMemHeap, sizeof(type))
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079 #define OSRTREALLOCARRAY(pctxt,pseqof,type) do {\
00080 if (sizeof(type)*(pseqof)->n < (pseqof)->n) return RTERR_NOMEM; \
00081 if (((pseqof)->elem = (type*) rtxMemHeapRealloc \
00082 (&(pctxt)->pMemHeap, (pseqof)->elem, sizeof(type)*(pseqof)->n)) == 0) \
00083 return RTERR_NOMEM; \
00084 } while (0)
00085
00086 #ifndef _NO_MALLOC
00087 #define OSCRTMALLOC0(nbytes) malloc(nbytes)
00088 #define OSCRTFREE0(ptr) free(ptr)
00089 #else
00090
00091 #ifdef _NO_THREADS
00092 extern EXTERNRTX OSCTXT g_ctxt;
00093
00094 #define OSCRTMALLOC0(nbytes) rtxMemAlloc(&g_ctxt,(nbytes))
00095 #define OSCRTFREE0(ptr) rtxMemFreePtr(&g_ctxt,(ptr))
00096 #else
00097 #define OSCRTMALLOC0(nbytes) (void*)0
00098 #define OSCRTFREE0(ptr) (void*)0
00099
00100 #endif
00101 #endif
00102
00103 #define OSCRTMALLOC rtxMemAlloc
00104 #define OSCRTFREE rtxMemFreePtr
00105
00106 struct OSRTDList;
00107
00108 #ifdef __cplusplus
00109 extern "C" {
00110 #endif
00111
00112
00113
00114
00115 #if !defined(OSCDECL)
00116 #if defined(_MSC_VER) || defined(__BORLANDC__)
00117 #define OSCDECL __cdecl
00118 #else
00119 #define OSCDECL
00120 #endif
00121 #endif
00122
00123
00124
00125
00126 typedef void *(OSCDECL *OSMallocFunc ) (size_t size);
00127 typedef void *(OSCDECL *OSReallocFunc) (void *ptr, size_t size);
00128 typedef void (OSCDECL *OSFreeFunc ) (void *ptr);
00129
00130 #ifdef _RT_ALLOC_FUNC_WITH_CONTEXT
00131
00132
00133
00134
00135
00136 typedef void *(OSCDECL *OSMallocCtxtFunc ) (OSCTXT* pctxt, size_t size);
00137 typedef void *(OSCDECL *OSReallocCtxtFunc) (OSCTXT* pctxt, void *ptr, size_t size);
00138 typedef void (OSCDECL *OSFreeCtxtFunc ) (OSCTXT* pctxt, void *ptr);
00139
00140 #endif
00141
00142 EXTERNRTX void rtxMemHeapAddRef (void** ppvMemHeap);
00143 EXTERNRTX void* rtxMemHeapAlloc (void** ppvMemHeap, size_t nbytes);
00144 EXTERNRTX void* rtxMemHeapAllocZ (void** ppvMemHeap, size_t nbytes);
00145 EXTERNRTX int rtxMemHeapCheckPtr (void** ppvMemHeap, void* mem_p);
00146 EXTERNRTX int rtxMemHeapCreate (void** ppvMemHeap);
00147 EXTERNRTX void rtxMemHeapFreeAll (void** ppvMemHeap);
00148 EXTERNRTX void rtxMemHeapFreePtr (void** ppvMemHeap, void* mem_p);
00149 EXTERNRTX void* rtxMemHeapMarkSaved (void** ppvMemHeap,
00150 const void* mem_p,
00151 OSBOOL saved);
00152 EXTERNRTX void* rtxMemHeapRealloc (void** ppvMemHeap,
00153 void* mem_p, size_t nbytes_);
00154 EXTERNRTX void rtxMemHeapRelease (void** ppvMemHeap);
00155 EXTERNRTX void rtxMemHeapReset (void** ppvMemHeap);
00156 EXTERNRTX void rtxMemHeapSetProperty (void** ppvMemHeap,
00157 OSUINT32 propId, void* pProp);
00158
00159
00160
00161 EXTERNRTX void* rtxMemNewArray (size_t nbytes);
00162 EXTERNRTX void* rtxMemNewArrayZ (size_t nbytes);
00163 EXTERNRTX void rtxMemDeleteArray (void* mem_p);
00164
00165 #ifndef __SYMBIAN32__
00166
00181 EXTERNRTX void rtxMemSetAllocFuncs (OSMallocFunc malloc_func,
00182 OSReallocFunc realloc_func,
00183 OSFreeFunc free_func);
00184 #endif
00185
00186 #ifdef _RT_ALLOC_FUNC_WITH_CONTEXT
00187
00188 EXTERNRTX void rtxMemSetAllocCtxtFuncs (OSMallocCtxtFunc malloc_func,
00189 OSReallocCtxtFunc realloc_func,
00190 OSFreeCtxtFunc free_func);
00191
00192 #endif
00193
00194 EXTERNRTX void rtxMemFreeOpenSeqExt
00195 (OSCTXT* pctxt, struct OSRTDList *pElemList);
00196
00197
00198
00199
00200
00201
00202 EXTERNRTX OSUINT32 rtxMemHeapGetDefBlkSize (OSCTXT* pctxt);
00203
00204 #ifndef __SYMBIAN32__
00205
00212 EXTERNRTX void rtxMemSetDefBlkSize (OSUINT32 blkSize);
00213 #endif
00214
00221 EXTERNRTX OSUINT32 rtxMemGetDefBlkSize ();
00222
00231 EXTERNRTX OSBOOL rtxMemIsZero (const void* pmem, size_t memsiz);
00232
00233 #ifdef _STATIC_HEAP
00234 EXTERNRTX void rtxMemSetStaticBuf (void* memHeapBuf, OSUINT32 blkSize);
00235 #endif
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246 #define rtxMemAlloc(pctxt,nbytes) \
00247 rtxMemHeapAlloc(&(pctxt)->pMemHeap,nbytes)
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258 #define rtxMemAllocZ(pctxt,nbytes) \
00259 rtxMemHeapAllocZ(&(pctxt)->pMemHeap,nbytes)
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275 #define rtxMemRealloc(pctxt,mem_p,nbytes) \
00276 rtxMemHeapRealloc(&(pctxt)->pMemHeap, (void*)mem_p, nbytes)
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289 #define rtxMemFreePtr(pctxt,mem_p) \
00290 if (rtxMemHeapCheckPtr (&(pctxt)->pMemHeap, (void*)mem_p)) \
00291 rtxMemHeapFreePtr(&(pctxt)->pMemHeap, (void*)mem_p)
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301 #define rtxMemFree(pctxt) \
00302 rtxMemHeapFreeAll(&(pctxt)->pMemHeap)
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318 #define rtxMemReset(pctxt) \
00319 rtxMemHeapReset(&(pctxt)->pMemHeap)
00320
00330 #define rtxMemAllocType(pctxt,ctype) \
00331 (ctype*)rtxMemHeapAlloc(&(pctxt)->pMemHeap,sizeof(ctype))
00332
00342 #define rtxMemAllocTypeZ(pctxt,ctype) \
00343 (ctype*)rtxMemHeapAllocZ(&(pctxt)->pMemHeap,sizeof(ctype))
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354
00355
00356 #define rtxMemFreeType(pctxt,mem_p) \
00357 rtxMemHeapFreePtr(&(pctxt)->pMemHeap, (void*)mem_p)
00358
00368 #define rtxMemAllocArray(pctxt,n,type) \
00369 (type*)rtxMemHeapAlloc (&(pctxt)->pMemHeap, sizeof(type)*n)
00370
00371 #define rtxMemAllocArrayZ(pctxt,n,type) \
00372 (type*)rtxMemHeapAllocZ (&(pctxt)->pMemHeap, sizeof(type)*n)
00373
00374
00375
00376
00377
00378
00379
00380
00381
00382
00383
00384
00385 #define rtxMemFreeArray(pctxt,mem_p) \
00386 rtxMemHeapFreePtr(&(pctxt)->pMemHeap, (void*)mem_p)
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401
00402 #define rtxMemReallocArray(pctxt,mem_p,n,type) \
00403 (type*)rtxMemHeapRealloc(&(pctxt)->pMemHeap, (void*)mem_p, sizeof(type)*n)
00404
00405 #ifdef __cplusplus
00406 }
00407 #endif
00408
00411 #endif