diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2023-12-11 14:46:50 -0500 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2023-12-11 18:56:57 -0500 |
| commit | ba250cc496b2e617823ff8111ef463b6adea27f4 (patch) | |
| tree | dc926851da01b970aca827d6c6ca84b87a7432fa /src/memory.hpp | |
| parent | 8047197b62894cb1f7bb6a6871870e4b91fde992 (diff) | |
replace handles with union struct
Diffstat (limited to 'src/memory.hpp')
| -rw-r--r-- | src/memory.hpp | 23 |
1 files changed, 12 insertions, 11 deletions
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<typename T, typename CT> 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 <typename T, typename CT> void Buckets_Init(BucketContainer<T, CT> &bktContainer) { assert(bktContainer.buckets == nullptr && "bucket container already initialized"); + bktContainer.pkeHandle.hash = 0; bktContainer.buckets = Pke_New<T>(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 <typename T> 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 <typename T> inline PkeHandle Buckets_NewHandle(uint32_t bucketItemCount, uint32_t &bucketIncrementer, uint32_t &bucketCounter, uint32_t &itemCounter, T*& buckets, bool &moved) { void *ptr = reinterpret_cast<void *>(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<T *>(ptr); return handle; } -template <typename T, typename CT> -inline CT Buckets_NewHandle(uint64_t maxBucketItemCount, BucketContainer<T, CT> &bktContainer, bool &moved) { - return Buckets_NewHandle<T>(maxBucketItemCount, bktContainer.incrementer, bktContainer.bucketCounter, bktContainer.itemCounter, bktContainer.buckets, moved); +template <typename T, typename CT = PkeHandle> +inline CT Buckets_NewHandle(uint32_t maxBucketItemCount, BucketContainer<T, CT> &bktContainer, bool &moved) { + CT returnValue{}; + returnValue.hash = Buckets_NewHandle<T>(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 <typename T, typename CT> static inline constexpr void Buckets_Destroy(BucketContainer<T, CT> &bktContainer) { if (bktContainer.buckets == nullptr || bktContainer.buckets == CAFE_BABE(T)) return; - Pke_Delete<T>(bktContainer.buckets, bktContainer.bucketCounter); + Pke_Delete<T>(bktContainer.buckets, bktContainer.pkeHandle.bucketIndex + 1); bktContainer.buckets = CAFE_BABE(T); } |
