diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2023-09-01 14:07:36 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2023-09-06 17:24:27 -0400 |
| commit | 08ff9cd0e2b754caf60aaceedf670b9e6b61d664 (patch) | |
| tree | f326d228839528cb3c61197073960af3f3c51bed /src/asset-manager.cpp | |
| parent | b9f90793c8c0468d5f35d7af976a6e3bcd206aad (diff) | |
bucket cleanup
Diffstat (limited to 'src/asset-manager.cpp')
| -rw-r--r-- | src/asset-manager.cpp | 44 |
1 files changed, 23 insertions, 21 deletions
diff --git a/src/asset-manager.cpp b/src/asset-manager.cpp index b980154..e608dec 100644 --- a/src/asset-manager.cpp +++ b/src/asset-manager.cpp @@ -3,33 +3,32 @@ TypeSafeInt_B(AssetHandle); +const uint64_t maxAssetItemsPerBucket = 256; + struct AssetBucket { - Asset assets[256]; + Asset assets[maxAssetItemsPerBucket]; }; -uint64_t assetBucketIncrementer = 2; -AssetHandle_T assetBucketCounter{0}; -AssetHandle_T assetCounter{0}; -AssetBucket *assetBuckets = nullptr; +BucketContainer<AssetBucket, AssetHandle_T> Asset_BucketContainer{}; void AM_Init() { - assetBuckets = Pke_New<AssetBucket>(assetBucketIncrementer); + Buckets_Init(Asset_BucketContainer); } AssetHandle AM_Register_Inner(const void *src, void *dst, int64_t size, const char *key) { - - AssetHandle_T assetHandle_T{Buckets_NewHandle<AssetBucket>(256ULL, assetBucketIncrementer, assetBucketCounter, assetCounter, assetBuckets)}; - AssetHandle assetHandle{assetHandle_T}; + AssetHandle_T assetHandle_T{Buckets_NewHandle<AssetBucket>(maxAssetItemsPerBucket, Asset_BucketContainer)}; if (src != nullptr) { std::memcpy(dst, src, size); } - Asset *asset = &assetBuckets[Buckets_GetBucketIndex(assetHandle_T)].assets[Buckets_GetItemIndex(assetHandle_T)]; + auto b = Buckets_GetBucketIndex(assetHandle_T); + auto e = Buckets_GetItemIndex(assetHandle_T); + Asset *asset = &Asset_BucketContainer.buckets[b].assets[e]; asset->ptr = dst; asset->size = size; int64_t keyLen = std::strlen(key); std::memcpy(asset->key, key, keyLen > 16 ? 16 : keyLen); - return assetHandle; + return AssetHandle{assetHandle_T}; } AssetHandle AM_Register(const void *data, int64_t size, const char *key) { @@ -50,8 +49,9 @@ 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)); - AssetHandle_T assetHandle_T = static_cast<AssetHandle_T>(assetHandle); - Asset *asset = &assetBuckets[Buckets_GetBucketIndex(assetHandle_T)].assets[Buckets_GetItemIndex(assetHandle_T)]; + 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]; file.seekg(0); file.read(static_cast<char *>(asset->ptr), fileSize); file.close(); @@ -61,21 +61,23 @@ AssetHandle AM_Register(const char *path) { void AM_Destroy(AssetHandle assetHandle) { AssetHandle_T assetHandle_T = static_cast<AssetHandle_T>(assetHandle); - auto itemIndex = Buckets_GetItemIndex(assetHandle_T); - Asset *asset = &assetBuckets[Buckets_GetBucketIndex(assetHandle_T)].assets[itemIndex]; + auto b = Buckets_GetBucketIndex(assetHandle_T); + auto i = Buckets_GetItemIndex(assetHandle_T); + Asset *asset = &Asset_BucketContainer.buckets[b].assets[i]; Pke_Delete(asset->ptr, asset->size); - for (long i = 0; i < 16; ++i) { - asset->key[i] = 0; - } + memset(asset->key, '\0', 16); asset->size = 0; asset->ptr = CAFE_BABE(void); - if (itemIndex == assetCounter - (1ULL << 32)) { - assetCounter -= (1ULL << 32); + auto lastGivenIndex = Asset_BucketContainer.itemCounter - (1ULL << 32); + if (i == lastGivenIndex) { + Asset_BucketContainer.itemCounter = lastGivenIndex; } } const Asset *AM_Get(AssetHandle assetHandle) { AssetHandle_T assetHandle_T = static_cast<AssetHandle_T>(assetHandle); - return &assetBuckets[Buckets_GetBucketIndex(assetHandle_T)].assets[Buckets_GetItemIndex(assetHandle_T)]; + auto b = Buckets_GetBucketIndex(assetHandle_T); + auto i = Buckets_GetItemIndex(assetHandle_T); + return &Asset_BucketContainer.buckets[b].assets[i]; } |
