Commit | Line | Data |
---|---|---|
57553dfd MD |
1 | // SPDX-License-Identifier: MIT |
2 | /* | |
3 | * Copyright 2022-2023 Mathieu Desnoyers <mathieu.desnoyers@efficios.com> | |
4 | */ | |
5 | ||
6 | #ifndef SIDE_VISITOR_ABI_H | |
7 | #define SIDE_VISITOR_ABI_H | |
8 | ||
9 | #include <stdint.h> | |
10 | #include <side/macros.h> | |
11 | #include <side/endian.h> | |
12 | ||
13 | struct side_arg; | |
14 | struct side_arg_dynamic_field; | |
15 | struct side_tracer_visitor_ctx; | |
16 | struct side_tracer_dynamic_struct_visitor_ctx; | |
17 | ||
18 | /* The visitor pattern is a double-dispatch visitor. */ | |
19 | ||
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, | |
25 | void *app_ctx); | |
26 | ||
27 | struct side_tracer_visitor_ctx { | |
28 | side_write_elem_func write_elem; | |
29 | void *priv; /* Private tracer context. */ | |
30 | } SIDE_PACKED; | |
31 | ||
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, | |
37 | void *app_ctx); | |
38 | ||
39 | struct side_tracer_dynamic_struct_visitor_ctx { | |
40 | side_write_field_func write_field; | |
41 | void *priv; /* Private tracer context. */ | |
42 | } SIDE_PACKED; | |
43 | ||
44 | #endif /* SIDE_VISITOR_ABI_H */ |