diff options
Diffstat (limited to 'cfg/cfgparse.h')
-rw-r--r-- | cfg/cfgparse.h | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/cfg/cfgparse.h b/cfg/cfgparse.h new file mode 100644 index 0000000..4865b48 --- /dev/null +++ b/cfg/cfgparse.h @@ -0,0 +1,62 @@ +#ifndef cfgparse_h +#define cfgparse_h + +#include "memory.h" + +typedef enum { + cfg_type_int, + cfg_type_string, + cfg_type_data, + cfg_type_none +} cfg_Type; + +typedef struct { + int size; + char* data; +} cfg_Data; + +typedef struct cfg_Prop { + char name[28]; + cfg_Type type; + union { + int num; + cfg_Data data; + char* str; + } as; + struct cfg_Prop* next; +} cfg_Prop; + +typedef struct cfg_Object { + char name[28]; + int prop_count; + cfg_Prop* props; + struct cfg_Object* next; +} cfg_Object; + +cfg_Object* cfg_parse(const char* src, Arena* arena); +const cfg_Prop* find_prop( + const cfg_Object* obj, + const char* name +); +const cfg_Prop* find_prop_of( + const cfg_Object* obj, + const char* name, + cfg_Type type +); +const cfg_Object* find_child( + const cfg_Object* obj, + const char* name +); + +int find_int_default( + const cfg_Object* obj, + const char* name, + int def +); +const char* find_string_default( + const cfg_Object* obj, + const char* name, + const char* def +); + +#endif |