diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2024-01-09 13:37:25 -0500 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2024-01-09 13:37:25 -0500 |
| commit | f947590b909b287c0a724def6ef03937f85c361b (patch) | |
| tree | 7b31fd1c337fdceabb4d4744e1eab0101565a869 /src/asset-manager.cpp | |
| parent | 4676e22a8188de5924f6bcf4eec05fb4257de9cb (diff) | |
refactor and simplify bucketed-array
Diffstat (limited to 'src/asset-manager.cpp')
| -rw-r--r-- | src/asset-manager.cpp | 38 |
1 files changed, 16 insertions, 22 deletions
diff --git a/src/asset-manager.cpp b/src/asset-manager.cpp index f652b64..6ff4600 100644 --- a/src/asset-manager.cpp +++ b/src/asset-manager.cpp @@ -1,6 +1,7 @@ #include "asset-manager.hpp" +#include "bucketed-array.hpp" #include "thread_pool.hpp" #include <chrono> @@ -10,11 +11,7 @@ const PkeHandleItemIndex_T maxAssetItemsPerBucket = 64; -struct AssetBucket { - Asset assets[maxAssetItemsPerBucket]; -}; - -BucketContainer<AssetBucket, AssetHandle> Asset_BucketContainer{}; +BucketContainer<Asset, AssetHandle> Asset_BucketContainer{}; ThreadPoolHandle assetThreadPool = ThreadPoolHandle_MAX; @@ -26,7 +23,7 @@ AssetKey EngineDefinedAssets[EngineDefinedAssetCount] = { }; void AM_Init() { - Buckets_Init(Asset_BucketContainer); + Buckets_Init(Asset_BucketContainer, maxAssetItemsPerBucket); assetThreadPool = PkeThreads_Init(2, 255); AM_Register(EngineDefinedAssets[0], PKE_ASSET_TYPE_SHADER, "assets/shaders/present.vert.spv"); AM_Register(EngineDefinedAssets[1], PKE_ASSET_TYPE_SHADER, "assets/shaders/present.frag.spv"); @@ -57,8 +54,8 @@ inline Asset *AM_Get_Inner(AssetKey key) { count = maxAssetItemsPerBucket; } for (long i = 0; i < count; ++i) { - if (strncmp(key, Asset_BucketContainer.buckets[b].assets[i].key, 16) == 0) { - return &Asset_BucketContainer.buckets[b].assets[i]; + if (strncmp(key, Asset_BucketContainer.buckets[b][i].key, 16) == 0) { + return &Asset_BucketContainer.buckets[b][i]; } } } @@ -73,9 +70,8 @@ AssetHandle AM_Register(AssetKey key, AssetType type, const void *data, int64_t if (searchedAsset != nullptr) { return searchedAsset->handle; } - bool moved; - AssetHandle assetHandle{Buckets_NewHandle<AssetBucket>(maxAssetItemsPerBucket, Asset_BucketContainer, moved)}; - Asset &asset = Asset_BucketContainer.buckets[assetHandle.bucketIndex].assets[assetHandle.itemIndex]; + AssetHandle assetHandle{Buckets_NewHandle(Asset_BucketContainer)}; + Asset &asset = Asset_BucketContainer.buckets[assetHandle.bucketIndex][assetHandle.itemIndex]; new (&asset) Asset{}; asset.handle = assetHandle; strncpy(asset.key, key, AssetKeyLength); @@ -93,9 +89,8 @@ AssetHandle AM_Register(AssetKey key, AssetType type, const char *path) { if (searchedAsset != nullptr) { return searchedAsset->handle; } - bool moved = false; - AssetHandle assetHandle{Buckets_NewHandle<AssetBucket>(maxAssetItemsPerBucket, Asset_BucketContainer, moved)}; - Asset &asset = Asset_BucketContainer.buckets[assetHandle.bucketIndex].assets[assetHandle.itemIndex]; + AssetHandle assetHandle{Buckets_NewHandle(Asset_BucketContainer)}; + Asset &asset = Asset_BucketContainer.buckets[assetHandle.bucketIndex][assetHandle.itemIndex]; new (&asset) Asset{}; asset.handle = assetHandle; strncpy(asset.key, key, AssetKeyLength); @@ -126,9 +121,8 @@ AssetHandle AM_Register(const char *path, AssetType type) { return searchedAsset->handle; } - bool moved = false; - AssetHandle assetHandle{Buckets_NewHandle<AssetBucket>(maxAssetItemsPerBucket, Asset_BucketContainer, moved)}; - Asset &asset = Asset_BucketContainer.buckets[assetHandle.bucketIndex].assets[assetHandle.itemIndex]; + AssetHandle assetHandle{Buckets_NewHandle(Asset_BucketContainer)}; + Asset &asset = Asset_BucketContainer.buckets[assetHandle.bucketIndex][assetHandle.itemIndex]; new (&asset) Asset{}; asset.handle = assetHandle; strncpy(asset.key, assetKey, AssetKeyLength); @@ -149,7 +143,7 @@ AssetHandle AM_Register(const char *path, AssetType type) { void AM_Release(AssetHandle assetHandle) { assert(assetHandle != AssetHandle_MAX); - Asset &asset = Asset_BucketContainer.buckets[assetHandle.bucketIndex].assets[assetHandle.itemIndex]; + Asset &asset = Asset_BucketContainer.buckets[assetHandle.bucketIndex][assetHandle.itemIndex]; asset.referenceCount -= 1; assert(asset.referenceCount >= 0 && "asset was unloaded more times than it was retrieved"); } @@ -157,7 +151,7 @@ void AM_Release(AssetHandle assetHandle) { const Asset *AM_Get(AssetHandle assetHandle) { auto validationResult = ValidateHandle(assetHandle, Asset_BucketContainer.pkeHandle, maxAssetItemsPerBucket); assert(validationResult == 0); - auto &asset = Asset_BucketContainer.buckets[assetHandle.bucketIndex].assets[assetHandle.itemIndex]; + auto &asset = Asset_BucketContainer.buckets[assetHandle.bucketIndex][assetHandle.itemIndex]; if (asset.state == PKE_ASSET_LOADING_STATE_LOADED) { asset.referenceCount += 1; return &asset; @@ -207,7 +201,7 @@ Asset *AM_GetAssets(uint64_t bucketIndex, uint64_t &itemCount) { } else { itemCount = maxAssetItemsPerBucket; } - return Asset_BucketContainer.buckets[bucketIndex].assets; + return Asset_BucketContainer.buckets[bucketIndex]; } void AM_DebugPrint() { @@ -216,7 +210,7 @@ void AM_DebugPrint() { auto &bkt = Asset_BucketContainer.buckets[b]; uint64_t counter = b == Asset_BucketContainer.pkeHandle.bucketIndex ? Asset_BucketContainer.pkeHandle.itemIndex : maxAssetItemsPerBucket; for (uint64_t i = 0; i < counter; ++i) { - auto &asset = bkt.assets[i]; + auto &asset = bkt[i]; /* if (asset.size == 0) continue; @@ -240,7 +234,7 @@ void AM_DebugPrint() { void AM_GC() { for (long b = 0; b <= Asset_BucketContainer.pkeHandle.bucketIndex; ++b) { for (long i = 0; i < Asset_BucketContainer.pkeHandle.itemIndex; ++i) { - Asset &asset = Asset_BucketContainer.buckets[b].assets[i]; + Asset &asset = Asset_BucketContainer.buckets[b][i]; if (asset.referenceCount > 0) continue; if (asset.ptr != nullptr && asset.ptr != CAFE_BABE(void)) { |
