49#include "xtc_export.h"
56typedef enum xtc_cfg_kind {
65typedef int (*xtc_cfg_validator_fn)(
const void *new_val,
void *user);
66typedef void (*xtc_cfg_changed_fn)(
const char *name,
const void *old_val,
67 const void *new_val,
void *user);
72typedef struct xtc_cfg_var *xtc_cfg_ref_t;
75typedef struct xtc_cfg_spec {
78 const char *short_desc;
99 const char *
const *enum_labels;
103 xtc_cfg_validator_fn validator;
104 xtc_cfg_changed_fn on_change;
111#define XTC_CFG_SPEC_INIT { .size = sizeof(xtc_cfg_spec_t) }
153XTC_API
int xtc_cfg_unregister(
const char *name);
155XTC_API
int xtc_cfg_get_bool(
const char *name,
int *out);
156XTC_API
int xtc_cfg_get_int(
const char *name,
int *out);
157XTC_API
int xtc_cfg_get_int64(
const char *name, int64_t *out);
158XTC_API
int xtc_cfg_get_double(
const char *name,
double *out);
168XTC_API
int xtc_cfg_get_string(
const char *name,
const char **out);
169XTC_API
int xtc_cfg_get_string_copy(
const char *name,
char **out);
170XTC_API
int xtc_cfg_get_enum(
const char *name,
int *out);
172XTC_API
int xtc_cfg_set_bool(
const char *name,
int v);
173XTC_API
int xtc_cfg_set_int(
const char *name,
int v);
174XTC_API
int xtc_cfg_set_int64(
const char *name, int64_t v);
175XTC_API
int xtc_cfg_set_double(
const char *name,
double v);
176XTC_API
int xtc_cfg_set_string(
const char *name,
const char *v);
177XTC_API
int xtc_cfg_set_enum(
const char *name,
int v);
179XTC_API
int xtc_cfg_count(
void);
180XTC_API
int xtc_cfg_kind(
const char *name, xtc_cfg_kind_t *out);
188XTC_API
int xtc_cfg_load_file(
const char *path);
195XTC_API
int xtc_cfg_reload(
void);
207XTC_API
int xtc_cfg_ref(
const char *name, xtc_cfg_ref_t *out);
208XTC_API
int xtc_cfg_ref_get_bool(xtc_cfg_ref_t ref,
int *out);
209XTC_API
int xtc_cfg_ref_get_int(xtc_cfg_ref_t ref,
int *out);
210XTC_API
int xtc_cfg_ref_get_int64(xtc_cfg_ref_t ref, int64_t *out);
211XTC_API
int xtc_cfg_ref_get_double(xtc_cfg_ref_t ref,
double *out);
212XTC_API
int xtc_cfg_ref_get_string(xtc_cfg_ref_t ref,
const char **out);
213XTC_API
int xtc_cfg_ref_get_enum(xtc_cfg_ref_t ref,
int *out);
263typedef struct xtc_cfg_session xtc_cfg_session_t;
268typedef enum xtc_cfg_source {
269 XTC_CFG_SRC_DEFAULT = 0,
270 XTC_CFG_SRC_FILE = 1,
271 XTC_CFG_SRC_DATABASE = 2,
272 XTC_CFG_SRC_USER = 3,
273 XTC_CFG_SRC_CLIENT = 4,
274 XTC_CFG_SRC_SESSION = 5,
275 XTC_CFG_SRC_OVERRIDE = 6
298XTC_API
int xtc_cfg_session_create(xtc_cfg_session_t **out);
299XTC_API
void xtc_cfg_session_destroy(xtc_cfg_session_t *s);
308XTC_API xtc_cfg_session_t *xtc_cfg_session_bind(xtc_cfg_session_t *s);
309XTC_API xtc_cfg_session_t *xtc_cfg_session_current(
void);
315XTC_API
int xtc_cfg_session_push(xtc_cfg_session_t *s);
316XTC_API
int xtc_cfg_session_commit(xtc_cfg_session_t *s);
317XTC_API
int xtc_cfg_session_abort(xtc_cfg_session_t *s);
322XTC_API
int xtc_cfg_session_source(xtc_cfg_session_t *s,
const char *name,
323 xtc_cfg_source_t *out);
328XTC_API
int xtc_cfg_session_reset(xtc_cfg_session_t *s,
const char *name);
338XTC_API
int xtc_cfg_ssn_set_bool(xtc_cfg_session_t *s,
const char *name,
339 int v, xtc_cfg_source_t src);
340XTC_API
int xtc_cfg_ssn_set_int(xtc_cfg_session_t *s,
const char *name,
341 int v, xtc_cfg_source_t src);
342XTC_API
int xtc_cfg_ssn_set_int64(xtc_cfg_session_t *s,
const char *name,
343 int64_t v, xtc_cfg_source_t src);
344XTC_API
int xtc_cfg_ssn_set_double(xtc_cfg_session_t *s,
const char *name,
345 double v, xtc_cfg_source_t src);
346XTC_API
int xtc_cfg_ssn_set_string(xtc_cfg_session_t *s,
const char *name,
347 const char *v, xtc_cfg_source_t src);
348XTC_API
int xtc_cfg_ssn_set_enum(xtc_cfg_session_t *s,
const char *name,
349 int v, xtc_cfg_source_t src);