From 6a3de7eeacc21e2a6ccec853a24c9d0917d274e4 Mon Sep 17 00:00:00 2001 From: Jonathan Bradley Date: Tue, 29 Aug 2023 14:15:10 -0400 Subject: move boilerplate bucket code to memory file --- src/memory.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/memory.cpp') diff --git a/src/memory.cpp b/src/memory.cpp index f919770..7670b2f 100644 --- a/src/memory.cpp +++ b/src/memory.cpp @@ -105,3 +105,23 @@ void pke::Flush() { DestroyBucket(&buckets[i + 1]); } } + +uint64_t Buckets_NewHandle(std::size_t bucketBytes, uint64_t bucketItemCount, uint64_t &bucketIncrementer, uint64_t &bucketCounter, uint64_t &itemCounter, void*& buckets) { + uint64_t newHandle{itemCounter | bucketCounter}; + + itemCounter += uint64_t{1ULL << 32}; + if (itemCounter > uint64_t{(bucketItemCount - 1) << 32}) { + itemCounter = 0ULL; + bucketCounter += 1; + } + if (bucketCounter > bucketIncrementer) { + int64_t newIncrement = bucketIncrementer * 1.5; + char * newBuckets = reinterpret_cast(pke::PkeNew(bucketBytes * newIncrement)); + std::memcpy(newBuckets, buckets, bucketBytes * bucketIncrementer); + pke::PkeDelete(buckets, bucketBytes * bucketIncrementer); + buckets = newBuckets; + bucketIncrementer = newIncrement; + } + + return newHandle; +} -- cgit v1.2.3