Add indirection for visitor arguments
[libside.git] / include / side / instrumentation-c-api.h
index 43ba3c02b0c4a79d502f1c4c8e0abe688729eb80..00cd20bd4f54b14f29e749cef84d0bdf407e6c4b 100644 (file)
 
 #define side_arg_array(_side_type)     { .type = SIDE_ENUM_INIT(SIDE_TYPE_ARRAY), .flags = 0, .u = { .side_static = { .side_array = SIDE_PTR_INIT(_side_type) } } }
 #define side_arg_vla(_side_type)       { .type = SIDE_ENUM_INIT(SIDE_TYPE_VLA), .flags = 0, .u = { .side_static = { .side_vla = SIDE_PTR_INIT(_side_type) } } }
-#define side_arg_vla_visitor(_ctx)     { .type = SIDE_ENUM_INIT(SIDE_TYPE_VLA_VISITOR), .flags = 0, .u = { .side_static = { .side_vla_app_visitor_ctx = (_ctx) } } }
+#define side_arg_vla_visitor(_side_vla_visitor) \
+       { \
+               .type = SIDE_ENUM_INIT(SIDE_TYPE_VLA_VISITOR), \
+               .flags = 0, \
+               .u = { \
+                       .side_static = { \
+                               .side_vla_visitor = SIDE_PTR_INIT(_side_vla_visitor), \
+                        } \
+                } \
+       }
+
+#define side_arg_define_vla_visitor(_identifier, _ctx) \
+       struct side_arg_vla_visitor _identifier = { \
+               .app_ctx = SIDE_PTR_INIT(_ctx), \
+               .cached_arg = SIDE_PTR_INIT(NULL), \
+       }
 
 /* Gather field arguments */
 
                }, \
        }
 
-#define side_arg_dynamic_vla_visitor(_dynamic_vla_visitor, _ctx, _attr...) \
+#define side_arg_dynamic_vla_visitor(_dynamic_vla_visitor) \
        { \
                .type = SIDE_ENUM_INIT(SIDE_TYPE_DYNAMIC_VLA_VISITOR), \
                .flags = 0, \
                .u = { \
                        .side_dynamic = { \
-                               .side_dynamic_vla_visitor = { \
-                                       .app_ctx = SIDE_PTR_INIT(_ctx), \
-                                       .visitor = SIDE_PTR_INIT(_dynamic_vla_visitor), \
-                                       .attr = SIDE_PTR_INIT(SIDE_PARAM_SELECT_ARG1(_, ##_attr, side_attr_list())), \
-                                       .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM_SELECT_ARG1(_, ##_attr, side_attr_list())), \
-                               }, \
+                               .side_dynamic_vla_visitor = SIDE_PTR_INIT(_dynamic_vla_visitor), \
                        }, \
                }, \
        }
                }, \
        }
 
-#define side_arg_dynamic_struct_visitor(_dynamic_struct_visitor, _ctx, _attr...) \
+#define side_arg_dynamic_struct_visitor(_dynamic_struct_visitor) \
        { \
                .type = SIDE_ENUM_INIT(SIDE_TYPE_DYNAMIC_STRUCT_VISITOR), \
                .flags = 0, \
                .u = { \
                        .side_dynamic = { \
-                               .side_dynamic_struct_visitor = { \
-                                       .app_ctx = SIDE_PTR_INIT(_ctx), \
-                                       .visitor = SIDE_PTR_INIT(_dynamic_struct_visitor), \
-                                       .attr = SIDE_PTR_INIT(SIDE_PARAM_SELECT_ARG1(_, ##_attr, side_attr_list())), \
-                                       .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM_SELECT_ARG1(_, ##_attr, side_attr_list())), \
-                               }, \
+                               .side_dynamic_struct_visitor = SIDE_PTR_INIT(_dynamic_struct_visitor), \
                        }, \
                }, \
        }
                .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM_SELECT_ARG1(_, ##_attr, side_attr_list())), \
        }
 
+#define side_arg_dynamic_define_struct_visitor(_identifier, _dynamic_struct_visitor, _ctx, _attr...) \
+       struct side_arg_dynamic_struct_visitor _identifier = { \
+               .visitor = SIDE_PTR_INIT(_dynamic_struct_visitor), \
+               .app_ctx = SIDE_PTR_INIT(_ctx), \
+               .attr = SIDE_PTR_INIT(SIDE_PARAM_SELECT_ARG1(_, ##_attr, side_attr_list())), \
+               .cached_arg = SIDE_PTR_INIT(NULL), \
+               .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM_SELECT_ARG1(_, ##_attr, side_attr_list())), \
+       }
+
+#define side_arg_dynamic_define_vla_visitor(_identifier, _dynamic_vla_visitor, _ctx, _attr...) \
+       struct side_arg_dynamic_vla_visitor _identifier = { \
+               .visitor = SIDE_PTR_INIT(_dynamic_vla_visitor), \
+               .app_ctx = SIDE_PTR_INIT(_ctx), \
+               .attr = SIDE_PTR_INIT(SIDE_PARAM_SELECT_ARG1(_, ##_attr, side_attr_list())), \
+               .cached_arg = SIDE_PTR_INIT(NULL), \
+               .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM_SELECT_ARG1(_, ##_attr, side_attr_list())), \
+       }
+
 #define side_arg_define_vec(_identifier, _sav) \
        const struct side_arg _identifier##_vec[] = { _sav }; \
        const struct side_arg_vec _identifier = { \
This page took 0.024414 seconds and 4 git commands to generate.