summaryrefslogtreecommitdiff
path: root/src/serialization.cpp
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2025-05-09 20:40:56 -0400
committerJonathan Bradley <jcb@pikum.xyz>2025-05-09 20:40:56 -0400
commitecf91229fb5c9150f2d60d97652bf0024a5c3435 (patch)
treed8fcffa8d436222c4304d9f4d538165ddd734055 /src/serialization.cpp
parent9693ff2d4be85d356e07e3192baaa2262a7140ff (diff)
pke-test-serialization: add more complex tests
Diffstat (limited to 'src/serialization.cpp')
-rw-r--r--src/serialization.cpp49
1 files changed, 26 insertions, 23 deletions
diff --git a/src/serialization.cpp b/src/serialization.cpp
index bc5fb44..ce2dbd3 100644
--- a/src/serialization.cpp
+++ b/src/serialization.cpp
@@ -17,20 +17,22 @@ bool srlztn_kvec_find_first_by_handle(void *handle, void *container) {
srlztn_serialize_helper *pke_serialize_init(pk_membucket *bkt) {
srlztn_serialize_helper *helper = pk_new<srlztn_serialize_helper>(bkt);
- // TODO custom allocator
- // helper->o = {};
helper->bkt = bkt;
helper->kvp_containers.bkt = bkt;
+ pk_arr_reserve(&helper->kvp_containers, 1);
+ pk_arr_reset(&helper->kvp_containers);
return helper;
}
srlztn_deserialize_helper *pke_deserialize_init(pk_membucket *bkt) {
srlztn_deserialize_helper *helper = pk_new<srlztn_deserialize_helper>(bkt);
helper->bkt = bkt;
- // helper->read_line = nullptr;
- // TODO custom allocator
- // helper->mapping = {bkt};
helper->kvp_containers.bkt = bkt;
+ helper->mapping.bkt = bkt;
+ pk_arr_reset(&helper->kvp_containers);
+ pk_arr_reset(&helper->mapping);
+ pk_arr_reserve(&helper->kvp_containers, 1);
+ pk_arr_reserve(&helper->mapping, 1);
return helper;
}
@@ -58,28 +60,19 @@ void pke_deserialize_project_from_stream(std::istream &i, srlztn_deserialize_hel
}
void pke_serialize_scene(srlztn_serialize_helper *h) {
- pke_kve_container kvec = {};
- kvec.bkt = h->bkt;
- kvec.arr.bkt = h->bkt;
- kvec.children.bkt = h->bkt;
- kvec.type_code = cstring_to_pk_cstr(SRLZTN_OBJ_INSTANCE);
pk_handle_bucket_index_T instanceBucketCount = ECS_GetInstances_BucketCount();
for (pk_handle_bucket_index_T b = 0; b < instanceBucketCount; ++b) {
pk_handle_item_index_T count;
auto *instances = ECS_GetInstances(b, count);
for (pk_handle_item_index_T i = 0; i < count; ++i) {
const auto &instance = instances[i];
- if (instance.entHandle == EntityHandle_MAX)
- continue;
if (PK_HAS_FLAG(instance.comp_instance_flags, COMPONENT_INSTANCE_FLAG_DO_NOT_SERIALIZE)) {
continue;
}
pke_serialize_instance(h, &instance);
- pk_arr_append_t(&h->kvp_containers, kvec);
}
}
- kvec.type_code = cstring_to_pk_cstr(SRLZTN_OBJ_CAMERA);
pk_handle_bucket_index_T cameraBucketCount = PkeCamera_GetBucketCount();
for (pk_handle_bucket_index_T b = 0; b < cameraBucketCount; ++b) {
pk_handle_item_index_T count;
@@ -89,7 +82,6 @@ void pke_serialize_scene(srlztn_serialize_helper *h) {
if (cam.handle == CameraHandle_MAX)
continue;
pke_serialize_camera(h, &cam);
- pk_arr_append_t(&h->kvp_containers, kvec);
}
}
}
@@ -99,11 +91,11 @@ void pke_deserialize_scene(srlztn_deserialize_helper *h) {
for (i = 0; i < h->kvp_containers.next; ++i) {
kvec = &h->kvp_containers[i];
- if (strcmp(SRLZTN_OBJ_INSTANCE, kvec->type_code.val) == 0) {
+ if (strstr(kvec->type_code.val, SRLZTN_OBJ_INSTANCE) != nullptr) {
pke_deserialize_instance(h, kvec);
continue;
}
- if (strcmp(SRLZTN_OBJ_CAMERA, kvec->type_code.val) == 0) {
+ if (strstr(kvec->type_code.val, SRLZTN_OBJ_CAMERA) != nullptr) {
pke_deserialize_camera(h, kvec);
continue;
}
@@ -120,16 +112,16 @@ void pke_serialize_scene_to_stream(std::ostream &o, srlztn_serialize_helper *h)
for (i = 0; i < h->kvp_containers.next; ++i) {
kvec = &h->kvp_containers[i];
- o << kvec->type_code.val;
+ o << kvec->type_code.val << ":";
o << std::setw(8) << std::setfill('0') << std::setbase(16) << kvec->srlztn_handle.bucketIndex;
o << SRLZTN_HANDLE_SEPARATOR;
o << std::setw(8) << std::setfill('0') << std::setbase(16) << kvec->srlztn_handle.itemIndex;
o << std::setbase(0) << std::setw(0) << std::endl;
for (k = 0; k < kvec->child_handles.next; ++k) {
o << SRLZTN_CHILD_ID;
- o << std::setw(8) << std::setfill('0') << std::setbase(16) << kvec->srlztn_handle.bucketIndex;
+ o << std::setw(8) << std::setfill('0') << std::setbase(16) << kvec->child_handles[k].bucketIndex;
o << SRLZTN_HANDLE_SEPARATOR;
- o << std::setw(8) << std::setfill('0') << std::setbase(16) << kvec->srlztn_handle.itemIndex;
+ o << std::setw(8) << std::setfill('0') << std::setbase(16) << kvec->child_handles[k].itemIndex;
o << std::setbase(0) << std::setw(0) << std::endl;
}
for (k = 0; k < kvec->arr.next; ++k) {
@@ -139,7 +131,7 @@ void pke_serialize_scene_to_stream(std::ostream &o, srlztn_serialize_helper *h)
o << SRLZTN_OBJ_END << std::endl;
}
- o << SRLZTN_FILE_END << std::endl;
+ o << SRLZTN_FILE_END;
}
void pke_deserialize_scene_from_stream(std::istream &i, srlztn_deserialize_helper *h) {
// 0: new object
@@ -159,6 +151,7 @@ void pke_deserialize_scene_from_stream(std::istream &i, srlztn_deserialize_helpe
kvec.bkt = h->bkt;
kvec.arr.bkt = h->bkt;
kvec.children.bkt = h->bkt;
+ kvec.child_handles.bkt = h->bkt;
i.getline(read_line, read_line_len);
assert(strstr(read_line, SRLZTN_FILE_BEGIN) != 0);
@@ -248,8 +241,15 @@ void pke_deserialize_scene_from_stream(std::istream &i, srlztn_deserialize_helpe
kvec.type_code.val = nullptr;
kvec.type_code.length = 0;
kvec.type_code.reserved = 0;
- pk_arr_reset(&kvec.arr);
- pk_arr_reset(&kvec.children);
+ kvec.children.next = 0;
+ kvec.children.reserved = 0;
+ kvec.children.data = nullptr;
+ kvec.arr.next = 0;
+ kvec.arr.reserved = 0;
+ kvec.arr.data = nullptr;
+ kvec.child_handles.next = 0;
+ kvec.child_handles.reserved = 0;
+ kvec.child_handles.data = nullptr;
}
}
@@ -269,6 +269,9 @@ void pke_deserialize_scene_from_stream(std::istream &i, srlztn_deserialize_helpe
}
}
+ kvec.arr.data = nullptr;
+ kvec.children.data = nullptr;
+ kvec.child_handles.data = nullptr;
pk_delete<char>(read_line, read_line_len, h->bkt);
}