libcute 0.1
Loading...
Searching...
No Matches
skip_list.h
Go to the documentation of this file.
1#pragma once
2
5#include "macro.h"
6#include "memory/allocator.h"
7#include "object/destructor.h"
8#include "object/optional.h"
9#include "object/result.h"
10#include "state.h"
11#include "utility.h"
12#include <stdbool.h>
13#include <stddef.h>
14
15#ifdef __cplusplus
16extern "C" {
17#endif
18
19typedef int (*cu_SkipList_CmpFn)(const void *a, const void *b);
20CU_OPTIONAL_DECL(cu_SkipList_CmpFn, cu_SkipList_CmpFn)
21
22
23struct cu_SkipList_Node {
24 struct cu_SkipList_Node **forward;
25 size_t level;
26 void *key;
27 void *value;
28};
31typedef struct {
32 struct cu_SkipList_Node *head;
33 size_t level;
34 size_t max_level;
35 cu_SkipList_CmpFn cmp;
36 cu_Layout key_layout;
37 cu_Layout value_layout;
38 cu_Allocator allocator;
39 cu_Destructor_Optional key_destructor;
40 cu_Destructor_Optional value_destructor;
43
44typedef enum {
45 CU_SKIPLIST_ERROR_NONE = 0,
46 CU_SKIPLIST_ERROR_OOM,
47 CU_SKIPLIST_ERROR_INVALID_LAYOUT,
48 CU_SKIPLIST_ERROR_INVALID,
49} cu_SkipList_Error;
50
51CU_RESULT_DECL(cu_SkipList, cu_SkipList, cu_SkipList_Error)
52CU_OPTIONAL_DECL(cu_SkipList_Error, cu_SkipList_Error)
53
54
55cu_SkipList_Result cu_SkipList_create(cu_Allocator allocator,
56 cu_Layout key_layout, cu_Layout value_layout, size_t max_level,
57 cu_SkipList_CmpFn_Optional cmp, cu_Destructor_Optional key_destructor,
58 cu_Destructor_Optional value_destructor, cu_State state);
59
60void cu_SkipList_destroy(cu_SkipList *list);
61
62cu_SkipList_Error_Optional cu_SkipList_insert(
63 cu_SkipList *list, void *key, void *value);
64
65Ptr_Optional cu_SkipList_find(const cu_SkipList *list, const void *key);
66
67cu_SkipList_Error_Optional cu_SkipList_remove(
68 cu_SkipList *list, const void *key);
69
70bool cu_SkipList_iter(const cu_SkipList *list, struct cu_SkipList_Node **node,
71 void **key, void **value);
72
73#ifdef __cplusplus
74}
75#endif
#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 utility.h:22
Definition skip_list.h:31
cu_State state
Definition skip_list.h:41
Definition state.h:15