/** Setting manipulation functions **/

#define _ARISA_SETTINGS_H

#define OFFSETOF(s,v) ((ptrdiff_t)&(((s *)0)->v))

typedef enum {
	ST_INT,	ST_UINT,
	ST_FLOAT, ST_DOUBLE, ST_STR, ST_NSTR,
	ST_BOOL, ST_ENUM, ST_OFF
} settype_t;

typedef struct setting_t {
	char		*name;
	settype_t	type;
	ptrdiff_t	offset;
	int		flags;
	char		*min;
	char		*max;
	const char	*(*enum_to_str)(int);
	int		(*str_to_enum)(const char*);
} setting_t;

int apply_setting(setting_t *settings, void *data, value_t *var);
int read_settings(setting_t *settings, void *data, pqueue_t *out);
