summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/memory.hpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/memory.hpp b/src/memory.hpp
index 329be51..8e733bf 100644
--- a/src/memory.hpp
+++ b/src/memory.hpp
@@ -13,6 +13,14 @@
struct MemBucket;
+template<typename T, typename CT>
+struct BucketContainer {
+ uint64_t incrementer;
+ CT bucketCounter{0};
+ CT itemCounter{0};
+ T *buckets = nullptr;
+};
+
void *Pke_New(std::size_t sz);
void *Pke_New(std::size_t sz, MemBucket *bkt);
void Pke_Delete(const void *ptr, std::size_t sz);
@@ -39,6 +47,13 @@ inline void Pke_Delete(const void *ptr, long count) {
return Pke_Delete(ptr, sizeof(T) * count);
}
+
+template <typename T, typename CT>
+void Buckets_Init(BucketContainer<T, CT> &bktContainer) {
+ assert(bktContainer.buckets == nullptr && "bucket container already initialized");
+ bktContainer.buckets = Pke_New<T>(bktContainer.incrementer);
+}
+
uint64_t Buckets_NewHandle(std::size_t bucketBytes, uint64_t bucketItemCount, uint64_t &bucketIncrementer, uint64_t &bucketCounter, uint64_t &itemCounter, void*& buckets);
template <typename T> inline uint64_t Buckets_NewHandle(uint64_t bucketItemCount, uint64_t &bucketIncrementer, uint64_t &bucketCounter, uint64_t &itemCounter, T*& buckets) {
@@ -48,6 +63,11 @@ template <typename T> inline uint64_t Buckets_NewHandle(uint64_t bucketItemCount
return handle;
}
+template <typename T, typename CT>
+inline CT Buckets_NewHandle(uint64_t maxBucketItemCount, BucketContainer<T, CT> &bktContainer) {
+ return Buckets_NewHandle(maxBucketItemCount, bktContainer.incrementer, bktContainer.bucketCounter, bktContainer.itemCounter, bktContainer.buckets);
+}
+
static inline constexpr uint64_t Buckets_GetBucketIndex(uint64_t handle) {
return handle & 0x00000000FFFFFFFF;
}