Skip to content

Commit ea4919c

Browse files
authored
Merge pull request #649 from sanpeqf/docs-skiplist
docs skiplist: added api comments
2 parents 8cfc423 + e08933b commit ea4919c

2 files changed

Lines changed: 53 additions & 21 deletions

File tree

include/bfdev/skiplist.h

Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,26 +29,55 @@ struct bfdev_skip_head {
2929
bfdev_list_head_t nodes[0];
3030
};
3131

32+
/**
33+
* bfdev_skiplist_find - find a node in the skiplist.
34+
* @head: the skiplist head to find in.
35+
* @find: the find function for this skiplist.
36+
* @pdata: the private data for @find.
37+
*/
38+
extern bfdev_skip_node_t *
39+
bfdev_skiplist_find(bfdev_skip_head_t *head, bfdev_find_t find, void *pdata);
40+
41+
/**
42+
* bfdev_skiplist_insert - insert a node into the skiplist.
43+
* @head: the skiplist head to insert into.
44+
* @key: the key for this skiplist.
45+
* @cmp: the compare function for this skiplist.
46+
* @pdata: the private data for @cmp.
47+
*/
3248
extern int
33-
bfdev_skiplist_insert(bfdev_skip_head_t *head, void *key, bfdev_cmp_t cmp,
34-
void *pdata);
49+
bfdev_skiplist_insert(bfdev_skip_head_t *head, void *key,
50+
bfdev_cmp_t cmp, void *pdata);
3551

36-
extern void
52+
/**
53+
* bfdev_skiplist_delete - delete a node from the skiplist.
54+
* @head: the skiplist head to delete from.
55+
* @find: the find function for this skiplist.
56+
* @pdata: the private data for @find.
57+
*/
58+
extern int
3759
bfdev_skiplist_delete(bfdev_skip_head_t *head, bfdev_find_t find, void *pdata);
3860

39-
extern bfdev_skip_node_t *
40-
bfdev_skiplist_find(bfdev_skip_head_t *head, bfdev_find_t find, void *pdata);
41-
61+
/**
62+
* bfdev_skiplist_reset - reset all nodes in a skiplist.
63+
* @head: the skiplist head to reset.
64+
* @release: the function to release each node.
65+
* @pdata: the private data for @release.
66+
*/
4267
extern void
43-
bfdev_skiplist_reset(bfdev_skip_head_t *head, bfdev_release_t release,
44-
void *pdata);
45-
68+
bfdev_skiplist_reset(bfdev_skip_head_t *head,
69+
bfdev_release_t release, void *pdata);
70+
/**
71+
* bfdev_skiplist_create - create a skiplist header.
72+
* @alloc: the allocator for this skiplist.
73+
* @levels: the levels for this skiplist.
74+
*/
4675
extern bfdev_skip_head_t *
4776
bfdev_skiplist_create(const bfdev_alloc_t *alloc, unsigned int levels);
4877

4978
extern void
50-
bfdev_skiplist_destroy(bfdev_skip_head_t *head, bfdev_release_t release,
51-
void *pdata);
79+
bfdev_skiplist_destroy(bfdev_skip_head_t *head,
80+
bfdev_release_t release, void *pdata);
5281

5382
/**
5483
* bfdev_skiplist_for_each - iterate over list of given type.

src/skiplist.c

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,16 @@ skipnode_find(bfdev_skip_head_t *head, bfdev_find_t find,
6060
return NULL;
6161
}
6262

63+
export bfdev_skip_node_t *
64+
bfdev_skiplist_find(bfdev_skip_head_t *head, bfdev_find_t find, void *pdata)
65+
{
66+
bfdev_skip_node_t *node;
67+
68+
node = skipnode_find(head, find, pdata, NULL);
69+
70+
return node;
71+
}
72+
6373
export int
6474
bfdev_skiplist_insert(bfdev_skip_head_t *head, void *key, bfdev_cmp_t cmp,
6575
void *pdata)
@@ -100,7 +110,7 @@ bfdev_skiplist_insert(bfdev_skip_head_t *head, void *key, bfdev_cmp_t cmp,
100110
return 0;
101111
}
102112

103-
export void
113+
export int
104114
bfdev_skiplist_delete(bfdev_skip_head_t *head, bfdev_find_t find, void *pdata)
105115
{
106116
const bfdev_alloc_t *alloc;
@@ -110,7 +120,7 @@ bfdev_skiplist_delete(bfdev_skip_head_t *head, bfdev_find_t find, void *pdata)
110120
alloc = head->alloc;
111121
node = skipnode_find(head, find, pdata, &level);
112122
if (bfdev_unlikely(!node))
113-
return;
123+
return -BFDEV_ENOENT;
114124

115125
while (level--) {
116126
bfdev_list_del(&node->list[level]);
@@ -119,15 +129,8 @@ bfdev_skiplist_delete(bfdev_skip_head_t *head, bfdev_find_t find, void *pdata)
119129
}
120130

121131
bfdev_free(alloc, node);
122-
}
123132

124-
export bfdev_skip_node_t *
125-
bfdev_skiplist_find(bfdev_skip_head_t *head,
126-
bfdev_find_t find, void *pdata)
127-
{
128-
bfdev_skip_node_t *node;
129-
node = skipnode_find(head, find, pdata, NULL);
130-
return node;
133+
return -BFDEV_ENOERR;
131134
}
132135

133136
static void

0 commit comments

Comments
 (0)