summaryrefslogtreecommitdiff
path: root/src/memory.hpp
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2023-12-11 14:46:50 -0500
committerJonathan Bradley <jcb@pikum.xyz>2023-12-11 18:56:57 -0500
commitba250cc496b2e617823ff8111ef463b6adea27f4 (patch)
treedc926851da01b970aca827d6c6ca84b87a7432fa /src/memory.hpp
parent8047197b62894cb1f7bb6a6871870e4b91fde992 (diff)
replace handles with union struct
Diffstat (limited to 'src/memory.hpp')
-rw-r--r--src/memory.hpp23
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);
}