fr_dict_attr_t const *fr_dict_attr_test_enum;
+static fr_value_box_t enum_test_0 = FR_VALUE_BOX_INITIALISER(enum_test_0, FR_TYPE_UINT32, .uint32, 123);
+static fr_value_box_t enum_test_1 = FR_VALUE_BOX_INITIALISER(enum_test_1, FR_TYPE_UINT32, .uint32, 321);
+
fr_dict_test_attr_t const fr_dict_test_attrs[] = {
/*
* Variable length
*/
{ .attr = FR_TEST_ATTR_ENUM, .da = &fr_dict_attr_test_enum, .name = "Test-Enum", .type = FR_TYPE_UINT32,
.values = (fr_dict_test_attr_value_t[]){
- { .key = "test123", .val = { .type = FR_TYPE_UINT32, .vb_uint32 = 123 } },
- { .key = "test321", .val = { .type = FR_TYPE_UINT32, .vb_uint32 = 321 } },
+ { .key = "test123", .val = &enum_test_0},
+ { .key = "test321", .val = &enum_test_1},
{ .key = NULL, },
}
},
for (v = p->values;
v->key != NULL;
- v++) fr_dict_enum_add_name(fr_dict_attr_unconst(attr), v->key, &v->val, false, false);
+ v++) fr_dict_enum_add_name(fr_dict_attr_unconst(attr), v->key, v->val, false, false);
}
*p->da = attr;
*/
typedef struct value {
char const *key; //!< Enumeration name.
- fr_value_box_t val; //!< Enumeration value
+ fr_value_box_t *val; //!< Enumeration value
} fr_dict_test_attr_value_t;
/** Test enumeration attributes
#define FR_VALUE_BOX_INITIALISER_NULL(_vb) \
{ \
.type = FR_TYPE_NULL, \
+ .entry = { \
+ .entry = FR_DLIST_ENTRY_INITIALISER((_vb).entry.entry) \
+ }, \
+ VALUE_BOX_NDEBUG_INITIALISER \
+ }
+
+/** A static initialiser for stack/globally allocated boxes
+ *
+ */
+#define FR_VALUE_BOX_INITIALISER(_vb, _type, _field, _val) \
+ { \
+ .type = _type, \
.datum = { \
- .children = { \
- FR_DLIST_HEAD_INITIALISER((_vb).datum.children.head) \
- } \
+ _field = _val, \
}, \
.entry = { \
.entry = FR_DLIST_ENTRY_INITIALISER((_vb).entry.entry) \