19typedef int (*cu_SkipList_CmpFn)(
const void *a,
const void *b);
23struct cu_SkipList_Node {
24 struct cu_SkipList_Node **forward;
32 struct cu_SkipList_Node *head;
35 cu_SkipList_CmpFn cmp;
39 cu_Destructor_Optional key_destructor;
40 cu_Destructor_Optional value_destructor;
45 CU_SKIPLIST_ERROR_NONE = 0,
46 CU_SKIPLIST_ERROR_OOM,
47 CU_SKIPLIST_ERROR_INVALID_LAYOUT,
48 CU_SKIPLIST_ERROR_INVALID,
57 cu_SkipList_CmpFn_Optional cmp, cu_Destructor_Optional key_destructor,
58 cu_Destructor_Optional value_destructor,
cu_State state);
62cu_SkipList_Error_Optional cu_SkipList_insert(
65Ptr_Optional cu_SkipList_find(
const cu_SkipList *list,
const void *key);
67cu_SkipList_Error_Optional cu_SkipList_remove(
70bool cu_SkipList_iter(
const cu_SkipList *list,
struct cu_SkipList_Node **node,
71 void **key,
void **value);
#define CU_OPTIONAL_DECL(NAME, T)
Definition optional.h:25
#define CU_RESULT_DECL(NAME, T, E)
Definition result.h:23
cu_SkipList_Result cu_SkipList_create(cu_Allocator allocator, cu_Layout key_layout, cu_Layout value_layout, size_t max_level, cu_SkipList_CmpFn_Optional cmp, cu_Destructor_Optional key_destructor, cu_Destructor_Optional value_destructor, cu_State state)
Definition skip_list.c:74
Definition allocator.h:24
Definition skip_list.h:31
cu_State state
Definition skip_list.h:41