summaryrefslogtreecommitdiff
path: root/src/asset-manager.cpp
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2023-09-01 14:07:36 -0400
committerJonathan Bradley <jcb@pikum.xyz>2023-09-06 17:24:27 -0400
commit08ff9cd0e2b754caf60aaceedf670b9e6b61d664 (patch)
treef326d228839528cb3c61197073960af3f3c51bed /src/asset-manager.cpp
parentb9f90793c8c0468d5f35d7af976a6e3bcd206aad (diff)
bucket cleanup
Diffstat (limited to 'src/asset-manager.cpp')
-rw-r--r--src/asset-manager.cpp44
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];
}