diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2023-08-29 14:15:10 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2023-09-06 17:19:09 -0400 |
| commit | 6a3de7eeacc21e2a6ccec853a24c9d0917d274e4 (patch) | |
| tree | 4d79080adda9fed223c1ca0e46f7f57c6b7702ee /src/memory.cpp | |
| parent | 86ece47fd62bbaaf76581828936946555211459b (diff) | |
move boilerplate bucket code to memory file
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; +} |
