diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2025-05-09 20:40:56 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2025-05-09 20:40:56 -0400 |
| commit | ecf91229fb5c9150f2d60d97652bf0024a5c3435 (patch) | |
| tree | d8fcffa8d436222c4304d9f4d538165ddd734055 /src/serialization.cpp | |
| parent | 9693ff2d4be85d356e07e3192baaa2262a7140ff (diff) | |
pke-test-serialization: add more complex tests
Diffstat (limited to 'src/serialization.cpp')
| -rw-r--r-- | src/serialization.cpp | 49 |
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); } |
