1 #ifndef __GS_EVENT_H__
2 #define __GS_EVENT_H__ 1
3 
4 
5 typedef int (*gsevent_cb_t)(void *event);
6 
7 
8 typedef struct
9 {
10 	void *mgr;
11 	uint64_t interval;
12 	uint64_t start;
13 	uint64_t due;
14 	GS_LIST_ITEM li;
15 
16 	void *data;
17 	size_t len;
18 	gsevent_cb_t func;
19 	int is_calloc;
20 	int id;
21 } GS_EVENT;
22 
23 /*
24  * Keep track of all events under a context
25  */
26 typedef struct
27 {
28 	GS_LIST list_ts;  // events by timestamp (usec)
29 	int id_counter;
30 	int is_return_to_caller;
31 } GS_EVENT_MGR;
32 
33 int GS_EVENT_MGR_init(GS_EVENT_MGR *mgr);
34 GS_EVENT *GS_EVENT_add_by_ts(GS_EVENT_MGR *mgr, GS_EVENT *gsevent, uint64_t start, uint64_t interval, gsevent_cb_t func, void *data, size_t len);
35 int GS_EVENT_del(GS_EVENT *gsevent);
36 uint64_t GS_EVENT_usec_until_event(GS_EVENT_MGR *mgr);
37 uint64_t GS_EVENT_execute(GS_EVENT_MGR *mgr);
38 uint64_t GS_EVENT_execute_all(GS_EVENT_MGR *mgr);
39 
40 #endif /* !__GS_EVENT_H__ */