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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
#ifndef NAVIT_CALLBACK_H
#define NAVIT_CALLBACK_H
#ifdef __cplusplus
extern "C" {
#endif
/* prototypes */
struct callback;
struct callback_list;
struct callback_list *callback_list_new(void);
struct callback *callback_new(void (*func)(void), int pcount, void **p);
void callback_list_add(struct callback_list *l, struct callback *cb);
struct callback *callback_list_add_new(struct callback_list *l, void (*func)(void), int pcount, void **p);
void callback_list_remove(struct callback_list *l, struct callback *cb);
void callback_list_remove_destroy(struct callback_list *l, struct callback *cb);
void callback_call(struct callback *cb, int pcount, void **p);
void callback_list_call(struct callback_list *l, int pcount, void **p);
void callback_list_destroy(struct callback_list *l);
/* end of prototypes */
static inline struct callback *callback_new_0(void (*func)(void))
{
return callback_new(func, 0, NULL);
}
static inline struct callback *callback_new_1(void (*func)(void), void *p1)
{
void *p[1];
p[0]=p1;
return callback_new(func, 1, p);
}
static inline struct callback *callback_new_2(void (*func)(void), void *p1, void *p2)
{
void *p[2];
p[0]=p1;
p[1]=p2;
return callback_new(func, 2, p);
}
static inline void callback_call_0(struct callback *cb)
{
callback_call(cb, 0, NULL);
}
static inline void callback_call_1(struct callback *cb, void *p1)
{
void *p[1];
p[0]=p1;
callback_call(cb, 1, p);
}
static inline void callback_list_call_0(struct callback_list *l)
{
callback_list_call(l, 0, NULL);
}
static inline void callback_list_call_1(struct callback_list *l, void *p1)
{
void *p[1];
p[0]=p1;
callback_list_call(l, 1, p);
}
static inline void callback_list_call_2(struct callback_list *l, void *p1, void *p2)
{
void *p[2];
p[0]=p1;
p[1]=p2;
callback_list_call(l, 2, p);
}
#define callback_cast(x) (void (*)(void))(x)
#ifdef __cplusplus
}
#endif
#endif
|