#ifndef H_SATORI_CONFIG #define H_SATORI_CONFIG #include #include #include #include #include #include #include #include #include #define SAT_CONFIG_TYPE_STREAM (1) #define SAT_CONFIG_TYPE_SCOPED (2) typedef struct _sat_config { int type; void *info; struct _sat_config *(*scopeTo)(struct _sat_config *ctx, char *prefix); char *(*readValue)(struct _sat_config *ctx, char *name, char *fallback); } sat_config, *sat_config_ptr; typedef struct _sat_config_stream { FILE *stream; bool ownsStream; long offset; mtx_t *lock; } sat_config_stream, *sat_config_stream_ptr; typedef struct _sat_config_scoped { sat_config_ptr parent; char *prefix; } sat_config_scoped, *sat_config_scoped_ptr; sat_config_ptr sat_config_alloc(int type); sat_config_ptr sat_config_alloc_stream(void); sat_config_ptr sat_config_alloc_scoped(void); void sat_config_free(sat_config_ptr ctx); void sat_config_free_stream(sat_config_ptr ctx); void sat_config_free_scoped(sat_config_ptr ctx); sat_config_ptr sat_config_scope_to(sat_config_ptr ctx, char *prefix); char* sat_config_read_value(sat_config_ptr ctx, char *name, char *fallback); bool sat_config_read_bool(sat_config_ptr ctx, char *name, bool fallback); uint64_t sat_config_read_u64(sat_config_ptr ctx, char *name, uint64_t fallback); int sat_config_stream_open(sat_config_ptr ctx, FILE *stream, bool ownsStream); int sat_config_stream_open_file(sat_config_ptr ctx, char *path); int sat_config_write_example(FILE *stream); int sat_config_write_example_file(char *path); #endif // H_SATORI_CONFIG