Phoenix
Object-oriented orthogonally persistent operating system
|
00001 /* 00002 * /phoenix/include/new.h 00003 * 00004 * This file is a part of Phoenix operating system. 00005 * Copyright (c) 2011-2012, Artyom Lebedev <artyom.lebedev@gmail.com> 00006 * All rights reserved. 00007 * See COPYING file for copyright details. 00008 */ 00009 00014 #ifndef NEW_H_ 00015 #define NEW_H_ 00016 00028 void *__operator_new(size_t size, const char *file, int line, 00029 bool isArray = false, size_t align = 0); 00030 00039 void *__operator_new(size_t size, bool isArray = false, size_t align = 0); 00040 00047 void __operator_delete(void *ptr, bool isArray = false); 00048 00054 inline void * 00055 operator new(size_t size) 00056 { 00057 return __operator_new(size); 00058 } 00059 00065 inline void * 00066 operator new[](size_t size) 00067 { 00068 return __operator_new(size, true); 00069 } 00070 00077 inline void * 00078 operator new(size_t size, size_t align) 00079 { 00080 return __operator_new(size, false, align); 00081 } 00082 00089 inline void * 00090 operator new[](size_t size, size_t align) 00091 { 00092 return __operator_new(size, true, align); 00093 } 00094 00103 inline void * 00104 operator new(size_t size, const char *file, int line, size_t align = 0) 00105 { 00106 return __operator_new(size, file, line, false, align); 00107 } 00108 00117 inline void * 00118 operator new[](size_t size, const char *file, int line, size_t align = 0) 00119 { 00120 return __operator_new(size, file, line, true, align); 00121 } 00122 00126 inline void 00127 operator delete(void *ptr) 00128 { 00129 __operator_delete(ptr); 00130 } 00131 00135 inline void 00136 operator delete[](void *ptr) 00137 { 00138 __operator_delete(ptr, true); 00139 } 00140 00141 #ifdef DEBUG 00142 00145 #define NEW ::new(__FILE__, __LINE__) 00146 00149 #define NEW_ALIGNED(align) ::new(__FILE__, __LINE__, align) 00150 00151 #define NEW_OPT(...) ::new(__FILE__, __LINE__, ## __VA_ARGS__) 00152 00154 #define DELETE ::delete 00155 00156 #else /* DEBUG */ 00157 00158 #define NEW new 00159 #define NEW_ALIGNED(align) new(align) 00160 #define NEW_OPT(...) new(__VA_ARGS__) 00161 00162 #define DELETE delete 00163 00164 #endif /* DEBUG */ 00165 00166 #endif /* NEW_H_ */