57 cu_Destructor_Optional destructor);
64static inline size_t cu_List_size(
const cu_List *list) {
69static inline bool cu_List_is_empty(
const cu_List *list) {
cu_List_Error_Optional cu_List_push_front(cu_List *list, void *elem)
Definition list.c:43
bool cu_List_iter(const cu_List *list, cu_List_Node **node, void **out_elem)
Iterate over the list.
Definition list.c:148
cu_List_Error_Optional cu_List_pop_front(cu_List *list, void *out_elem)
Definition list.c:65
void cu_List_destroy(cu_List *list)
Destroy a list and free all nodes.
Definition list.c:23
cu_List_Error_Optional cu_List_insert_after(cu_List *list, cu_List_Node *node, void *elem)
Definition list.c:90
cu_List_Error
Error codes returned by list operations.
Definition list.h:36
@ CU_LIST_ERROR_INVALID
Definition list.h:40
@ CU_LIST_ERROR_NONE
Definition list.h:37
@ CU_LIST_ERROR_OOM
Definition list.h:38
@ CU_LIST_ERROR_EMPTY
Definition list.h:41
@ CU_LIST_ERROR_INVALID_LAYOUT
Definition list.h:39
cu_List_Result cu_List_create(cu_Allocator allocator, cu_Layout layout, cu_Destructor_Optional destructor)
Create an empty list.
Definition list.c:8
cu_List_Error_Optional cu_List_insert_before(cu_List *list, struct cu_List_Node *node, void *elem)
Definition list.c:122
#define CU_IF_NULL(expr)
Definition macro.h:6
#define CU_OPTIONAL_DECL(NAME, T)
Definition optional.h:25
#define CU_RESULT_DECL(NAME, T, E)
Definition result.h:23
Definition allocator.h:24
Node within a singly linked list.
Definition list.h:17
struct cu_List_Node * next
Definition list.h:18
unsigned char data[]
Definition list.h:19
Singly linked list container.
Definition list.h:25
size_t length
Definition list.h:27
cu_List_Node * head
Definition list.h:26
cu_Allocator allocator
Definition list.h:29
cu_Destructor_Optional destructor
Definition list.h:30
cu_Layout layout
Definition list.h:28