diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2025-05-06 13:12:24 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2025-05-06 13:12:24 -0400 |
| commit | 32968050f0b34fdabfcc2a4fb5601d4be361bbd2 (patch) | |
| tree | acef384a2156a16d4d506c37f13f79d454a4a6e9 /src/serialization.hpp | |
| parent | ef37d054dfe5812efa9eefb4b9b18621fdabac25 (diff) | |
pke: major serialization refactor, first-pass
Diffstat (limited to 'src/serialization.hpp')
| -rw-r--r-- | src/serialization.hpp | 149 |
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 */ |
