File: symgen_types.h

package info (click to toggle)
waypipe 0.8.4-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,240 kB
  • sloc: ansic: 14,798; xml: 6,103; python: 1,155; sh: 55; makefile: 14
file content (38 lines) | stat: -rw-r--r-- 1,382 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#ifndef SYMGEN_TYPES_H
#define SYMGEN_TYPES_H
#include <stdbool.h>
#include <stdint.h>
struct context;
struct message_tracker;
struct wp_object;
typedef void (*wp_callfn_t)(struct context *ctx, const uint32_t *payload, const int *fds, struct message_tracker *mt);
#define GAP_CODE_END 0x0
#define GAP_CODE_OBJ 0x1
#define GAP_CODE_ARR 0x2
#define GAP_CODE_STR 0x3
struct msg_data {
	/* Number of 4-byte blocks until next nontrivial input.
	 * (Note: 16-bit length is sufficient since message lengths also 16-bit)
	 * Lowest 2 bits indicate if what follows is end/obj/array/string */
	const uint16_t* gaps;
	/* Pointer to new object types, can be null if none indicated */
	const struct wp_interface **new_objs;
	/* Function pointer to parse + invoke do_ handler */
	const wp_callfn_t call;
	/* Number of associated file descriptors */
	const int16_t n_fds;
	/* Whether message destroys the object */
	bool is_destructor;
};
struct wp_interface {
	/* msgs[0..nreq-1] are reqs; msgs[nreq..nreq+nevt-1] are evts */
	const struct msg_data *msgs;
	const int nreq, nevt;
	/* The name of the interface */
	const char *name;
	/* The names of the messages, in order; stored tightly packed */
	const char *msg_names;
};
/* User should define this function. */
struct wp_object *get_object(struct message_tracker *mt, uint32_t id, const struct wp_interface *intf);
#endif /* SYMGEN_TYPES_H */