Callback multiplexer

cb_mux provides utilities for storing, retrieving, and managing callback information in a singly linked list.

If an API provides the ability to call multiple callbacks, cb_mux can simplify handling of an arbitrary number of callbacks by requiring memory for a cb_mux entry to be passed along with other arguments. The cb_mux entry is then attached to a list using cb_mux_add. The code implementing that API can manage the list using the various utility functions that cb_mux provides.

unsigned int cb_mux_cbid_t

cb_mux identifier type

void(* cb_mux_cb_t()

cb_mux callback type

struct cb_mux cb_mux_t

cb_mux list entry structure

void(* cb_mux_iter_t()

cb_mux iterate function callback type for cb_mux_iter

void cb_mux_add(cb_mux.h::cb_mux_t ** head, cb_mux.h::cb_mux_t * entry)

Add a new entry to the end of a cb_mux list.

Parameters

head:double pointer to first list entry
entry:entry to add

void cb_mux_del(cb_mux.h::cb_mux_t ** head, cb_mux.h::cb_mux_t * entry)

Remove a entry from a cb_mux list.

Parameters

head:double pointer to first list entry
entry:entry to remove

cb_mux.h::cb_mux_t * cb_mux_find_cbid(cb_mux.h::cb_mux_t * head, cb_mux.h::cb_mux_cbid_t cbid_val)

Find an entry in the list by ID.

Parameters

head:pointer to first list entry
cbid_val:ID to find

Return values

  • pointer to the list entry
cb_mux.h::cb_mux_t * cb_mux_find_low(cb_mux.h::cb_mux_t * head)

Find the entry with the lowest ID.

If there are multiple hits, this returns the oldest.

Parameters

head:pointer to first list entry

Return values

  • pointer to the list entry
cb_mux.h::cb_mux_t * cb_mux_find_high(cb_mux.h::cb_mux_t * head)

Find the entry with the highest ID.

If there are multiple hits, this returns the oldest.

Parameters

head:pointer to first list entry

Return values

  • pointer to the list entry
cb_mux.h::cb_mux_cbid_t cb_mux_find_free_id(cb_mux.h::cb_mux_t * head)

Find the lowest unused ID.

Returns highest possible ID on failure

Parameters

head:pointer to first list entry

Return values

  • lowest unused ID
void cb_mux_iter(cb_mux.h::cb_mux_t * head, cb_mux.h::cb_mux_iter_t func, void * arg)

Run a function on every item in the cb_mux list.

Parameters

head:pointer to first list entry
func:function to run on each entry
arg:argument for the function

struct cb_mux

cb_mux list entry structure

struct cb_mux * next

next entry in the cb_mux list

cb_mux.h::cb_mux_cbid_t cbid

identifier for this callback

void * info

optional extra information

cb_mux.h::cb_mux_cb_t cb

callback function

void * arg

argument for callback function