diff options
Diffstat (limited to 'src/memory.hpp')
| -rw-r--r-- | src/memory.hpp | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/src/memory.hpp b/src/memory.hpp index 50be56b..b93890a 100644 --- a/src/memory.hpp +++ b/src/memory.hpp @@ -35,16 +35,26 @@ void Pke_EndTransientBucket(MemBucket *bkt); void Pke_MemoryFlush(); template <typename T> -inline T *Pke_New() { - void *ptr = Pke_New(sizeof(T)); +inline T *Pke_New(MemBucket *bucket = nullptr) { + void *ptr = nullptr; + if (bucket) { + ptr = Pke_New(sizeof(T), bucket); + } else { + ptr = Pke_New(sizeof(T)); + } if IS_CONSTRUCTIBLE(T) { return new (ptr) T{}; } return reinterpret_cast<T *>(ptr); } template <typename T> -inline T *Pke_New(long count) { - char *ptr = static_cast<char *>(Pke_New(sizeof(T) * count)); +inline T *Pke_New(long count, MemBucket *bucket = nullptr) { + char *ptr = nullptr; + if (bucket) { + ptr = static_cast<char *>(Pke_New(sizeof(T) * count, bucket)); + } else { + ptr = static_cast<char *>(Pke_New(sizeof(T) * count)); + } if IS_CONSTRUCTIBLE(T) { for (long i = 0; i < count; ++i) { new (ptr + (i * sizeof(T))) T{}; @@ -53,20 +63,28 @@ inline T *Pke_New(long count) { return reinterpret_cast<T *>(ptr); } template <typename T> -inline void Pke_Delete(const void *ptr) { +inline void Pke_Delete(const void *ptr, MemBucket *bucket = nullptr) { if IS_DESTRUCTIBLE(T) { reinterpret_cast<const T *>(ptr)->~T(); } - return Pke_Delete(ptr, sizeof(T)); + if (bucket) { + return Pke_Delete(ptr, sizeof(T), bucket); + } else { + return Pke_Delete(ptr, sizeof(T)); + } } template <typename T> -inline void Pke_Delete(const void *ptr, long count) { +inline void Pke_Delete(const void *ptr, long count, MemBucket *bucket = nullptr) { if IS_DESTRUCTIBLE(T) { for (long i = 0; i < count; ++i) { reinterpret_cast<const T *>(reinterpret_cast<const char *>(ptr) + (i * sizeof(T)))->~T(); } } - return Pke_Delete(ptr, sizeof(T) * count); + if (bucket) { + return Pke_Delete(ptr, sizeof(T) * count, bucket); + } else { + return Pke_Delete(ptr, sizeof(T) * count); + } } |
