From 5e67008bc6039c593af4930b3a39242c6fc48355 Mon Sep 17 00:00:00 2001 From: Jonathan Bradley Date: Fri, 13 Oct 2023 12:02:00 -0400 Subject: DynArray can specify MemBucket in constructor --- src/memory.hpp | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) (limited to 'src/memory.hpp') 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 -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(ptr); } template -inline T *Pke_New(long count) { - char *ptr = static_cast(Pke_New(sizeof(T) * count)); +inline T *Pke_New(long count, MemBucket *bucket = nullptr) { + char *ptr = nullptr; + if (bucket) { + ptr = static_cast(Pke_New(sizeof(T) * count, bucket)); + } else { + ptr = static_cast(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(ptr); } template -inline void Pke_Delete(const void *ptr) { +inline void Pke_Delete(const void *ptr, MemBucket *bucket = nullptr) { if IS_DESTRUCTIBLE(T) { reinterpret_cast(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 -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(reinterpret_cast(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); + } } -- cgit v1.2.3