summaryrefslogtreecommitdiff
path: root/src/project.cpp
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2025-05-29 16:11:37 -0400
committerJonathan Bradley <jcb@pikum.xyz>2025-05-29 16:11:37 -0400
commitd9dc3559296661249f9e5f1c3d0a8320cbf8fc29 (patch)
tree2a0203b676f15e8933960e786c8181354f73b121 /src/project.cpp
parenta9bc23377bd9193cd3eb3ef2e91431d088d13d5d (diff)
pke: ecs: BucketContainer > pk_bkt_arr_t & cleanup
Diffstat (limited to 'src/project.cpp')
-rw-r--r--src/project.cpp20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/project.cpp b/src/project.cpp
index 289d4b5..546ac8a 100644
--- a/src/project.cpp
+++ b/src/project.cpp
@@ -71,7 +71,7 @@ void Proj_SerializeEntityType(std::ostream &stream, const EntityType &et) {
NULL_CHAR_ARR(handleStr, 23);
NULL_CHAR_ARR(modelAssetKey, AssetKeyLength + 1);
NULL_CHAR_ARR(textureAssetKey, AssetKeyLength + 1);
- snprintf(handleStr, 22, "0x%08X 0x%08X", et.handle.bucketIndex, et.handle.itemIndex);
+ snprintf(handleStr, 22, "0x%08X 0x%08X", et.handle.b, et.handle.i);
snprintf(modelAssetKey, AssetKeyLength + 1, "%s", et.modelAssetKey);
EntityType e{};
if (modelAssetKey[0] != '\0')
@@ -174,7 +174,9 @@ void Proj_DeserializeEntityType(std::istream &stream) {
if (strcmp(PKE_PROJ_FILE_OBJ_END, projReadLine) == 0) {
EntityType *existingPtr = EntityType_FindByTypeCode(et.entityTypeCode.val);
if (existingPtr != nullptr) {
- // TODO leaks et.EntityTypeCode
+ if (et.entityTypeCode.reserved > 0) {
+ pk_delete<char>(et.entityTypeCode.val, et.entityTypeCode.reserved);
+ }
continue;
}
EntityType *etPtr = EntityType_Create(et.uuid);
@@ -209,10 +211,10 @@ void Proj_DeserializeEntityType(std::istream &stream) {
}
if (strstr(projReadLine, PKE_PROJ_FILE_ENTITY_TYPE_ENTITY_TYPE_CODE)) {
uint64_t prefixLen = strlen(PKE_PROJ_FILE_ENTITY_TYPE_ENTITY_TYPE_CODE);
- uint64_t len = strlen(projReadLine + prefixLen) + 1;
- char *val = pk_new<char>(len);
- memset(reinterpret_cast<void *>(val), '\0', len);
- memcpy(val, projReadLine + prefixLen, len);
+ et.entityTypeCode.length = strlen(projReadLine + prefixLen) + 1;
+ et.entityTypeCode.reserved = et.entityTypeCode.length + 1;
+ char *val = pk_new<char>(et.entityTypeCode.reserved);
+ snprintf(val, et.entityTypeCode.reserved, "%s", projReadLine + prefixLen);
et.entityTypeCode.val = val;
continue;
}
@@ -220,8 +222,10 @@ void Proj_DeserializeEntityType(std::istream &stream) {
uint64_t prefixLen = strlen(PKE_PROJ_FILE_ENTITY_TYPE_ENTITY_HANDLE);
// 0x00000000 0x00000000
projReadLine[prefixLen + 10] = '\0';
- STR2NUM_ERROR result1 = str2num(et.handle.bucketIndex, projReadLine + prefixLen + 2, 16);
- STR2NUM_ERROR result2 = str2num(et.handle.itemIndex, projReadLine + prefixLen + 11, 16);
+ unsigned int b, i;
+ STR2NUM_ERROR result1 = str2num(b, projReadLine + prefixLen + 2, 16);
+ STR2NUM_ERROR result2 = str2num(i, projReadLine + prefixLen + 11, 16);
+ et.handle = EntityHandle { b, i };
assert(result1 == STR2NUM_ERROR::SUCCESS);
assert(result2 == STR2NUM_ERROR::SUCCESS);
continue;