summaryrefslogtreecommitdiff
path: root/src/til_settings.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/til_settings.h')
-rw-r--r--src/til_settings.h20
1 files changed, 13 insertions, 7 deletions
diff --git a/src/til_settings.h b/src/til_settings.h
index c9da235..4cfddf3 100644
--- a/src/til_settings.h
+++ b/src/til_settings.h
@@ -7,8 +7,8 @@ typedef struct til_setting_t til_setting_t;
typedef struct til_settings_t til_settings_t;
typedef struct til_setup_t til_setup_t;
-/* Individual setting description */
-typedef struct til_setting_desc_t {
+/* Individual setting specification */
+typedef struct til_setting_spec_t {
const char *name; /* long-form/human name for setting */
const char *key; /* short-form/key for setting, used as left side of =value in settings string */
const char *regex; /* value must conform to this regex */
@@ -16,14 +16,20 @@ typedef struct til_setting_desc_t {
const char **values; /* if a set of values is provided, listed here */
const char **annotations; /* if a set of values is provided, annotations for those values may be listed here */
char * (*random)(unsigned seed);/* if set, returns a valid random value for this setting */
- unsigned as_nested_settings:1; /* if set, this setting expects a settings string for its value and wants a nested til_setting_t.settings instance created for it */
+ unsigned as_nested_settings:1; /* if set, this setting expects a settings string for its value and wants a til_setting_t.value_as_nested_settings instance created for it */
+} til_setting_spec_t;
+
+/* a setting_desc is a setting_spec that's been described to a specific containing settings instance via desc_new(), though desc_new() takes a const settings it's cast away when placed into the allocated desc. */
+typedef struct til_setting_desc_t {
+ til_settings_t *container;
+ til_setting_spec_t spec;
} til_setting_desc_t;
/* For conveniently representing setting description generators */
typedef struct til_setting_desc_generator_t {
const char *key; /* key this generator applies to */
const char **value_ptr; /* where to put the value */
- int (*func)(til_setup_t *setup_context, const til_setting_desc_t **res_desc);
+ int (*func)(const til_settings_t *settings, til_setup_t *setup_context, const til_setting_desc_t **res_desc);
} til_setting_desc_generator_t;
/* Encapsulates a single til_settings_t.settings[] entry */
@@ -41,13 +47,13 @@ const char * til_settings_get_value_by_key(const til_settings_t *settings, const
const char * til_settings_get_value_by_idx(const til_settings_t *settings, unsigned idx, til_setting_t **res_setting);
til_setting_t * til_settings_add_value(til_settings_t *settings, const char *key, const char *value, const til_setting_desc_t *desc);
void til_settings_reset_descs(til_settings_t *settings);
-int til_settings_get_and_describe_value(const til_settings_t *settings, const til_setting_desc_t *desc, const char **res_value, til_setting_t **res_setting, const til_setting_desc_t **res_desc);
+int til_settings_get_and_describe_value(const til_settings_t *settings, const til_setting_spec_t *spec, const char **res_value, til_setting_t **res_setting, const til_setting_desc_t **res_desc);
char * til_settings_as_arg(const til_settings_t *settings);
int til_settings_apply_desc_generators(const til_settings_t *settings, const til_setting_desc_generator_t generators[], unsigned n_generators, til_setup_t *setup, til_setting_t **res_setting, const til_setting_desc_t **res_desc, til_setup_t **res_setup);
-int til_setting_desc_clone(const til_setting_desc_t *desc, const til_setting_desc_t **res_desc);
+int til_setting_desc_new(const til_settings_t *settings, const til_setting_spec_t *spec, const til_setting_desc_t **res_desc);
til_setting_desc_t * til_setting_desc_free(const til_setting_desc_t *desc);
-int til_setting_desc_check(const til_setting_desc_t *desc, const char *value);
+int til_setting_spec_check(const til_setting_spec_t *spec, const char *value);
#ifndef TIL_SETTINGS_STR
#define _TIL_SETTINGS_STR(s) #s
© All Rights Reserved