1#ifndef NVIM_EVENT_DEFS_H
2#define NVIM_EVENT_DEFS_H
3
4#include <assert.h>
5#include <stdarg.h>
6
7#define EVENT_HANDLER_MAX_ARGC 10
8
9typedef void (*argv_callback)(void **argv);
10typedef struct message {
11 argv_callback handler;
12 void *argv[EVENT_HANDLER_MAX_ARGC];
13} Event;
14typedef void(*event_scheduler)(Event event, void *data);
15
16#define VA_EVENT_INIT(event, h, a) \
17 do { \
18 assert(a <= EVENT_HANDLER_MAX_ARGC); \
19 (event)->handler = h; \
20 if (a) { \
21 va_list args; \
22 va_start(args, a); \
23 for (int i = 0; i < a; i++) { \
24 (event)->argv[i] = va_arg(args, void *); \
25 } \
26 va_end(args); \
27 } \
28 } while (0)
29
30static inline Event event_create(argv_callback cb, int argc, ...)
31{
32 assert(argc <= EVENT_HANDLER_MAX_ARGC);
33 Event event;
34 VA_EVENT_INIT(&event, cb, argc);
35 return event;
36}
37
38#endif // NVIM_EVENT_DEFS_H
39