xref: /minix3/minix/lib/libmagicrt/include/st/cb_template.h (revision b2ed49a5d83e311ee0fa9e5ff613639b1bf77aaf)
1 #undef xglue
2 #undef glue
3 #undef CALLBACK_TYPENAME
4 #undef CALLBACK_SETTERNAME
5 #undef DEFINE_CALLBACK
6 #undef DECLARE_CALLBACK
7 
8 #define xglue(x, y) x ## y
9 #define glue(x, y) xglue(x, y)
10 
11 #ifdef CALLBACK_FAMILY
12 #define CALLBACK_TYPENAME(name) glue(glue(glue(glue(glue(CALLBACK_PREFIX, _cb_), CALLBACK_FAMILY), _), name), _t)
13 #define CALLBACK_SETTERNAME(name) glue(glue(glue(glue(CALLBACK_PREFIX, _setcb_), CALLBACK_FAMILY), _), name)
14 #else
15 #define CALLBACK_TYPENAME(name) glue(glue(glue(CALLBACK_PREFIX, _cb_), name), _t)
16 #define CALLBACK_SETTERNAME(name) glue(glue(CALLBACK_PREFIX, _setcb_), name)
17 #endif
18 
19 #define DECLARE_CALLBACK(ret_type, name, args)                              \
20 typedef ret_type(*CALLBACK_TYPENAME(name))args
21 
22 #define DEFINE_DECL_CALLBACK(ret_type, name, args)                          \
23 DECLARE_CALLBACK(ret_type, name, args);                                     \
24 void CALLBACK_SETTERNAME(name)(CALLBACK_TYPENAME(name) cb)
25 
26 #define DEFINE_DECL_CALLBACK_CUSTOM(ret_type, name, args, setter_args)      \
27 DECLARE_CALLBACK(ret_type, name, args);                                     \
28 void CALLBACK_SETTERNAME(name)setter_args
29