diff options
| -rw-r--r-- | src/memory.hpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/memory.hpp b/src/memory.hpp index 329be51..8e733bf 100644 --- a/src/memory.hpp +++ b/src/memory.hpp @@ -13,6 +13,14 @@ struct MemBucket; +template<typename T, typename CT> +struct BucketContainer { + uint64_t incrementer; + CT bucketCounter{0}; + CT itemCounter{0}; + T *buckets = nullptr; +}; + void *Pke_New(std::size_t sz); void *Pke_New(std::size_t sz, MemBucket *bkt); void Pke_Delete(const void *ptr, std::size_t sz); @@ -39,6 +47,13 @@ inline void Pke_Delete(const void *ptr, long count) { return Pke_Delete(ptr, sizeof(T) * count); } + +template <typename T, typename CT> +void Buckets_Init(BucketContainer<T, CT> &bktContainer) { + assert(bktContainer.buckets == nullptr && "bucket container already initialized"); + bktContainer.buckets = Pke_New<T>(bktContainer.incrementer); +} + uint64_t Buckets_NewHandle(std::size_t bucketBytes, uint64_t bucketItemCount, uint64_t &bucketIncrementer, uint64_t &bucketCounter, uint64_t &itemCounter, void*& buckets); template <typename T> inline uint64_t Buckets_NewHandle(uint64_t bucketItemCount, uint64_t &bucketIncrementer, uint64_t &bucketCounter, uint64_t &itemCounter, T*& buckets) { @@ -48,6 +63,11 @@ template <typename T> inline uint64_t Buckets_NewHandle(uint64_t bucketItemCount return handle; } +template <typename T, typename CT> +inline CT Buckets_NewHandle(uint64_t maxBucketItemCount, BucketContainer<T, CT> &bktContainer) { + return Buckets_NewHandle(maxBucketItemCount, bktContainer.incrementer, bktContainer.bucketCounter, bktContainer.itemCounter, bktContainer.buckets); +} + static inline constexpr uint64_t Buckets_GetBucketIndex(uint64_t handle) { return handle & 0x00000000FFFFFFFF; } |
