summaryrefslogtreecommitdiff
path: root/minix/lib/libmagicrt/include/st/cb_template.h
blob: bf3954bbbc4b995cecc7515ef19cebcf3b22b908 (plain)
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
#undef xglue
#undef glue
#undef CALLBACK_TYPENAME
#undef CALLBACK_SETTERNAME
#undef DEFINE_CALLBACK
#undef DECLARE_CALLBACK

#define xglue(x, y) x ## y
#define glue(x, y) xglue(x, y)

#ifdef CALLBACK_FAMILY
#define CALLBACK_TYPENAME(name) glue(glue(glue(glue(glue(CALLBACK_PREFIX, _cb_), CALLBACK_FAMILY), _), name), _t)
#define CALLBACK_SETTERNAME(name) glue(glue(glue(glue(CALLBACK_PREFIX, _setcb_), CALLBACK_FAMILY), _), name)
#else
#define CALLBACK_TYPENAME(name) glue(glue(glue(CALLBACK_PREFIX, _cb_), name), _t)
#define CALLBACK_SETTERNAME(name) glue(glue(CALLBACK_PREFIX, _setcb_), name)
#endif

#define DECLARE_CALLBACK(ret_type, name, args)                              \
typedef ret_type(*CALLBACK_TYPENAME(name))args

#define DEFINE_DECL_CALLBACK(ret_type, name, args)                          \
DECLARE_CALLBACK(ret_type, name, args);                                     \
void CALLBACK_SETTERNAME(name)(CALLBACK_TYPENAME(name) cb)

#define DEFINE_DECL_CALLBACK_CUSTOM(ret_type, name, args, setter_args)      \
DECLARE_CALLBACK(ret_type, name, args);                                     \
void CALLBACK_SETTERNAME(name)setter_args