16 struct cu_DList_Node *prev;
17 struct cu_DList_Node *next;
23 struct cu_DList_Node *head;
24 struct cu_DList_Node *tail;
28 cu_Destructor_Optional destructor;
32 CU_DLIST_ERROR_NONE = 0,
34 CU_DLIST_ERROR_INVALID_LAYOUT,
35 CU_DLIST_ERROR_INVALID,
42cu_DList_Result cu_DList_create(
44void cu_DList_destroy(
cu_DList *list);
46static inline size_t cu_DList_size(
const cu_DList *list) {
51static inline bool cu_DList_is_empty(
const cu_DList *list) {
53 return list->length == 0;
56cu_DList_Error_Optional cu_DList_push_front(
cu_DList *list,
void *elem);
57cu_DList_Error_Optional cu_DList_push_back(
cu_DList *list,
void *elem);
58cu_DList_Error_Optional cu_DList_pop_front(
cu_DList *list,
void *out_elem);
59cu_DList_Error_Optional cu_DList_pop_back(
cu_DList *list,
void *out_elem);
60cu_DList_Error_Optional cu_DList_insert_after(
61 cu_DList *list,
struct cu_DList_Node *pos,
void *elem);
62cu_DList_Error_Optional cu_DList_insert_before(
63 cu_DList *list,
struct cu_DList_Node *pos,
void *elem);
66 const cu_DList *list,
struct cu_DList_Node **node,
void **out_elem);
#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