summaryrefslogtreecommitdiff
path: root/src/serialization.hpp
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2025-05-06 13:12:24 -0400
committerJonathan Bradley <jcb@pikum.xyz>2025-05-06 13:12:24 -0400
commit32968050f0b34fdabfcc2a4fb5601d4be361bbd2 (patch)
treeacef384a2156a16d4d506c37f13f79d454a4a6e9 /src/serialization.hpp
parentef37d054dfe5812efa9eefb4b9b18621fdabac25 (diff)
pke: major serialization refactor, first-pass
Diffstat (limited to 'src/serialization.hpp')
-rw-r--r--src/serialization.hpp149
1 files changed, 85 insertions, 64 deletions
diff --git a/src/serialization.hpp b/src/serialization.hpp
index b6d2bfa..3b74428 100644
--- a/src/serialization.hpp
+++ b/src/serialization.hpp
@@ -1,63 +1,74 @@
#ifndef PKE_SERIALIZATION_HPP
#define PKE_SERIALIZATION_HPP
+#include "kve.hpp"
#include "pk.h"
#include "components.hpp"
#include "scene-types.hpp"
-inline const char* const SRLZTN_FILE_BEGIN = ":PKFB:";
-inline const char* const SRLZTN_FILE_END = ":PKFE:";
-inline const char* const SRLZTN_FILE_VERSION = ":0:";
-inline const char* const SRLZTN_FILE_NUM_SEPARATOR = ";";
-
-inline const char* const SRLZTN_OBJ_END = "";
-inline const char* const SRLZTN_OBJ_INSTANCE = "Instance:";
-inline const char* const SRLZTN_OBJ_CAMERA = "Camera:";
-inline const char* const SRLZTN_OBJ_UI_BOX = "Camera:";
-
-inline const char* const SRLZTN_POSROT_POS = "Position: ";
-inline const char* const SRLZTN_POSROT_ROT = "Rotation: ";
-inline const char* const SRLZTN_POSROT_SCALE = "Scale: ";
-
-inline const char* const SRLZTN_INSTANCE_COMPONENT_HANDLE = "InstanceHandle: ";
-inline const char* const SRLZTN_INSTANCE_COMPONENT_ENTITY_HANDLE = "EntityHandle: ";
-inline const char* const SRLZTN_INSTANCE_COMPONENT_ENTITY_TYPE_CODE = "EntityTypeCode: ";
-inline const char* const SRLZTN_INSTANCE_COMPONENT_UUID = "UUID: ";
-inline const char* const SRLZTN_INSTANCE_COMPONENT_MASS = "Mass: ";
-inline const char* const SRLZTN_INSTANCE_COMPONENT_COLLISION_LAYER = "CollisionLayer: ";
-inline const char* const SRLZTN_INSTANCE_COMPONENT_COLLISION_MASK = "CollisionMask: ";
-inline const char* const SRLZTN_INSTANCE_COMPONENT_COLLISION_CB_SIGNATURE = "CollisionCBSignature: ";
-
-inline const char* const SRLZTN_CAMERA_TYPE = "Type: ";
-inline const char* const SRLZTN_CAMERA_UUID = "UUID: ";
-inline const char* const SRLZTN_CAMERA_ORIENTATION = "Orientation: ";
-inline const char* const SRLZTN_CAMERA_TARGET_INSTANCE_UUID = "TargetUUID: ";
-inline const char* const SRLZTN_CAMERA_IS_PRIMARY = "IsPrimary: ";
-
-inline const char* const SRLZTN_UI_BOX_UUID = "UUID: ";
-inline const char* const SRLZTN_UI_BOX_PARENT_UUID = "ParentUUID: ";
-inline const char* const SRLZTN_UI_BOX_FLAGS = "Flags: ";
-inline const char* const SRLZTN_UI_BOX_POS_TOP_LEFT_X = "PosTopLeftX: ";
-inline const char* const SRLZTN_UI_BOX_POS_TOP_LEFT_Y = "PosTopLeftY: ";
-inline const char* const SRLZTN_UI_BOX_MIN_WIDTH = "MinWidthX: ";
-inline const char* const SRLZTN_UI_BOX_MIN_HEIGHT = "MinWidthY: ";
-inline const char* const SRLZTN_UI_BOX_MAX_WIDTH = "MaxWidthX: ";
-inline const char* const SRLZTN_UI_BOX_MAX_HEIGHT = "MaxWidthY: ";
-inline const char* const SRLZTN_UI_BOX_FLEX_WEIGHT = "FlexWeight: ";
-inline const char* const SRLZTN_UI_BOX_TYPE = "Type: ";
-inline const char* const SRLZTN_UI_BOX_FLEX_DIRECTION = "FlexDirection: ";
-inline const char* const SRLZTN_UI_BOX_LAYER = "Layer: ";
-inline const char* const SRLZTN_UI_BOX_DATA_TEXT_FONT_RENDER_UUID = "FontRenderUUID: ";
-
-inline const char* const SRLZTN_UI_FONT_RENDER_UUID = "UUID: ";
-inline const char* const SRLZTN_UI_FONT_RENDER_TEXT_BEGIN = "TextBegin::";
-inline const char* const SRLZTN_UI_FONT_RENDER_TEXT_END = "::TextEnd";
-inline const char* const SRLZTN_UI_FONT_RENDER_SETTINGS_CHAR_SCALE = "CharScale";
-inline const char* const SRLZTN_UI_FONT_RENDER_SETTINGS_LINE_HEIGHT_SCALE = "LineHeightScale";
-inline const char* const SRLZTN_UI_FONT_RENDER_SETTINGS_CHAR_SPACING_SCALE = "CharSpacingScale";
-inline const char* const SRLZTN_UI_FONT_RENDER_SETTINGS_SURFACE_AREA_SIZE = "SurfaceAreaSize";
-inline const char* const SRLZTN_UI_FONT_RENDER_SETTINGS_SURFACE_AREA_POS = "SurfaceAreaPos";
-inline const char* const SRLZTN_UI_FONT_RENDER_SETTINGS_SURFACE_AREA_FLAGS = "SurfaceAreaFlags";
+#define iccsc inline const char* const
+
+iccsc SRLZTN_FILE_BEGIN = ":PKFB:";
+iccsc SRLZTN_FILE_END = ":PKFE:";
+iccsc SRLZTN_FILE_VERSION = ":0:";
+
+iccsc SRLZTN_NUM_SEPARATOR = ";";
+iccsc SRLZTN_HANDLE_SEPARATOR = "!";
+iccsc SRLZTN_KVE_END = "";
+iccsc SRLZTN_MULTILINE_END = ":MULTILINE_END:";
+iccsc SRLZTN_CHILD_ID = "ChildId:";
+
+iccsc SRLZTN_OBJ_END = "";
+iccsc SRLZTN_OBJ_INSTANCE_POSITION = "InstPos:";
+iccsc SRLZTN_OBJ_INSTANCE = "Instance:";
+iccsc SRLZTN_OBJ_CAMERA = "Camera:";
+iccsc SRLZTN_OBJ_UI_BOX = "UIBox:";
+iccsc SRLZTN_OBJ_FONT_RENDER = "FontRender:";
+iccsc SRLZTN_OBJ_FONT_RENDER_SETTINGS = "FontRenderSettings:";
+iccsc SRLZTN_OBJ_UI_BOX_TYPE_DATA = "UIBoxTypeData:";
+
+iccsc SRLZTN_POSROT_POS = "Position:";
+iccsc SRLZTN_POSROT_ROT = "Rotation:";
+iccsc SRLZTN_POSROT_SCALE = "Scale:";
+
+iccsc SRLZTN_INSTANCE_COMPONENT_HANDLE = "InstanceHandle:";
+iccsc SRLZTN_INSTANCE_COMPONENT_ENTITY_HANDLE = "EntityHandle:";
+iccsc SRLZTN_INSTANCE_COMPONENT_ENTITY_TYPE_CODE = "EntityTypeCode:";
+iccsc SRLZTN_INSTANCE_COMPONENT_UUID = "UUID:";
+iccsc SRLZTN_INSTANCE_COMPONENT_MASS = "Mass:";
+iccsc SRLZTN_INSTANCE_COMPONENT_COLLISION_LAYER = "CollisionLayer:";
+iccsc SRLZTN_INSTANCE_COMPONENT_COLLISION_MASK = "CollisionMask:";
+iccsc SRLZTN_INSTANCE_COMPONENT_COLLISION_CB_SIGNATURE = "CollisionCBSignature:";
+
+iccsc SRLZTN_CAMERA_TYPE = "Type:";
+iccsc SRLZTN_CAMERA_UUID = "UUID:";
+iccsc SRLZTN_CAMERA_ORIENTATION = "Orientation:";
+iccsc SRLZTN_CAMERA_TARGET_INSTANCE_UUID = "TargetUUID:";
+iccsc SRLZTN_CAMERA_IS_PRIMARY = "IsPrimary:";
+
+iccsc SRLZTN_UI_BOX_UUID = "UUID:";
+iccsc SRLZTN_UI_BOX_PARENT_UUID = "ParentUUID:";
+iccsc SRLZTN_UI_BOX_FLAGS = "Flags:";
+iccsc SRLZTN_UI_BOX_POS_TOP_LEFT_X = "PosTopLeftX:";
+iccsc SRLZTN_UI_BOX_POS_TOP_LEFT_Y = "PosTopLeftY:";
+iccsc SRLZTN_UI_BOX_MIN_WIDTH = "MinWidthX:";
+iccsc SRLZTN_UI_BOX_MIN_HEIGHT = "MinWidthY:";
+iccsc SRLZTN_UI_BOX_MAX_WIDTH = "MaxWidthX:";
+iccsc SRLZTN_UI_BOX_MAX_HEIGHT = "MaxWidthY:";
+iccsc SRLZTN_UI_BOX_FLEX_WEIGHT = "FlexWeight:";
+iccsc SRLZTN_UI_BOX_TYPE = "Type:";
+iccsc SRLZTN_UI_BOX_FLEX_DIRECTION = "FlexDirection:";
+iccsc SRLZTN_UI_BOX_LAYER = "Layer:";
+iccsc SRLZTN_UI_BOX_DATA_TEXT_FONT_RENDER_UUID = "FontRenderUUID:";
+
+iccsc SRLZTN_UI_FONT_RENDER_UUID = "UUID:";
+iccsc SRLZTN_UI_FONT_RENDER_TEXT_BEGIN = "TextBegin::";
+iccsc SRLZTN_UI_FONT_RENDER_SETTINGS_CHAR_SCALE = "CharScale:";
+iccsc SRLZTN_UI_FONT_RENDER_SETTINGS_LINE_HEIGHT_SCALE = "LineHeightScale:";
+iccsc SRLZTN_UI_FONT_RENDER_SETTINGS_CHAR_SPACING_SCALE = "CharSpacingScale:";
+iccsc SRLZTN_UI_FONT_RENDER_SETTINGS_SURFACE_AREA_SIZE = "SurfaceAreaSize:";
+iccsc SRLZTN_UI_FONT_RENDER_SETTINGS_SURFACE_AREA_POS = "SurfaceAreaPos:";
+iccsc SRLZTN_UI_FONT_RENDER_SETTINGS_SURFACE_AREA_FLAGS = "SurfaceAreaFlags:";
struct srlztn_instance_mapping {
pk_uuid serialized_uuid = pk_uuid_zed;
@@ -67,32 +78,42 @@ struct srlztn_instance_mapping {
struct srlztn_serialize_helper {
pk_membucket *bkt;
- std::ostringstream o;
+ // std::ostringstream o;
+ pk_arr_t<pke_kve_container> kvp_containers;
+ pk_handle handle_head;
};
struct srlztn_deserialize_helper {
- size_t read_line_len = 256;
- pke_scene *scene;
pk_membucket *bkt;
- char *read_line;
- std::istream *i;
+ // std::istream *i;
+ // size_t read_line_len = 256;
+ pke_scene *scene;
+ // char *read_line;
pk_arr_t<srlztn_instance_mapping> mapping;
+ pk_arr_t<pke_kve_container> kvp_containers;
};
bool srlztn_mapping_find_first_handle_by_uuid(void *handle, void *mapping);
+bool srlztn_kvec_find_first_by_handle(void *handle, void *container);
srlztn_serialize_helper *pke_serialize_init(pk_membucket *bkt);
srlztn_deserialize_helper *pke_deserialize_init(pk_membucket *bkt);
void pke_serialize_teardown(srlztn_serialize_helper *helper);
void pke_deserialize_teardown(srlztn_deserialize_helper *helper);
-void pke_serialize_file_project(srlztn_serialize_helper *helper);
-void pke_deserialize_file_project(srlztn_deserialize_helper *helper);
+void pke_serialize_project(srlztn_serialize_helper *helper);
+void pke_deserialize_project(srlztn_deserialize_helper *helper);
+void pke_serialize_project_to_stream(std::ostream &o, srlztn_serialize_helper *helper);
+void pke_deserialize_project_from_stream(std::istream &i, srlztn_deserialize_helper *helper);
-void pke_serialize_file_scene(srlztn_serialize_helper *helper);
-void pke_deserialize_file_scene(srlztn_deserialize_helper *helper);
+void pke_serialize_scene(srlztn_serialize_helper *helper);
+void pke_deserialize_scene(srlztn_deserialize_helper *helper);
+void pke_serialize_scene_to_stream(std::ostream &o, srlztn_serialize_helper *helper);
+void pke_deserialize_scene_from_stream(std::istream &i, srlztn_deserialize_helper *helper);
-void pke_serialize_file_level(srlztn_serialize_helper *helper);
-void pke_deserialize_file_level(srlztn_deserialize_helper *helper);
+void pke_serialize_level(srlztn_serialize_helper *helper);
+void pke_deserialize_level(srlztn_deserialize_helper *helper);
+void pke_serialize_level_to_stream(std::ostream &o, srlztn_serialize_helper *helper);
+void pke_deserialize_level_from_stream(std::istream &i, srlztn_deserialize_helper *helper);
#endif /* PKE_SERIALIZATION_HPP */