struct side_arg_dynamic_vec {
uint32_t dynamic_type; /* enum side_dynamic_type */
+ uint32_t nr_attr;
+ const struct side_attr *attr;
union {
uint8_t side_bool;
struct side_arg_dynamic_event_field {
const char *field_name;
const struct side_arg_dynamic_vec elem;
- //TODO: we should add something like a list of user attributes (namespaced strings)
};
struct side_arg_dynamic_event_struct {
}, \
}
-#define side_arg_dynamic_null(val) { .dynamic_type = SIDE_DYNAMIC_TYPE_NULL }
+#define side_arg_dynamic_null(_attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_NULL, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .attr = _attr, \
+ }
+
+#define side_arg_dynamic_bool(_val, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_BOOL, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .attr = _attr, \
+ .u = { \
+ .side_bool = !!(_val), \
+ }, \
+ }
-#define side_arg_dynamic_bool(val) { .dynamic_type = SIDE_DYNAMIC_TYPE_BOOL, .u = { .side_bool = !!(val) } }
-#define side_arg_dynamic_u8(val) { .dynamic_type = SIDE_DYNAMIC_TYPE_U8, .u = { .side_u8 = (val) } }
-#define side_arg_dynamic_u16(val) { .dynamic_type = SIDE_DYNAMIC_TYPE_U16, .u = { .side_u16 = (val) } }
-#define side_arg_dynamic_u32(val) { .dynamic_type = SIDE_DYNAMIC_TYPE_U32, .u = { .side_u32 = (val) } }
-#define side_arg_dynamic_u64(val) { .dynamic_type = SIDE_DYNAMIC_TYPE_U64, .u = { .side_u64 = (val) } }
-#define side_arg_dynamic_s8(val) { .dynamic_type = SIDE_DYNAMIC_TYPE_S8, .u = { .side_s8 = (val) } }
-#define side_arg_dynamic_s16(val) { .dynamic_type = SIDE_DYNAMIC_TYPE_S16, .u = { .side_s16 = (val) } }
-#define side_arg_dynamic_s32(val) { .dynamic_type = SIDE_DYNAMIC_TYPE_S32, .u = { .side_s32 = (val) } }
-#define side_arg_dynamic_s64(val) { .dynamic_type = SIDE_DYNAMIC_TYPE_S64, .u = { .side_s64 = (val) } }
-#define side_arg_dynamic_string(val) { .dynamic_type = SIDE_DYNAMIC_TYPE_STRING, .u = { .string = (val) } }
+#define side_arg_dynamic_u8(_val, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_U8, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .attr = _attr, \
+ .u = { \
+ .side_u8 = (_val), \
+ }, \
+ }
+#define side_arg_dynamic_u16(_val, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_U16, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .attr = _attr, \
+ .u = { \
+ .side_u16 = (_val), \
+ }, \
+ }
+#define side_arg_dynamic_u32(_val, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_U32, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .attr = _attr, \
+ .u = { \
+ .side_u32 = (_val), \
+ }, \
+ }
+#define side_arg_dynamic_u64(_val, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_U64, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .attr = _attr, \
+ .u = { \
+ .side_u64 = (_val), \
+ }, \
+ }
-#define side_arg_dynamic_vla(_vla) { .dynamic_type = SIDE_DYNAMIC_TYPE_VLA, .u = { .side_dynamic_vla = (_vla) } }
-#define side_arg_dynamic_vla_visitor(_dynamic_vla_visitor, _ctx) \
+#define side_arg_dynamic_s8(_val, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_S8, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .attr = _attr, \
+ .u = { \
+ .side_s8 = (_val), \
+ }, \
+ }
+#define side_arg_dynamic_s16(_val, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_S16, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .attr = _attr, \
+ .u = { \
+ .side_s16 = (_val), \
+ }, \
+ }
+#define side_arg_dynamic_s32(_val, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_S32, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .attr = _attr, \
+ .u = { \
+ .side_s32 = (_val), \
+ }, \
+ }
+#define side_arg_dynamic_s64(_val, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_S64, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .attr = _attr, \
+ .u = { \
+ .side_s64 = (_val), \
+ }, \
+ }
+
+#define side_arg_dynamic_string(_val, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_STRING, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .attr = _attr, \
+ .u = { \
+ .string = (_val), \
+ }, \
+ }
+
+#define side_arg_dynamic_vla(_vla, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_VLA, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .attr = _attr, \
+ .u = { \
+ .side_dynamic_vla = (_vla), \
+ }, \
+ }
+
+#define side_arg_dynamic_vla_visitor(_dynamic_vla_visitor, _ctx, _attr) \
{ \
.dynamic_type = SIDE_DYNAMIC_TYPE_VLA_VISITOR, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .attr = _attr, \
.u = { \
.side_dynamic_vla_visitor = { \
.app_ctx = _ctx, \
}, \
}
-#define side_arg_dynamic_struct(_struct) { .dynamic_type = SIDE_DYNAMIC_TYPE_STRUCT, .u = { .side_dynamic_struct = (_struct) } }
-#define side_arg_dynamic_struct_visitor(_dynamic_struct_visitor, _ctx) \
+#define side_arg_dynamic_struct(_struct, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_STRUCT, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .attr = _attr, \
+ .u = { \
+ .side_dynamic_struct = (_struct), \
+ }, \
+ }
+
+#define side_arg_dynamic_struct_visitor(_dynamic_struct_visitor, _ctx, _attr) \
{ \
.dynamic_type = SIDE_DYNAMIC_TYPE_STRUCT_VISITOR, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .attr = _attr, \
.u = { \
.side_dynamic_struct_visitor = { \
.app_ctx = _ctx, \
my_provider_event.enabled = 1;
side_event(&my_provider_event, side_arg_list(side_arg_u32(uw), side_arg_s64(sdw),
- side_arg_dynamic(side_arg_dynamic_string("zzz"))));
+ side_arg_dynamic(side_arg_dynamic_string("zzz", side_attr_list()))));
}
static side_define_event(my_provider_event2, "myprovider", "myevent2", SIDE_LOGLEVEL_DEBUG,
{
my_provider_event_dynamic_basic.enabled = 1;
side_event(&my_provider_event_dynamic_basic,
- side_arg_list(side_arg_dynamic(side_arg_dynamic_s16(-33))));
+ side_arg_list(side_arg_dynamic(side_arg_dynamic_s16(-33, side_attr_list()))));
}
static side_define_event(my_provider_event_dynamic_vla,
{
side_arg_dynamic_define_vec(myvla,
side_arg_list(
- side_arg_dynamic_u32(1), side_arg_dynamic_u32(2), side_arg_dynamic_u32(3),
+ side_arg_dynamic_u32(1, side_attr_list()),
+ side_arg_dynamic_u32(2, side_attr_list()),
+ side_arg_dynamic_u32(3, side_attr_list()),
)
);
my_provider_event_dynamic_vla.enabled = 1;
side_event(&my_provider_event_dynamic_vla,
- side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla))));
+ side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla, side_attr_list()))));
}
static side_define_event(my_provider_event_dynamic_null,
{
my_provider_event_dynamic_null.enabled = 1;
side_event(&my_provider_event_dynamic_null,
- side_arg_list(side_arg_dynamic(side_arg_dynamic_null())));
+ side_arg_list(side_arg_dynamic(side_arg_dynamic_null(side_attr_list()))));
}
static side_define_event(my_provider_event_dynamic_struct,
{
side_arg_dynamic_define_struct(mystruct,
side_arg_list(
- side_arg_dynamic_field("a", side_arg_dynamic_u32(43)),
- side_arg_dynamic_field("b", side_arg_dynamic_string("zzz")),
- side_arg_dynamic_field("c", side_arg_dynamic_null()),
+ side_arg_dynamic_field("a", side_arg_dynamic_u32(43, side_attr_list())),
+ side_arg_dynamic_field("b", side_arg_dynamic_string("zzz", side_attr_list())),
+ side_arg_dynamic_field("c", side_arg_dynamic_null(side_attr_list())),
)
);
my_provider_event_dynamic_struct.enabled = 1;
side_event(&my_provider_event_dynamic_struct,
- side_arg_list(side_arg_dynamic(side_arg_dynamic_struct(&mystruct))));
+ side_arg_list(side_arg_dynamic(side_arg_dynamic_struct(&mystruct, side_attr_list()))));
}
static side_define_event(my_provider_event_dynamic_nested_struct,
{
side_arg_dynamic_define_struct(nested,
side_arg_list(
- side_arg_dynamic_field("a", side_arg_dynamic_u32(43)),
- side_arg_dynamic_field("b", side_arg_dynamic_u8(55)),
+ side_arg_dynamic_field("a", side_arg_dynamic_u32(43, side_attr_list())),
+ side_arg_dynamic_field("b", side_arg_dynamic_u8(55, side_attr_list())),
)
);
side_arg_dynamic_define_struct(nested2,
side_arg_list(
- side_arg_dynamic_field("aa", side_arg_dynamic_u64(128)),
- side_arg_dynamic_field("bb", side_arg_dynamic_u16(1)),
+ side_arg_dynamic_field("aa", side_arg_dynamic_u64(128, side_attr_list())),
+ side_arg_dynamic_field("bb", side_arg_dynamic_u16(1, side_attr_list())),
)
);
side_arg_dynamic_define_struct(mystruct,
side_arg_list(
- side_arg_dynamic_field("nested", side_arg_dynamic_struct(&nested)),
- side_arg_dynamic_field("nested2", side_arg_dynamic_struct(&nested2)),
+ side_arg_dynamic_field("nested", side_arg_dynamic_struct(&nested, side_attr_list())),
+ side_arg_dynamic_field("nested2", side_arg_dynamic_struct(&nested2, side_attr_list())),
)
);
my_provider_event_dynamic_nested_struct.enabled = 1;
side_event(&my_provider_event_dynamic_nested_struct,
- side_arg_list(side_arg_dynamic(side_arg_dynamic_struct(&mystruct))));
+ side_arg_list(side_arg_dynamic(side_arg_dynamic_struct(&mystruct, side_attr_list()))));
}
static side_define_event(my_provider_event_dynamic_vla_struct,
{
side_arg_dynamic_define_struct(nested,
side_arg_list(
- side_arg_dynamic_field("a", side_arg_dynamic_u32(43)),
- side_arg_dynamic_field("b", side_arg_dynamic_u8(55)),
+ side_arg_dynamic_field("a", side_arg_dynamic_u32(43, side_attr_list())),
+ side_arg_dynamic_field("b", side_arg_dynamic_u8(55, side_attr_list())),
)
);
side_arg_dynamic_define_vec(myvla,
side_arg_list(
- side_arg_dynamic_struct(&nested),
- side_arg_dynamic_struct(&nested),
- side_arg_dynamic_struct(&nested),
- side_arg_dynamic_struct(&nested),
+ side_arg_dynamic_struct(&nested, side_attr_list()),
+ side_arg_dynamic_struct(&nested, side_attr_list()),
+ side_arg_dynamic_struct(&nested, side_attr_list()),
+ side_arg_dynamic_struct(&nested, side_attr_list()),
)
);
my_provider_event_dynamic_vla_struct.enabled = 1;
side_event(&my_provider_event_dynamic_vla_struct,
- side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla))));
+ side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla, side_attr_list()))));
}
static side_define_event(my_provider_event_dynamic_struct_vla,
{
side_arg_dynamic_define_vec(myvla,
side_arg_list(
- side_arg_dynamic_u32(1), side_arg_dynamic_u32(2), side_arg_dynamic_u32(3),
+ side_arg_dynamic_u32(1, side_attr_list()),
+ side_arg_dynamic_u32(2, side_attr_list()),
+ side_arg_dynamic_u32(3, side_attr_list()),
)
);
side_arg_dynamic_define_vec(myvla2,
side_arg_list(
- side_arg_dynamic_u32(4), side_arg_dynamic_u64(5), side_arg_dynamic_u32(6),
+ side_arg_dynamic_u32(4, side_attr_list()),
+ side_arg_dynamic_u64(5, side_attr_list()),
+ side_arg_dynamic_u32(6, side_attr_list()),
)
);
side_arg_dynamic_define_struct(mystruct,
side_arg_list(
- side_arg_dynamic_field("a", side_arg_dynamic_vla(&myvla)),
- side_arg_dynamic_field("b", side_arg_dynamic_vla(&myvla2)),
+ side_arg_dynamic_field("a", side_arg_dynamic_vla(&myvla, side_attr_list())),
+ side_arg_dynamic_field("b", side_arg_dynamic_vla(&myvla2, side_attr_list())),
)
);
my_provider_event_dynamic_struct_vla.enabled = 1;
side_event(&my_provider_event_dynamic_struct_vla,
- side_arg_list(side_arg_dynamic(side_arg_dynamic_struct(&mystruct))));
+ side_arg_list(side_arg_dynamic(side_arg_dynamic_struct(&mystruct, side_attr_list()))));
}
static side_define_event(my_provider_event_dynamic_nested_vla,
{
side_arg_dynamic_define_vec(nestedvla,
side_arg_list(
- side_arg_dynamic_u32(1), side_arg_dynamic_u16(2), side_arg_dynamic_u32(3),
+ side_arg_dynamic_u32(1, side_attr_list()),
+ side_arg_dynamic_u16(2, side_attr_list()),
+ side_arg_dynamic_u32(3, side_attr_list()),
)
);
side_arg_dynamic_define_vec(nestedvla2,
side_arg_list(
- side_arg_dynamic_u8(4), side_arg_dynamic_u32(5), side_arg_dynamic_u32(6),
+ side_arg_dynamic_u8(4, side_attr_list()),
+ side_arg_dynamic_u32(5, side_attr_list()),
+ side_arg_dynamic_u32(6, side_attr_list()),
)
);
side_arg_dynamic_define_vec(myvla,
side_arg_list(
- side_arg_dynamic_vla(&nestedvla),
- side_arg_dynamic_vla(&nestedvla2),
+ side_arg_dynamic_vla(&nestedvla, side_attr_list()),
+ side_arg_dynamic_vla(&nestedvla2, side_attr_list()),
)
);
my_provider_event_dynamic_nested_vla.enabled = 1;
side_event(&my_provider_event_dynamic_nested_vla,
- side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla))));
+ side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla, side_attr_list()))));
}
static side_define_event_variadic(my_provider_event_variadic,
side_event_variadic(&my_provider_event_variadic,
side_arg_list(),
side_arg_list(
- side_arg_dynamic_field("a", side_arg_dynamic_u32(55)),
- side_arg_dynamic_field("b", side_arg_dynamic_s8(-4)),
+ side_arg_dynamic_field("a", side_arg_dynamic_u32(55, side_attr_list())),
+ side_arg_dynamic_field("b", side_arg_dynamic_s8(-4, side_attr_list())),
)
);
}
side_arg_u16(2),
),
side_arg_list(
- side_arg_dynamic_field("a", side_arg_dynamic_u32(55)),
- side_arg_dynamic_field("b", side_arg_dynamic_s8(-4)),
+ side_arg_dynamic_field("a", side_arg_dynamic_u32(55, side_attr_list())),
+ side_arg_dynamic_field("b", side_arg_dynamic_s8(-4, side_attr_list())),
)
);
}
side_event_variadic(&my_provider_event_dynamic_bool,
side_arg_list(),
side_arg_list(
- side_arg_dynamic_field("a_true", side_arg_dynamic_bool(55)),
- side_arg_dynamic_field("b_true", side_arg_dynamic_bool(-4)),
- side_arg_dynamic_field("c_false", side_arg_dynamic_bool(0)),
- side_arg_dynamic_field("d_true", side_arg_dynamic_bool(256)),
+ side_arg_dynamic_field("a_true", side_arg_dynamic_bool(55, side_attr_list())),
+ side_arg_dynamic_field("b_true", side_arg_dynamic_bool(-4, side_attr_list())),
+ side_arg_dynamic_field("c_false", side_arg_dynamic_bool(0, side_attr_list())),
+ side_arg_dynamic_field("d_true", side_arg_dynamic_bool(256, side_attr_list())),
)
);
}
for (i = 0; i < length; i++) {
const struct side_arg_dynamic_vec elem = {
.dynamic_type = SIDE_DYNAMIC_TYPE_U32,
+ .nr_attr = 0,
+ .attr = NULL,
.u = {
.side_u32 = ctx->ptr[i],
},
side_event_call(&my_provider_event_dynamic_vla_visitor,
side_arg_list(
side_arg_dynamic(
- side_arg_dynamic_vla_visitor(test_dynamic_vla_visitor, &ctx)
+ side_arg_dynamic_vla_visitor(test_dynamic_vla_visitor, &ctx, side_attr_list())
)
)
);
.field_name = ctx->ptr[i].name,
.elem = {
.dynamic_type = SIDE_DYNAMIC_TYPE_U32,
+ .nr_attr = 0,
+ .attr = NULL,
.u = {
.side_u32 = ctx->ptr[i].value,
},
side_event_call(&my_provider_event_dynamic_struct_visitor,
side_arg_list(
side_arg_dynamic(
- side_arg_dynamic_struct_visitor(test_dynamic_struct_visitor, &ctx)
+ side_arg_dynamic_struct_visitor(test_dynamic_struct_visitor, &ctx, side_attr_list())
)
)
);
side_event(&my_provider_field_user_attribute, side_arg_list(side_arg_u32(1), side_arg_s64(2)));
}
+static side_define_event_variadic(my_provider_event_variadic_attr,
+ "myprovider", "myvariadiceventattr", SIDE_LOGLEVEL_DEBUG,
+ side_field_list(),
+ side_attr_list()
+);
+
+static
+void test_variadic_attr(void)
+{
+ my_provider_event_variadic_attr.enabled = 1;
+ side_event_variadic(&my_provider_event_variadic_attr,
+ side_arg_list(),
+ side_arg_list(
+ side_arg_dynamic_field("a",
+ side_arg_dynamic_u32(55,
+ side_attr_list(
+ side_attr("user_attribute_c", "valX"),
+ side_attr("user_attribute_d", "valY"),
+ )
+ )
+ ),
+ side_arg_dynamic_field("b",
+ side_arg_dynamic_s8(-4,
+ side_attr_list(
+ side_attr("X", "1"),
+ side_attr("Y", "2"),
+ )
+ )
+ ),
+ )
+ );
+}
+
+static side_define_event_variadic(my_provider_event_variadic_vla_attr,
+ "myprovider", "myvariadiceventvlaattr", SIDE_LOGLEVEL_DEBUG,
+ side_field_list(),
+ side_attr_list()
+);
+
+static
+void test_variadic_vla_attr(void)
+{
+ side_arg_dynamic_define_vec(myvla,
+ side_arg_list(
+ side_arg_dynamic_u32(1,
+ side_attr_list(
+ side_attr("Z", "0"),
+ side_attr("A", "123"),
+ )
+ ),
+ side_arg_dynamic_u32(2, side_attr_list()),
+ side_arg_dynamic_u32(3, side_attr_list()),
+ )
+ );
+ my_provider_event_variadic_vla_attr.enabled = 1;
+ side_event_variadic(&my_provider_event_variadic_vla_attr,
+ side_arg_list(),
+ side_arg_list(
+ side_arg_dynamic_field("a",
+ side_arg_dynamic_vla(&myvla,
+ side_attr_list(
+ side_attr("X", "1"),
+ side_attr("Y", "2"),
+ )
+ )
+ ),
+ )
+ );
+}
+
+static side_define_event_variadic(my_provider_event_variadic_struct_attr,
+ "myprovider", "myvariadiceventstructattr", SIDE_LOGLEVEL_DEBUG,
+ side_field_list(),
+ side_attr_list()
+);
+
+static
+void test_variadic_struct_attr(void)
+{
+ my_provider_event_variadic_struct_attr.enabled = 1;
+ side_event_cond(&my_provider_event_variadic_struct_attr) {
+ side_arg_dynamic_define_struct(mystruct,
+ side_arg_list(
+ side_arg_dynamic_field("a",
+ side_arg_dynamic_u32(43,
+ side_attr_list(
+ side_attr("A", "1"),
+ )
+ )
+ ),
+ side_arg_dynamic_field("b", side_arg_dynamic_u8(55, side_attr_list())),
+ )
+ );
+ side_event_call_variadic(&my_provider_event_variadic_struct_attr,
+ side_arg_list(),
+ side_arg_list(
+ side_arg_dynamic_field("a",
+ side_arg_dynamic_struct(&mystruct,
+ side_attr_list(
+ side_attr("X", "1"),
+ side_attr("Y", "2"),
+ )
+ )
+ ),
+ )
+ );
+ }
+}
+
int main()
{
test_fields();
test_dynamic_struct_with_visitor();
test_event_user_attribute();
test_field_user_attribute();
+ test_variadic_attr();
+ test_variadic_vla_attr();
+ test_variadic_struct_attr();
return 0;
}