wlmaker
Loading...
Searching...
No Matches
decode.h
Go to the documentation of this file.
1/* ========================================================================= */
24#ifndef __WLMCFG_DECODE_H__
25#define __WLMCFG_DECODE_H__
26
27#include <inttypes.h>
28#include <stdbool.h>
29#include <stddef.h>
30
31#include "model.h"
32
33#ifdef __cplusplus
34extern "C" {
35#endif // __cplusplus
36
39
41typedef struct {
43 const char *name_ptr;
45 int value;
47
49#define WLMCFG_ENUM_SENTINEL() { .name_ptr = NULL }
50
52#define WLMCFG_ENUM(_name, _value) { .name_ptr = (_name), .value = (_value) }
53
55typedef enum {
56 WLMCFG_TYPE_UINT64,
57 WLMCFG_TYPE_INT64,
58 WLMCFG_TYPE_DOUBLE,
59 WLMCFG_TYPE_ARGB32,
60 WLMCFG_TYPE_BOOL,
61 WLMCFG_TYPE_ENUM,
62 WLMCFG_TYPE_STRING,
63 WLMCFG_TYPE_CHARBUF,
64 WLMCFG_TYPE_DICT,
65 WLMCFG_TYPE_CUSTOM,
67
69typedef struct {
73
75typedef struct {
77 uint64_t default_value;
79
81typedef struct {
85
87typedef struct {
89 uint32_t default_value;
91
93typedef struct {
97
105
107typedef struct {
109 const char *default_value_ptr;
111
113typedef struct {
115 size_t len;
117 const char *default_value_ptr;
119
121typedef struct {
123 bool (*decode)(wlmcfg_object_t *obj_ptr, void *dest_ptr);
125 bool (*init)(void *dest_ptr);
127 void (*fini)(void *dest_ptr);
129
135 const char *key_ptr;
141 union {
142 wlmcfg_desc_int64_t v_int64;
143 wlmcfg_desc_uint64_t v_uint64;
144 wlmcfg_desc_double_t v_double;
145 wlmcfg_desc_argb32_t v_argb32;
146 wlmcfg_desc_bool_t v_bool;
147 wlmcfg_desc_enum_t v_enum;
148 wlmcfg_desc_string_t v_string;
149 wlmcfg_desc_charbuf_t v_charbuf;
150 const wlmcfg_desc_t *v_dict_desc_ptr;
151 wlmcfg_desc_custom_t v_custom;
152 } v;
153};
154
156#define WLMCFG_DESC_SENTINEL() { .key_ptr = NULL }
157
159#define WLMCFG_DESC_UINT64(_key, _required, _base, _field, _default) { \
160 .type = WLMCFG_TYPE_UINT64, \
161 .key_ptr = (_key), \
162 .required = _required, \
163 .field_offset = offsetof(_base, _field), \
164 .v.v_uint64.default_value = _default \
165 }
166
168#define WLMCFG_DESC_INT64(_key, _required, _base, _field, _default) { \
169 .type = WLMCFG_TYPE_INT64, \
170 .key_ptr = (_key), \
171 .required = _required, \
172 .field_offset = offsetof(_base, _field), \
173 .v.v_int64.default_value = _default \
174 }
175
177#define WLMCFG_DESC_DOUBLE(_key, _required, _base, _field, _default) { \
178 .type = WLMCFG_TYPE_DOUBLE, \
179 .key_ptr = (_key), \
180 .required = _required, \
181 .field_offset = offsetof(_base, _field), \
182 .v.v_double.default_value = _default \
183 }
184
186#define WLMCFG_DESC_ARGB32(_key, _required, _base, _field, _default) { \
187 .type = WLMCFG_TYPE_ARGB32, \
188 .key_ptr = (_key), \
189 .required = _required, \
190 .field_offset = offsetof(_base, _field), \
191 .v.v_argb32.default_value = _default \
192 }
193
195#define WLMCFG_DESC_BOOL(_key, _required, _base, _field, _default) { \
196 .type = WLMCFG_TYPE_BOOL, \
197 .key_ptr = (_key), \
198 .required = _required, \
199 .field_offset = offsetof(_base, _field), \
200 .v.v_bool.default_value = _default \
201 }
202
204#define WLMCFG_DESC_ENUM(_key, _required, _base, _field, _default, _desc_ptr) \
205 { \
206 .type = WLMCFG_TYPE_ENUM, \
207 .key_ptr = (_key), \
208 .required = _required, \
209 .field_offset = offsetof(_base, _field), \
210 .v.v_enum.default_value = _default, \
211 .v.v_enum.desc_ptr = _desc_ptr \
212 }
213
215#define WLMCFG_DESC_STRING(_key, _required, _base, _field, _default) { \
216 .type = WLMCFG_TYPE_STRING, \
217 .key_ptr = (_key), \
218 .required = _required, \
219 .field_offset = offsetof(_base, _field), \
220 .v.v_string.default_value_ptr = _default, \
221 }
222
224#define WLMCFG_DESC_CHARBUF(_key, _required, _base, _field, _len, _default) { \
225 .type = WLMCFG_TYPE_CHARBUF, \
226 .key_ptr = (_key), \
227 .required = _required, \
228 .field_offset = offsetof(_base, _field), \
229 .v.v_charbuf.len = _len, \
230 .v.v_charbuf.default_value_ptr = _default, \
231 }
232
234#define WLMCFG_DESC_DICT(_key, _required, _base, _field, _desc) { \
235 .type = WLMCFG_TYPE_DICT, \
236 .key_ptr = (_key), \
237 .required = _required, \
238 .field_offset = offsetof(_base, _field), \
239 .v.v_dict_desc_ptr = _desc \
240 }
241
243#define WLMCFG_DESC_CUSTOM(_key, _required, _base, _field, _d ,_i, _f) { \
244 .type = WLMCFG_TYPE_CUSTOM, \
245 .key_ptr = (_key), \
246 .required = _required, \
247 .field_offset = offsetof(_base, _field), \
248 .v.v_custom.decode = _d, \
249 .v.v_custom.init = _i, \
250 .v.v_custom.fini = _f, \
251 }
252
263 wlmcfg_dict_t *dict_ptr,
264 const wlmcfg_desc_t *desc_ptr,
265 void *dest_ptr);
266
274 const wlmcfg_desc_t *desc_ptr,
275 void *dest_ptr);
276
287 const wlmcfg_enum_desc_t *enum_desc_ptr,
288 const char *name_ptr,
289 int *value_ptr);
290
301 const wlmcfg_enum_desc_t *enum_desc_ptr,
302 int value,
303 const char **name_ptr_ptr);
304
306extern const bs_test_case_t wlmcfg_decode_test_cases[];
307
308#ifdef __cplusplus
309} // extern "C"
310#endif // __cplusplus
311
312#endif /* __WLMCFG_DECODE_H__ */
313/* == End of decode.h ====================================================== */
void wlmcfg_decoded_destroy(const wlmcfg_desc_t *desc_ptr, void *dest_ptr)
Definition decode.c:179
const bs_test_case_t wlmcfg_decode_test_cases[]
Definition decode.c:485
bool wlmcfg_enum_name_to_value(const wlmcfg_enum_desc_t *enum_desc_ptr, const char *name_ptr, int *value_ptr)
Definition decode.c:219
wlmcfg_decode_type_t
Definition decode.h:55
bool wlmcfg_decode_dict(wlmcfg_dict_t *dict_ptr, const wlmcfg_desc_t *desc_ptr, void *dest_ptr)
Definition decode.c:81
bool wlmcfg_enum_value_to_name(const wlmcfg_enum_desc_t *enum_desc_ptr, int value, const char **name_ptr_ptr)
Definition decode.c:234
Definition decode.h:131
union _wlmcfg_desc_t::@0 v
bool required
Definition decode.h:137
const char * key_ptr
Definition decode.h:135
wlmcfg_decode_type_t type
Definition decode.h:133
size_t field_offset
Definition decode.h:139
Definition model.c:46
Definition model.c:28
Definition decode.h:87
uint32_t default_value
Definition decode.h:89
Definition decode.h:93
bool default_value
Definition decode.h:95
Definition decode.h:113
const char * default_value_ptr
Definition decode.h:117
size_t len
Definition decode.h:115
Definition decode.h:121
Definition decode.h:81
double default_value
Definition decode.h:83
Definition decode.h:99
int default_value
Definition decode.h:101
const wlmcfg_enum_desc_t * desc_ptr
Definition decode.h:103
Definition decode.h:69
int64_t default_value
Definition decode.h:71
Definition decode.h:107
const char * default_value_ptr
Definition decode.h:109
Definition decode.h:75
uint64_t default_value
Definition decode.h:77
Definition decode.h:41
const char * name_ptr
Definition decode.h:43
int value
Definition decode.h:45