/* date = August 30th 2023 6:28 pm */ #ifndef VN_CHARACTER_H #define VN_CHARACTER_H //////////////////////////////// //~ sixten: Character String Chunk Types #define CHARACTER_STRING_CHUNK_DATA_SIZE (64 - sizeof(character_string_chunk *)) struct character_string_chunk { character_string_chunk *Next; u8 Data[CHARACTER_STRING_CHUNK_DATA_SIZE]; }; CTAssert(sizeof(character_string_chunk) == 64); struct character_string_list { character_string_chunk *First; character_string_chunk *Last; u64 ChunkCount; s64 StringCount; }; //////////////////////////////// //~ sixten: Character Registry Types struct character_entry { character_entry *Next; character_entry *Prev; string Name; }; struct character_list { character_entry *First; character_entry *Last; s64 Count; }; struct character_registry { memory_arena *Arena; character_list Characters; memory_arena *StringArena; character_string_chunk *FirstFreeChunk; }; //////////////////////////////// //~ sixten: Character String Chunk Functions static character_string_list CR_CharacterStringListAlloc(character_registry *Registry, string String); static character_string_list CR_CharacterStringListRelease(character_registry *Registry, character_string_list *List); static string CR_StringFromList(memory_arena *Arena, character_string_list *List); //////////////////////////////// //~ sixten: Character Registry Functions static void CR_SetState(character_registry *State); static character_registry *CR_GetState(void); static character_list CR_GetCharacters(void); static void CR_Init(void); static character_entry *CR_EntryFromName(string Name); #endif //VN_CHARACTER_H