Go to the documentation of this file.
22 #ifndef P99_CALLBACK_H
23 #define P99_CALLBACK_H 1
39 int p00_doxygen_is_confused(
void) {}
61 p99_callback_voidptr_func * p00_voidptr_func;
63 p99_callback_void_func * p00_void_func;
78 .p00_voidptr_func = p00_voidptr_func,
84 *p00_obj = (
p99_callback_el) { .p00_void = { .p00_void_func = p00_void_func, }, };
89 #define p99_callback_el_init_1(FUNC) \
90 P99_GENERIC((&*FUNC), \
92 (p99_callback_voidptr_func*, (p99_callback_voidptr_func*)(FUNC)), \
93 (p99_callback_void_func*, (p99_callback_voidptr_func*)0) \
97 #define p99_callback_el_init_2(FUNC) \
98 P99_GENERIC((&*FUNC), \
100 (p99_callback_void_func*, (p99_callback_void_func*)(FUNC)), \
101 (p99_callback_voidptr_func*, (p99_callback_void_func*)0) \
104 #define p99_callback_el_init_(OBJ, FUNC, ARG) \
105 p99_callback_el_init((OBJ), p99_callback_el_init_1(FUNC), p99_callback_el_init_2(FUNC), ARG)
108 #define p99_callback_el_init(...) \
109 P99_IF_LT(P99_NARG(__VA_ARGS__), 3) \
110 (p99_callback_el_init_(__VA_ARGS__, 0)) \
111 (p99_callback_el_init_(__VA_ARGS__))
116 if (p00_el.p00_voidptr_func) p00_el.p00_voidptr_func(p00_el.p00_void.p00_arg);
117 else if (p00_el.p00_void.p00_void_func) p00_el.p00_void.p00_void_func();
149 #define P99_CALLBACK_PUSH(STCK, ...) p00_callback_push((STCK), P99_NEW(p99_callback_el, __VA_ARGS__))
#define P99_LIFO_PUSH(L, EL)
Push element EL into an atomic LIFO L.
void p99_callback_voidptr_func(void *)
Function type for a callback with void* argument.
#define P99_LIFO_DECLARE(T)
struct p99_callback_el p99_callback_el
#define p99_inline
Try to force a function always to be inlined.
void p99_callback_el_call(p99_callback_el const p00_el)
#define P99_LIFO_CLEAR(L)
Atomically clear an atomic LIFO L and return a pointer to the start of the list that it previously co...
#define P99_DECLARE_STRUCT(NAME)
forward declaration of a struct NAME
void p99_callback(p99_callback_stack *p00_stck)
Call all functions that have been registered with p00_stck in reverse order of their registration and...
#define P99_POINTER_TYPE(T)
Declare derived pointer types with endings "_ptr" and "_cptr".
A data structure to register callbacks.
void p99_callback_void_func(void)
Function type for a callback without arguments.
p99_callback_el_ptr p99_lifo
struct p99_callback_stack p99_callback_stack
#define p99_callback_el_init(...)