vn/code/vn_config.h

52 lines
1.2 KiB
C
Raw Normal View History

2023-06-17 21:06:25 +00:00
/* date = June 17th 2023 10:48 pm */
#ifndef VN_CONFIG_H
#define VN_CONFIG_H
2023-06-18 10:09:36 +00:00
enum config_entry_type
{
Config_Entry_S32,
Config_Entry_S64,
Config_Entry_B32,
};
2023-06-17 21:06:25 +00:00
struct config_entry
{
string Name;
2023-06-18 10:09:36 +00:00
void *Target;
config_entry_type Type;
2023-06-17 21:06:25 +00:00
config_entry *Next;
config_entry *Prev;
2023-06-19 17:12:26 +00:00
config_entry *NextInternal;
2023-06-17 21:06:25 +00:00
};
2023-06-18 10:09:36 +00:00
struct config_entry_bucket
2023-06-17 21:06:25 +00:00
{
config_entry *First;
config_entry *Last;
};
2023-06-18 10:09:36 +00:00
struct config
{
memory_arena Arena;
config_entry_bucket EntryBuckets[32];
2023-06-19 17:12:26 +00:00
// sixten(NOTE): Keeps track of the order in which the entries were declared. (Used during saving)
config_entry *FirstInternal;
config_entry *LastInternal;
2023-06-18 10:09:36 +00:00
};
static config_entry *Config_FindEntryByName(config *Config, string Name);
2023-06-19 17:12:26 +00:00
static void Config_BindEntry(config *Config, string Name, config_entry_type Type, void *Target);
inline void Config_BindS32(config *Config, string Name, s32 *Target, s32 Default);
inline void Config_BindS64(config *Config, string Name, s64 *Target, s64 Default);
inline void Config_BindB32(config *Config, string Name, b32 *Target, b32 Default);
2023-06-17 21:06:25 +00:00
static void Config_ReadFile(config *Config, string Path);
static void Config_WriteFile(config *Config);
#endif //VN_CONFIG_H