From ba250cc496b2e617823ff8111ef463b6adea27f4 Mon Sep 17 00:00:00 2001 From: Jonathan Bradley Date: Mon, 11 Dec 2023 14:46:50 -0500 Subject: replace handles with union struct --- src/memory.hpp | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) (limited to 'src/memory.hpp') diff --git a/src/memory.hpp b/src/memory.hpp index 339d972..41e215f 100644 --- a/src/memory.hpp +++ b/src/memory.hpp @@ -19,9 +19,8 @@ extern const std::size_t MAXIMUM_ALIGNMENT; template struct BucketContainer { - uint64_t incrementer = 2; - CT bucketCounter{0}; - CT itemCounter{0}; + uint32_t incrementer = 2; + CT pkeHandle; T *buckets = nullptr; }; @@ -93,21 +92,23 @@ inline void Pke_Delete(const void *ptr, long count, MemBucket *bucket = nullptr) template void Buckets_Init(BucketContainer &bktContainer) { assert(bktContainer.buckets == nullptr && "bucket container already initialized"); + bktContainer.pkeHandle.hash = 0; bktContainer.buckets = Pke_New(bktContainer.incrementer); } -uint64_t Buckets_NewHandle(std::size_t bucketBytes, std::size_t alignment, uint64_t bucketItemCount, uint64_t &bucketIncrementer, uint64_t &bucketCounter, uint64_t &itemCounter, void*& buckets, bool &moved); - -template inline uint64_t Buckets_NewHandle(uint64_t bucketItemCount, uint64_t &bucketIncrementer, uint64_t &bucketCounter, uint64_t &itemCounter, T*& buckets, bool &moved) { +PkeHandle Buckets_NewHandle(std::size_t bucketBytes, std::size_t alignment, uint32_t bucketItemCount, uint32_t &bucketIncrementer, uint32_t &bucketCounter, uint32_t &itemCounter, void*& buckets, bool &moved); +template inline PkeHandle Buckets_NewHandle(uint32_t bucketItemCount, uint32_t &bucketIncrementer, uint32_t &bucketCounter, uint32_t &itemCounter, T*& buckets, bool &moved) { void *ptr = reinterpret_cast(buckets); - uint64_t handle = Buckets_NewHandle(sizeof(T), alignof(T), bucketItemCount, bucketIncrementer, bucketCounter, itemCounter, ptr, moved); + PkeHandle handle = Buckets_NewHandle(sizeof(T), alignof(T), bucketItemCount, bucketIncrementer, bucketCounter, itemCounter, ptr, moved); buckets = reinterpret_cast(ptr); return handle; } -template -inline CT Buckets_NewHandle(uint64_t maxBucketItemCount, BucketContainer &bktContainer, bool &moved) { - return Buckets_NewHandle(maxBucketItemCount, bktContainer.incrementer, bktContainer.bucketCounter, bktContainer.itemCounter, bktContainer.buckets, moved); +template +inline CT Buckets_NewHandle(uint32_t maxBucketItemCount, BucketContainer &bktContainer, bool &moved) { + CT returnValue{}; + returnValue.hash = Buckets_NewHandle(maxBucketItemCount, bktContainer.incrementer, bktContainer.pkeHandle.bucketIndex, bktContainer.pkeHandle.itemIndex, bktContainer.buckets, moved).hash; + return returnValue; } static inline constexpr uint64_t Buckets_GetBucketIndex(uint64_t handle) { @@ -121,7 +122,7 @@ static inline constexpr uint64_t Buckets_GetItemIndex(uint64_t handle) { template static inline constexpr void Buckets_Destroy(BucketContainer &bktContainer) { if (bktContainer.buckets == nullptr || bktContainer.buckets == CAFE_BABE(T)) return; - Pke_Delete(bktContainer.buckets, bktContainer.bucketCounter); + Pke_Delete(bktContainer.buckets, bktContainer.pkeHandle.bucketIndex + 1); bktContainer.buckets = CAFE_BABE(T); } -- cgit v1.2.3