00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 #ifndef PMEMORY_H
00021 #define PMEMORY_H
00022 
00023 
00024 
00025 #define PMEM_MAP_TRACE
00026 
00027 #include "PortPrefix.h"
00028 #include "ptypes.h"
00029 #include "pstdio.h"
00030 #include <stddef.h>
00031 #include <stdlib.h>
00032 
00044 #define _VAL(x) #x
00045 
00048 #define _STR(x) _VAL(x)
00049 
00050 #ifdef DISABLE_MALLOC
00051 #define malloc #error
00052 #define calloc #error
00053 #define realloc #error
00054 #define free #error
00055 #endif
00056 
00057 #ifndef offsetof
00058 #define offsetof(type, member) ((size_t) &(((type *)0)->member))
00059 #endif
00060 
00061 
00062 
00063 
00064 
00065 
00066 
00070 #define STATIC_CAST(self, subClass, member) ((subClass*) (((char*) self) - (offsetof(subClass, member))))
00071 
00072 #ifdef PMEM_MAP_TRACE
00073 
00076 #define MALLOC(nbBytes, tag) (pmalloc(nbBytes, tag, L(__FILE__), __LINE__))
00077 #else
00078 
00081 #define MALLOC(nbBytes, tag) (pmalloc(nbBytes))
00082 #endif
00083 
00084 #ifdef PMEM_MAP_TRACE
00085 
00088 #define CALLOC(nbElem, elemSize, tag) (pcalloc(nbElem,  elemSize  , tag, L(__FILE__), __LINE__))
00089 #define CALLOC_CLR(nbElem, elemSize, tag) (pcalloc(nbElem,  elemSize  , tag, L(__FILE__), __LINE__))
00090 #else
00091 
00094 #define CALLOC(nbElem, elemSize, tag) (pcalloc(nbElem,  elemSize))
00095 #define CALLOC_CLR(nbElem, elemSize, tag) (pcalloc(nbElem,  elemSize))
00096 #endif
00097 
00098 #ifdef PMEM_MAP_TRACE
00099 
00102 #define REALLOC(ptr, newSize) (prealloc(ptr, newSize, L(__FILE__), __LINE__))
00103 #else
00104 
00107 #define REALLOC(ptr, newSize) (prealloc(ptr, newSize))
00108 #endif
00109 
00113 #define NEW(type, tag) ((type*) MALLOC(sizeof(type), tag))
00114 
00118 #define NEW_ARRAY(type, nbElem, tag) ((type *) CALLOC(nbElem, sizeof(type), tag))
00119 
00120 #ifdef PMEM_MAP_TRACE
00121 
00124 #define FREE(ptr) pfree(ptr, L(__FILE__), __LINE__)
00125 #else
00126 
00129 #define FREE(ptr) pfree(ptr)
00130 #endif
00131 
00150 #ifdef PMEM_MAP_TRACE
00151 PORTABLE_API void *pmalloc(size_t nbBytes, const LCHAR* tag, const LCHAR* file, int line);
00152 #else
00153 PORTABLE_API void *pmalloc(size_t nbBytes);
00154 #endif
00155 
00172 #ifdef PMEM_MAP_TRACE
00173 PORTABLE_API void *pcalloc(size_t nbItems, size_t itemSize, const LCHAR* tag, const LCHAR* file, int line);
00174 #else
00175 PORTABLE_API void *pcalloc(size_t nbItems, size_t itemSize);
00176 #endif
00177 
00192 #ifdef PMEM_MAP_TRACE
00193 PORTABLE_API void *prealloc(void* ptr, size_t newSize, const LCHAR* file, int line);
00194 #else
00195 PORTABLE_API void *prealloc(void* ptr, size_t newSize);
00196 #endif
00197 
00210 #ifdef PMEM_MAP_TRACE
00211 PORTABLE_API void pfree(void* ptr, const LCHAR* file, int line);
00212 #else
00213 PORTABLE_API void pfree(void* ptr);
00214 #endif
00215 
00229 PORTABLE_API ESR_ReturnCode PMemInit(void);
00230 
00237 PORTABLE_API ESR_ReturnCode PMemShutdown(void);
00238 
00247 PORTABLE_API ESR_ReturnCode PMemSetLogFile(PFile* file);
00248 
00254 PORTABLE_API ESR_ReturnCode PMemDumpLogFile(void);
00255 
00264 PORTABLE_API ESR_ReturnCode PMemSetLogEnabled(ESR_BOOL value);
00265 
00274 PORTABLE_API ESR_ReturnCode PMemLogFree(void* ptr);
00275 
00285 PORTABLE_API ESR_ReturnCode PMemReport(PFile* file);
00286 
00295 PORTABLE_API ESR_ReturnCode PMemorySetPoolSize(size_t size);
00296 
00303 PORTABLE_API ESR_ReturnCode PMemoryGetPoolSize(size_t *size);
00304 
00309 #endif