diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2023-09-01 10:07:29 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2023-09-06 17:24:27 -0400 |
| commit | 8941504bc66176540f71510f393aeabe382594cb (patch) | |
| tree | 619df02f0f6701d9b6a4e8fd0c4d8aa751679cc7 /src/memory.hpp | |
| parent | 2cce1637acaac4939ded933db509ef12d418d5c7 (diff) | |
add bucket container struct
Diffstat (limited to 'src/memory.hpp')
| -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; } |
