summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/asset-manager.cpp3
-rw-r--r--src/ecs.cpp9
-rw-r--r--src/memory.cpp4
-rw-r--r--src/memory.hpp10
-rw-r--r--src/thread_pool.cpp3
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);