Phoenix
Object-oriented orthogonally persistent operating system
new.h
Go to the documentation of this file.
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_ */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines