diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2023-10-13 12:02:00 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2023-10-13 12:02:00 -0400 |
| commit | 5e67008bc6039c593af4930b3a39242c6fc48355 (patch) | |
| tree | 6c0d62ca2f11a81a990ca55648f8bbf8523a65e7 /src/memory.hpp | |
| parent | fb5c06777557fc28c0d8e919d9a82bdf51adeea7 (diff) | |
DynArray can specify MemBucket in constructor
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); + } } |
