diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2023-12-06 15:27:42 -0500 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2023-12-06 15:27:42 -0500 |
| commit | 8629b2497b7cb453d1e4a3ed6897cfaf8a771863 (patch) | |
| tree | 8003ca707705e2053bb2af84cfdb172cb03e3468 /src | |
| parent | 837b2c91076b52d10438a7c6a564e613436ced48 (diff) | |
expose if the contents of a bucket were moved
Diffstat (limited to 'src')
| -rw-r--r-- | src/asset-manager.cpp | 3 | ||||
| -rw-r--r-- | src/ecs.cpp | 9 | ||||
| -rw-r--r-- | src/memory.cpp | 4 | ||||
| -rw-r--r-- | src/memory.hpp | 10 | ||||
| -rw-r--r-- | src/thread_pool.cpp | 3 |
5 files changed, 18 insertions, 11 deletions
diff --git a/src/asset-manager.cpp b/src/asset-manager.cpp index 5ff25f3..d6a14a4 100644 --- a/src/asset-manager.cpp +++ b/src/asset-manager.cpp @@ -16,7 +16,8 @@ void AM_Init() { } AssetHandle AM_Register_Inner(const void *src, void *dst, int64_t size, const char *key) { - AssetHandle_T assetHandle_T{Buckets_NewHandle<AssetBucket>(maxAssetItemsPerBucket, Asset_BucketContainer)}; + bool moved = false; + AssetHandle_T assetHandle_T{Buckets_NewHandle<AssetBucket>(maxAssetItemsPerBucket, Asset_BucketContainer, moved)}; if (src != nullptr) { std::memcpy(dst, src, size); diff --git a/src/ecs.cpp b/src/ecs.cpp index c892f84..6556bd2 100644 --- a/src/ecs.cpp +++ b/src/ecs.cpp @@ -76,7 +76,8 @@ Entity *ECS_GetEntities(uint64_t bucketIndex, uint64_t &itemCount) { } EntityHandle ECS_CreateEntity_Inner(EntityHandle parentEntHandle) { - EntityHandle_T entityHandle_T{Buckets_NewHandle<EntityBucket>(maxBucketItemCount, Entities_BucketContainer)}; + bool moved; + EntityHandle_T entityHandle_T{Buckets_NewHandle<EntityBucket>(maxBucketItemCount, Entities_BucketContainer, moved)}; EntityHandle entityHandle{entityHandle_T}; auto b = Buckets_GetBucketIndex(static_cast<EntityHandle_T>(entityHandle)); @@ -353,7 +354,8 @@ CompGrBinds &ECS_CreateGrBinds(EntityHandle entHandle) { assert(ent->grBindsHandle == GrBindsHandle_MAX); - GrBindsHandle_T newHandle{Buckets_NewHandle(maxBucketItemCount, Comp_GrBinds_BucketContainer)}; + bool moved; + GrBindsHandle_T newHandle{Buckets_NewHandle(maxBucketItemCount, Comp_GrBinds_BucketContainer, moved)}; ent->grBindsHandle = GrBindsHandle{newHandle}; auto b = Buckets_GetBucketIndex(newHandle); auto i = Buckets_GetItemIndex(newHandle); @@ -406,7 +408,8 @@ CompInstance &ECS_CreateInstance(EntityHandle entHandle, EntityHandle entityType assert(ent->grBindsHandle == GrBindsHandle_MAX); assert(entTypeEnt->grBindsHandle != GrBindsHandle_MAX); - InstanceHandle_T newHandle{Buckets_NewHandle(maxBucketItemCount, Comp_Instance_BucketContainer)}; + bool moved; + InstanceHandle_T newHandle{Buckets_NewHandle(maxBucketItemCount, Comp_Instance_BucketContainer, moved)}; ent->instanceHandle = InstanceHandle{newHandle}; GrBindsHandle_T grBindsHandle_t{static_cast<GrBindsHandle_T>(entTypeEnt->grBindsHandle)}; diff --git a/src/memory.cpp b/src/memory.cpp index f2b2ee3..9d235db 100644 --- a/src/memory.cpp +++ b/src/memory.cpp @@ -344,7 +344,8 @@ void Pke_MemoryFlush() { } } -uint64_t Buckets_NewHandle(std::size_t bucketBytes, std::size_t alignment, uint64_t bucketItemCount, uint64_t &bucketIncrementer, uint64_t &bucketCounter, uint64_t &itemCounter, void*& buckets) { +uint64_t Buckets_NewHandle(std::size_t bucketBytes, std::size_t alignment, uint64_t bucketItemCount, uint64_t &bucketIncrementer, uint64_t &bucketCounter, uint64_t &itemCounter, void*& buckets, bool &moved) { + moved = false; uint64_t newHandle{itemCounter | bucketCounter}; std::size_t calculatedAlignment = alignment < MINIMUM_ALIGNMENT ? MINIMUM_ALIGNMENT : alignment; @@ -355,6 +356,7 @@ uint64_t Buckets_NewHandle(std::size_t bucketBytes, std::size_t alignment, uint6 bucketCounter += 1; } if (bucketCounter > bucketIncrementer) { + moved = true; int64_t newIncrement = bucketIncrementer * 1.5; char * newBuckets = reinterpret_cast<char *>(Pke_New(bucketBytes * newIncrement, calculatedAlignment)); std::memcpy(newBuckets, buckets, bucketBytes * bucketIncrementer); diff --git a/src/memory.hpp b/src/memory.hpp index 0512118..339d972 100644 --- a/src/memory.hpp +++ b/src/memory.hpp @@ -96,18 +96,18 @@ void Buckets_Init(BucketContainer<T, CT> &bktContainer) { bktContainer.buckets = Pke_New<T>(bktContainer.incrementer); } -uint64_t Buckets_NewHandle(std::size_t bucketBytes, std::size_t alignment, uint64_t bucketItemCount, uint64_t &bucketIncrementer, uint64_t &bucketCounter, uint64_t &itemCounter, void*& buckets); +uint64_t Buckets_NewHandle(std::size_t bucketBytes, std::size_t alignment, uint64_t bucketItemCount, uint64_t &bucketIncrementer, uint64_t &bucketCounter, uint64_t &itemCounter, void*& buckets, bool &moved); -template <typename T> inline uint64_t Buckets_NewHandle(uint64_t bucketItemCount, uint64_t &bucketIncrementer, uint64_t &bucketCounter, uint64_t &itemCounter, T*& buckets) { +template <typename T> inline uint64_t Buckets_NewHandle(uint64_t bucketItemCount, uint64_t &bucketIncrementer, uint64_t &bucketCounter, uint64_t &itemCounter, T*& buckets, bool &moved) { void *ptr = reinterpret_cast<void *>(buckets); - uint64_t handle = Buckets_NewHandle(sizeof(T), alignof(T), bucketItemCount, bucketIncrementer, bucketCounter, itemCounter, ptr); + uint64_t handle = Buckets_NewHandle(sizeof(T), alignof(T), bucketItemCount, bucketIncrementer, bucketCounter, itemCounter, ptr, moved); buckets = reinterpret_cast<T *>(ptr); return handle; } template <typename T, typename CT> -inline CT Buckets_NewHandle(uint64_t maxBucketItemCount, BucketContainer<T, CT> &bktContainer) { - return Buckets_NewHandle<T>(maxBucketItemCount, bktContainer.incrementer, bktContainer.bucketCounter, bktContainer.itemCounter, bktContainer.buckets); +inline CT Buckets_NewHandle(uint64_t maxBucketItemCount, BucketContainer<T, CT> &bktContainer, bool &moved) { + return Buckets_NewHandle<T>(maxBucketItemCount, bktContainer.incrementer, bktContainer.bucketCounter, bktContainer.itemCounter, bktContainer.buckets, moved); } static inline constexpr uint64_t Buckets_GetBucketIndex(uint64_t handle) { diff --git a/src/thread_pool.cpp b/src/thread_pool.cpp index d3073dc..15cc4e9 100644 --- a/src/thread_pool.cpp +++ b/src/thread_pool.cpp @@ -117,7 +117,8 @@ ThreadPoolHandle PkeThreads_Init(uint8_t threadCount, uint8_t maxQueueCount, Mem Buckets_Init(ThreadPool_BucketContainer); } assert(threadCount > 0); - ThreadPoolHandle_T newHandle{Buckets_NewHandle(255, ThreadPool_BucketContainer)}; + bool moved; + ThreadPoolHandle_T newHandle{Buckets_NewHandle(255, ThreadPool_BucketContainer, moved)}; auto b = Buckets_GetBucketIndex(newHandle); auto i = Buckets_GetItemIndex(newHandle); |
