1 #ifdef __cplusplus
2 extern "C" {
3 #endif
4 
5 #ifndef __TICKIT_EVLOOP_H__
6 #define __TICKIT_EVLOOP_H__
7 
8 /*
9  * The contents of this file should be considered entirely experimental, and
10  * subject to any change at any time. We make no API or ABI stability
11  * guarantees at this time.
12  */
13 
14 typedef struct TickitWatch TickitWatch; /* opaque */
15 
16 struct TickitEventHooks {
17   void *(*init)(Tickit *t, void *initdata);
18   void  (*destroy)(void *data);
19   void  (*run)(void *data, TickitRunFlags flags);
20   void  (*stop)(void *data);
21   bool  (*io)(void *data, int fd, TickitIOCondition cond, TickitBindFlags flags, TickitWatch *watch);
22   void  (*cancel_io)(void *data, TickitWatch *watch);
23   /* Below here is optional */
24   bool  (*timer)(void *data, const struct timeval *at, TickitBindFlags flags, TickitWatch *watch);
25   void  (*cancel_timer)(void *data, TickitWatch *watch);
26   bool  (*later)(void *data, TickitBindFlags flags, TickitWatch *watch);
27   void  (*cancel_later)(void *data, TickitWatch *watch);
28   bool  (*signal)(void *data, int signum, TickitBindFlags flags, TickitWatch *watch);
29   void  (*cancel_signal)(void *data, TickitWatch *watch);
30   bool  (*process)(void *data, pid_t pid, TickitBindFlags flags, TickitWatch *watch);
31   void  (*cancel_process)(void *data, TickitWatch *watch);
32 };
33 
34 /* Helper functions for eventloop implementations */
35 
36 int tickit_evloop_next_timer_msec(Tickit *t);
37 void tickit_evloop_invoke_timers(Tickit *t);
38 
39 void *tickit_evloop_get_watch_data(TickitWatch *watch);
40 void  tickit_evloop_set_watch_data(TickitWatch *watch, void *data);
41 
42 int  tickit_evloop_get_watch_data_int(TickitWatch *watch);
43 void tickit_evloop_set_watch_data_int(TickitWatch *watch, int data);
44 
45 void tickit_evloop_invoke_watch(TickitWatch *watch, TickitEventFlags flags);
46 void tickit_evloop_invoke_iowatch(TickitWatch *watch, TickitEventFlags flags, TickitIOCondition cond);
47 void tickit_evloop_invoke_processwatch(TickitWatch *watch, TickitEventFlags flags, int wstatus);
48 void tickit_evloop_invoke_sigwatches(Tickit *t, int signum);
49 void tickit_evloop_sigwinch(Tickit *t);
50 
51 Tickit *tickit_new_with_evloop(TickitTerm *tt, TickitEventHooks *evhooks, void *initdata);
52 
53 #endif
54 
55 #ifdef __cplusplus
56 }
57 #endif
58