Files
Juliet/Juliet/include/Core/Common/serialization.h
T

104 lines
4.9 KiB
C

#pragma once
#include <Juliet.h>
#include <Core/Common/CRC32.h>
#include <Core/Common/String.h>
#include <Core/HAL/IO/IOStream.h>
#include <Core/Math/Vector.h>
typedef struct IOStream IOStream;
typedef struct Arena Arena;
typedef struct ArchivePropertyNode ArchivePropertyNode;
typedef struct ParsedArchive ParsedArchive;
typedef struct Archive Archive;
struct ArchivePropertyNode
{
String key;
String value;
uint32 key_crc;
bool8 consumed;
};
struct ParsedArchive
{
ArchivePropertyNode* nodes;
uint32 property_count;
};
struct Archive
{
Arena* arena;
bool8 loading;
ParsedArchive base;
IOStream* stream;
void* base_ptr;
index_t offset;
};
JULIET_API void serialize_bytes(Archive* ar, void* data, size_t size);
#define serialize_elem(ar, val) serialize_bytes((ar), &(val), sizeof(val))
JULIET_API ParsedArchive tokenize_archive(Arena* arena, ByteBuffer file_buffer);
JULIET_API ArchivePropertyNode* find_property(ParsedArchive* archive, uint32 property_crc);
JULIET_API void write_property_header(Archive* archive, String property_name);
JULIET_API bool8 read_prop_str(Archive* ar, String value_raw, String* value);
JULIET_API void write_str(IOStream* stream, String value);
JULIET_API bool8 read_f32(const char* buffer, float* value, const char** end);
JULIET_API void write_f32(IOStream* stream, float value);
JULIET_API bool8 read_i8(const char* buffer, int8* value);
JULIET_API void write_i8(IOStream* stream, int8 value);
JULIET_API bool8 read_i16(const char* buffer, int16* value);
JULIET_API void write_i16(IOStream* stream, int16 value);
JULIET_API bool8 read_i32(const char* buffer, int32* value);
JULIET_API void write_i32(IOStream* stream, int32 value);
JULIET_API bool8 read_i64(const char* buffer, int64* value);
JULIET_API void write_i64(IOStream* stream, int64 value);
JULIET_API bool8 read_u8(const char* buffer, uint8* value);
JULIET_API void write_u8(IOStream* stream, uint8 value);
JULIET_API bool8 read_u16(const char* buffer, uint16* value);
JULIET_API void write_u16(IOStream* stream, uint16 value);
JULIET_API bool8 read_u32(const char* buffer, uint32* value);
JULIET_API void write_u32(IOStream* stream, uint32 value);
JULIET_API bool8 read_u64(const char* buffer, uint64* value);
JULIET_API void write_u64(IOStream* stream, uint64 value);
JULIET_API bool8 read_b8(const char* buffer, bool8* value);
JULIET_API void write_b8(IOStream* stream, bool8 value);
JULIET_API bool8 read_vec4(const char* buffer, Vector4* value);
JULIET_API void write_vec4(IOStream* stream, Vector4 value);
JULIET_API bool8 serialize_str(Archive* ar, String property_name, String* value);
JULIET_API bool8 serialize_f32(Archive* ar, String property_name, float* value);
JULIET_API bool8 serialize_i8(Archive* ar, String property_name, int8* value);
JULIET_API bool8 serialize_i16(Archive* ar, String property_name, int16* value);
JULIET_API bool8 serialize_i32(Archive* ar, String property_name, int32* value);
JULIET_API bool8 serialize_i64(Archive* ar, String property_name, int64* value);
JULIET_API bool8 serialize_u8(Archive* ar, String property_name, uint8* value);
JULIET_API bool8 serialize_u16(Archive* ar, String property_name, uint16* value);
JULIET_API bool8 serialize_u32(Archive* ar, String property_name, uint32* value);
JULIET_API bool8 serialize_u64(Archive* ar, String property_name, uint64* value);
JULIET_API bool8 serialize_b8(Archive* ar, String property_name, bool8* value);
JULIET_API bool8 serialize_vec4(Archive* ar, String property_name, Vector4* value);
#define SERIALIZE_STR(ar, name, var_ptr) serialize_str((ar), ConstString(#name), (var_ptr))
#define SERIALIZE_F32(ar, name, var_ptr) serialize_f32((ar), ConstString(#name), (var_ptr))
#define SERIALIZE_I8(ar, name, var_ptr) serialize_i8((ar), ConstString(#name), (var_ptr))
#define SERIALIZE_I16(ar, name, var_ptr) serialize_i16((ar), ConstString(#name), (var_ptr))
#define SERIALIZE_I32(ar, name, var_ptr) serialize_i32((ar), ConstString(#name), (var_ptr))
#define SERIALIZE_I64(ar, name, var_ptr) serialize_i64((ar), ConstString(#name), (var_ptr))
#define SERIALIZE_U8(ar, name, var_ptr) serialize_u8((ar), ConstString(#name), (var_ptr))
#define SERIALIZE_U16(ar, name, var_ptr) serialize_u16((ar), ConstString(#name), (var_ptr))
#define SERIALIZE_U32(ar, name, var_ptr) serialize_u32((ar), ConstString(#name), (var_ptr))
#define SERIALIZE_U64(ar, name, var_ptr) serialize_u64((ar), ConstString(#name), (var_ptr))
#define SERIALIZE_B8(ar, name, var_ptr) serialize_b8((ar), ConstString(#name), (var_ptr))
#define SERIALIZE_BOOL(ar, name, var_ptr) serialize_b8((ar), ConstString(#name), (var_ptr))
#define SERIALIZE_VEC4(ar, name, var_ptr) serialize_vec4((ar), ConstString(#name), (var_ptr))
#if JULIET_DEBUG
JULIET_API void audit_unconsumed_properties(ParsedArchive* archive, String context_name);
#endif