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