diff options
Diffstat (limited to 'src/memory.cpp')
| -rw-r--r-- | src/memory.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
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<char *>(pke::PkeNew(bucketBytes * newIncrement)); + std::memcpy(newBuckets, buckets, bucketBytes * bucketIncrementer); + pke::PkeDelete(buckets, bucketBytes * bucketIncrementer); + buckets = newBuckets; + bucketIncrementer = newIncrement; + } + + return newHandle; +} |
