diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2023-12-11 14:46:50 -0500 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2023-12-11 18:56:57 -0500 |
| commit | ba250cc496b2e617823ff8111ef463b6adea27f4 (patch) | |
| tree | dc926851da01b970aca827d6c6ca84b87a7432fa /src/asset-manager.cpp | |
| parent | 8047197b62894cb1f7bb6a6871870e4b91fde992 (diff) | |
replace handles with union struct
Diffstat (limited to 'src/asset-manager.cpp')
| -rw-r--r-- | src/asset-manager.cpp | 41 |
1 files changed, 15 insertions, 26 deletions
diff --git a/src/asset-manager.cpp b/src/asset-manager.cpp index d6a14a4..4350e87 100644 --- a/src/asset-manager.cpp +++ b/src/asset-manager.cpp @@ -1,15 +1,13 @@ #include "asset-manager.hpp" -TypeSafeInt_B(AssetHandle); - -const uint64_t maxAssetItemsPerBucket = 256; +const uint32_t maxAssetItemsPerBucket = 256; struct AssetBucket { Asset assets[maxAssetItemsPerBucket]; }; -BucketContainer<AssetBucket, AssetHandle_T> Asset_BucketContainer{}; +BucketContainer<AssetBucket, AssetHandle> Asset_BucketContainer{}; void AM_Init() { Buckets_Init(Asset_BucketContainer); @@ -17,19 +15,17 @@ void AM_Init() { AssetHandle AM_Register_Inner(const void *src, void *dst, int64_t size, const char *key) { bool moved = false; - AssetHandle_T assetHandle_T{Buckets_NewHandle<AssetBucket>(maxAssetItemsPerBucket, Asset_BucketContainer, moved)}; + AssetHandle assetHandle{Buckets_NewHandle<AssetBucket>(maxAssetItemsPerBucket, Asset_BucketContainer, moved)}; if (src != nullptr) { std::memcpy(dst, src, size); } - auto b = Buckets_GetBucketIndex(assetHandle_T); - auto e = Buckets_GetItemIndex(assetHandle_T); - Asset *asset = &Asset_BucketContainer.buckets[b].assets[e]; + Asset *asset = &Asset_BucketContainer.buckets[assetHandle.bucketIndex].assets[assetHandle.itemIndex]; asset->ptr = dst; asset->size = size; int64_t keyLen = std::strlen(key); std::memcpy(asset->key, key, keyLen > 16 ? 16 : keyLen); - return AssetHandle{assetHandle_T}; + return assetHandle; } AssetHandle AM_Register(const void *data, int64_t size, std::size_t alignment, const char *key) { @@ -50,9 +46,7 @@ AssetHandle AM_Register(const char *path) { int64_t pathLen = strlen(path); auto assetHandle = AM_Register_Inner(nullptr, target, 0, path + (pathLen > 16 ? pathLen - 16 : 0)); - auto b = Buckets_GetBucketIndex(static_cast<AssetHandle_T>(assetHandle)); - auto e = Buckets_GetItemIndex(static_cast<AssetHandle_T>(assetHandle)); - Asset *asset = &Asset_BucketContainer.buckets[b].assets[e]; + Asset *asset = &Asset_BucketContainer.buckets[assetHandle.bucketIndex].assets[assetHandle.itemIndex]; file.seekg(0); file.read(static_cast<char *>(asset->ptr), fileSize); file.close(); @@ -61,38 +55,33 @@ AssetHandle AM_Register(const char *path) { } void AM_Destroy(AssetHandle assetHandle) { - AssetHandle_T assetHandle_T = static_cast<AssetHandle_T>(assetHandle); - auto b = Buckets_GetBucketIndex(assetHandle_T); - auto i = Buckets_GetItemIndex(assetHandle_T); - Asset *asset = &Asset_BucketContainer.buckets[b].assets[i]; + assert(assetHandle != AssetHandle_MAX); + Asset *asset = &Asset_BucketContainer.buckets[assetHandle.bucketIndex].assets[assetHandle.itemIndex]; Pke_Delete(asset->ptr, asset->size); asset->size = 0; asset->ptr = CAFE_BABE(void); - auto lastGivenIndex = ((Asset_BucketContainer.itemCounter - (1ULL << 32)) >> 32); - if (i == lastGivenIndex) { - Asset_BucketContainer.itemCounter = lastGivenIndex; + if (assetHandle.itemIndex == Asset_BucketContainer.pkeHandle.itemIndex) { + Asset_BucketContainer.pkeHandle.itemIndex -= 1; } } const Asset *AM_Get(AssetHandle assetHandle) { - AssetHandle_T assetHandle_T = static_cast<AssetHandle_T>(assetHandle); - auto b = Buckets_GetBucketIndex(assetHandle_T); - auto i = Buckets_GetItemIndex(assetHandle_T); - return &Asset_BucketContainer.buckets[b].assets[i]; + assert(assetHandle != AssetHandle_MAX); + return &Asset_BucketContainer.buckets[assetHandle.bucketIndex].assets[assetHandle.itemIndex]; } void AM_DebugPrint() { printf("Asset Manager printout:\n"); - for (uint64_t b = 0; b <= Asset_BucketContainer.bucketCounter; ++b) { + for (uint64_t b = 0; b <= Asset_BucketContainer.pkeHandle.bucketIndex; ++b) { auto &bkt = Asset_BucketContainer.buckets[b]; - long counter = b == Asset_BucketContainer.bucketCounter ? Asset_BucketContainer.itemCounter >> 32 : maxAssetItemsPerBucket; + 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]; /* if (asset.size == 0) continue; */ - printf("-Asset: 0x%016lX\n", b + (i << 32)); + printf("-Asset: 0x%016lX\n", (b << 32) + i); printf("\tkey: %s\n", asset.key); printf("\tsize: %ld\n", asset.size); printf("\tptr %p\n", asset.ptr); |
