Data Structures | |
struct | cu_hook_node |
struct | cu_iter_hook |
struct | cu_iterA_hook |
struct | cu_iter_ptr_hook |
struct | cu_iterA_ptr_hook |
struct | cu_ptr_compose_hook |
Defines | |
#define | CU_HOOK_TEMPLATE(name, f_decl) |
#define | CU_HOOK_NEXT(node) cu_from(cu_hook_node, cu_dlink, cu_to(cu_dlink, node)->next) |
#define | CU_HOOK_FOR(node, hook) |
Typedefs | |
typedef struct cu_hook_node * | cu_hook_node_t |
typedef struct cu_iter_hook * | cu_iter_hook_t |
typedef struct cu_iterA_hook * | cu_iterA_hook_t |
typedef struct cu_iter_ptr_hook * | cu_iter_ptr_hook_t |
typedef struct cu_iterA_ptr_hook * | cu_iterA_ptr_hook_t |
typedef struct cu_ptr_compose_hook * | cu_ptr_compose_hook_t |
Functions | |
void | cu_iter_hook_init (cu_iter_hook_t hook) |
cu_bool_t | cu_iter_hook_is_empty (cu_iter_hook_t hook) |
void | cu_iter_hook_prepend (cu_iter_hook_t hook, cu_clop0(f, void)) |
void | cu_iter_hook_append (cu_iter_hook_t hook, cu_clop0(f, void)) |
void | cu_iter_hook_call (cu_iter_hook_t hook) |
void | cu_iterA_hook_init (cu_iterA_hook_t hook) |
cu_bool_t | cu_iterA_hook_is_empty (cu_iterA_hook_t hook) |
void | cu_iterA_hook_prepend (cu_iterA_hook_t hook, cu_clop0(f, cu_bool_t)) |
void | cu_iterA_hook_append (cu_iterA_hook_t hook, cu_clop0(f, cu_bool_t)) |
cu_bool_t | cu_iterA_hook_call (cu_iterA_hook_t hook) |
void | cu_iter_ptr_hook_init (cu_iter_ptr_hook_t hook) |
cu_bool_t | cu_iter_ptr_hook_is_empty (cu_iter_ptr_hook_t hook) |
void | cu_iter_ptr_hook_prepend (cu_iter_ptr_hook_t hook, cu_clop(f, void, void *)) |
void | cu_iter_ptr_hook_append (cu_iter_ptr_hook_t hook, cu_clop(f, void, void *)) |
void | cu_iter_ptr_hook_call (cu_iter_ptr_hook_t hook, void *arg) |
void | cu_iterA_ptr_hook_init (cu_iterA_ptr_hook_t hook) |
cu_bool_t | cu_iterA_ptr_hook_is_empty (cu_iterA_ptr_hook_t hook) |
void | cu_iterA_ptr_hook_prepend (cu_iterA_ptr_hook_t hook, cu_clop(f, cu_bool_t, void *)) |
void | cu_iterA_ptr_hook_append (cu_iterA_ptr_hook_t hook, cu_clop(f, cu_bool_t, void *)) |
cu_bool_t | cu_iterA_ptr_hook_call (cu_iterA_ptr_hook_t hook, void *arg) |
void | cu_ptr_compose_hook_init (cu_ptr_compose_hook_t hook) |
cu_bool_t | cu_ptr_compose_hook_is_empty (cu_ptr_compose_hook_t hook) |
void | cu_ptr_compose_hook_prepend (cu_ptr_compose_hook_t hook, cu_clop(f, void *, void *)) |
void | cu_ptr_compose_hook_append (cu_ptr_compose_hook_t hook, cu_clop(f, void *, void *)) |
void * | cu_ptr_compose_hook_call (cu_ptr_compose_hook_t hook, void *arg) |
#define CU_HOOK_FOR | ( | node, | |||
hook | ) |
for (node = CU_HOOK_NEXT(cu_to(cu_hook_node, hook)); \ node != cu_to(cu_hook_node, hook); \ node = CU_HOOK_NEXT(node))
A template for a for-loop header which iterates over entries of hook. Each entry is assigned to node, which bust be declared with type cu_hook_node_t.
#define CU_HOOK_NEXT | ( | node | ) | cu_from(cu_hook_node, cu_dlink, cu_to(cu_dlink, node)->next) |
Initialise hook as an empty hook. True iff hook is empty. Arrange for f to be called before current entries of hook. Arrange for f to be called after current entries of hook.
#define CU_HOOK_TEMPLATE | ( | name, | |||
f_decl | ) |
typedef struct name *name##_t; /* abstract */ \ struct name { cu_inherit (cu_hook_node); }; \ \ \ CU_SINLINE void name##_init(name##_t hook) \ { cuP_hook_init((cu_hook_node_t)hook); } \ \ \ CU_SINLINE cu_bool_t name##_is_empty(name##_t hook) \ { return cu_dlink_is_singleton(cu_to2(cu_dlink, cu_hook_node, hook)); }\ \ \ CU_SINLINE void name##_prepend(name##_t hook, f_decl) \ { cuP_hook_prepend((cu_hook_node_t)hook, (cu_clop0(, void))f); } \ \ \ CU_SINLINE void name##_append(name##_t hook, f_decl) \ { cuP_hook_append((cu_hook_node_t)hook, (cu_clop0(, void))f); }
A template for defining a new hook with name prefix name. f_decl must declare a closure pointer parameter f. This template defines an opaque pointer type which can be cast to cu_hook_node_t and functions with suffixes _init, _prepend, and _append. The _call function is hook dependent, and can be defined using CU_HOOK_FOR.
typedef struct cu_hook_node* cu_hook_node_t |
A node of a hook for use in hook implementations.
void cu_iter_hook_call | ( | cu_iter_hook_t | hook | ) |
Calls each entry of hook in order.
void cu_iter_ptr_hook_call | ( | cu_iter_ptr_hook_t | hook, | |
void * | arg | |||
) |
Calls each entry of hook in order.
cu_bool_t cu_iterA_hook_call | ( | cu_iterA_hook_t | hook | ) |
Calls each entry of hook in order as long as true is returned, and returns the conjunction of the return values.
cu_bool_t cu_iterA_ptr_hook_call | ( | cu_iterA_ptr_hook_t | hook, | |
void * | arg | |||
) |
Calls each entry of hook in order as long as true is returned, and returns the conjunction of the return values.
void* cu_ptr_compose_hook_call | ( | cu_ptr_compose_hook_t | hook, | |
void * | arg | |||
) |
Evaluates the composition of the functions in hook applied to arg, or returns NULL
as soon as an entry returns NULL
.