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
00036 #define pgNew(type) new(pgMemMgr::mallocForSystem(sizeof(type), 0, __FILE__), NULL) type
00037
00042 #define pgDelete(ptr, type) \
00043 do \
00044 { \
00045 if (!pgMemMgr::isCreated()) \
00046 { \
00047 break; \
00048 } \
00049 \
00050 void* ptr_ = ptr; \
00051 \
00052 if (pgMemMgr::getMemoryBlockArraySize(ptr_) > 0) \
00053 { \
00054 pgThrow(pgMemMgr::ExceptionInvalidCall); \
00055 } \
00056 \
00057 reinterpret_cast<type*>(ptr_)->~type(); \
00058 pgMemMgr::freeForSystem(ptr_); \
00059 } \
00060 while (false)
00061
00066 #define pgNewArray(var, type, array_size) \
00067 do \
00068 { \
00069 var = reinterpret_cast<type*>(pgMemMgr::mallocForSystem(sizeof(type) * array_size, array_size, __FILE__)); \
00070 \
00071 for (u32 i = 0; i < array_size; i++) \
00072 { \
00073 new(&var[i], NULL) type; \
00074 } \
00075 } \
00076 while (false)
00077
00082 #define pgDeleteArray(ptr, type) \
00083 do \
00084 { \
00085 if (!pgMemMgr::isCreated()) \
00086 { \
00087 break; \
00088 } \
00089 \
00090 void* ptr_ = ptr; \
00091 u32 array_size = pgMemMgr::getMemoryBlockArraySize(ptr_); \
00092 \
00093 if (array_size == 0) \
00094 { \
00095 pgThrow(pgMemMgr::ExceptionInvalidCall); \
00096 } \
00097 \
00098 for (u32 i = 0; i < array_size; i++) \
00099 { \
00100 reinterpret_cast<type*>(ptr_)[i].~type(); \
00101 } \
00102 \
00103 pgMemMgr::freeForSystem(ptr_); \
00104 } \
00105 while (false)
00106
00111 #define pgMalloc(size) pgMemMgr::mallocForSystem(size, 0, __FILE__)
00112
00117 #define pgRealloc(ptr, size) pgMemMgr::reallocForSystem(ptr, size, 0, __FILE__)
00118
00123 #define pgFree(ptr) pgMemMgr::freeForSystem(ptr)
00124
00125
00126 PG_API void* operator new(size_t, void* ptr, pgException*);
00127 PG_API void operator delete(void*, void*, pgException*);