diff options
Diffstat (limited to 'src/bucketed-array.hpp')
| -rw-r--r-- | src/bucketed-array.hpp | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/src/bucketed-array.hpp b/src/bucketed-array.hpp index b40251c..0f8b395 100644 --- a/src/bucketed-array.hpp +++ b/src/bucketed-array.hpp @@ -2,31 +2,33 @@ #define PKE_BUCKETED_ARRAY_HPP #include <cstddef> +#include <cassert> -#include "memory.hpp" +#include "vendor/pk.h" -constexpr PkeHandleBucketIndex_T BucketContainerDefaultBucketCount = 16; -constexpr PkeHandleItemIndex_T BucketContainerDefaultItemCount = 256; +constexpr pk_handle_bucket_index_T BucketContainerDefaultBucketCount = 16; +constexpr pk_handle_item_index_T BucketContainerDefaultItemCount = 256; -template<typename T, typename CT = PkeHandle, PkeHandleBucketIndex_T BKT_CNT = BucketContainerDefaultBucketCount> +template<typename T, typename CT = struct pk_handle, pk_handle_item_index_T BKT_CNT = BucketContainerDefaultBucketCount> struct BucketContainer { CT limits; CT pkeHandle; T* buckets[BKT_CNT]; }; -template<typename T, typename CT, PkeHandleBucketIndex_T BKT_CNT> +template<typename T, typename CT, pk_handle_item_index_T BKT_CNT> void Buckets_Init(BucketContainer<T, CT, BKT_CNT> &bktContainer, size_t maxItemCount = BucketContainerDefaultItemCount) { bktContainer.limits.bucketIndex = BKT_CNT; bktContainer.limits.itemIndex = maxItemCount; - bktContainer.pkeHandle.hash = 0; - for (PkeHandleBucketIndex_T i = 0; i < BKT_CNT; ++i) { + bktContainer.pkeHandle.bucketIndex = 0; + bktContainer.pkeHandle.itemIndex = 0; + for (pk_handle_item_index_T i = 0; i < BKT_CNT; ++i) { bktContainer.buckets[i] = nullptr; } - bktContainer.buckets[0] = Pke_New<T>(maxItemCount); + bktContainer.buckets[0] = pk_new<T>(maxItemCount); } -template<typename T, typename CT, PkeHandleBucketIndex_T BKT_CNT> +template<typename T, typename CT, pk_handle_item_index_T BKT_CNT> inline CT Buckets_NewHandle(BucketContainer<T, CT, BKT_CNT> &bktContainer) { CT returnValue = bktContainer.pkeHandle; bktContainer.pkeHandle.itemIndex += 1; @@ -36,15 +38,15 @@ inline CT Buckets_NewHandle(BucketContainer<T, CT, BKT_CNT> &bktContainer) { assert(bktContainer.pkeHandle.bucketIndex < bktContainer.limits.bucketIndex); } if (bktContainer.pkeHandle.itemIndex == 0) { - bktContainer.buckets[bktContainer.pkeHandle.bucketIndex] = Pke_New<T>(bktContainer.limits.itemIndex); + bktContainer.buckets[bktContainer.pkeHandle.bucketIndex] = pk_new<T>(bktContainer.limits.itemIndex); } return returnValue; } -template<typename T, typename CT, PkeHandleBucketIndex_T BKT_CNT> +template<typename T, typename CT, pk_handle_item_index_T BKT_CNT> static inline constexpr void Buckets_Destroy(BucketContainer<T, CT, BKT_CNT> &bktContainer) { - for (PkeHandleBucketIndex_T i = 0; i <= bktContainer.pkeHandle.bucketIndex; ++i) { - Pke_Delete<T>(bktContainer.buckets[i], bktContainer.limits.itemIndex); + for (pk_handle_item_index_T i = 0; i <= bktContainer.pkeHandle.bucketIndex; ++i) { + pk_delete<T>(bktContainer.buckets[i], bktContainer.limits.itemIndex); bktContainer.buckets[i] = CAFE_BABE(T); } } |
