1 // SPDX-License-Identifier: MIT
3 * Copyright 2022-2023 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
6 #ifndef SIDE_ABI_VISITOR_H
7 #define SIDE_ABI_VISITOR_H
10 #include <side/macros.h>
11 #include <side/endian.h>
14 struct side_arg_dynamic_field
;
15 struct side_tracer_visitor_ctx
;
16 struct side_tracer_dynamic_struct_visitor_ctx
;
18 /* The visitor pattern is a double-dispatch visitor. */
20 typedef enum side_visitor_status (*side_write_elem_func
)(
21 const struct side_tracer_visitor_ctx
*tracer_ctx
,
22 const struct side_arg
*elem
);
23 typedef enum side_visitor_status (*side_visitor_func
)(
24 const struct side_tracer_visitor_ctx
*tracer_ctx
,
27 struct side_tracer_visitor_ctx
{
28 side_write_elem_func write_elem
;
29 void *priv
; /* Private tracer context. */
32 typedef enum side_visitor_status (*side_write_field_func
)(
33 const struct side_tracer_dynamic_struct_visitor_ctx
*tracer_ctx
,
34 const struct side_arg_dynamic_field
*dynamic_field
);
35 typedef enum side_visitor_status (*side_dynamic_struct_visitor_func
)(
36 const struct side_tracer_dynamic_struct_visitor_ctx
*tracer_ctx
,
39 struct side_tracer_dynamic_struct_visitor_ctx
{
40 side_write_field_func write_field
;
41 void *priv
; /* Private tracer context. */
44 #endif /* SIDE_ABI_VISITOR_H */