libdict
Data Structure C Library
Loading...
Searching...
No Matches
skiplist.h
Go to the documentation of this file.
1/*
2 * libdict -- skiplist interface.
3 *
4 * Copyright (c) 2001-2014, Farooq Mela
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions are met:
9 *
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
20 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28#ifndef LIBDICT_SKIPLIST_H__
29#define LIBDICT_SKIPLIST_H__
30
31#include "dict.h"
32
34
35typedef struct skiplist skiplist;
36
39size_t skiplist_free(skiplist* list, dict_delete_func delete_func);
40
42 skiplist_insert(skiplist* list, void* key);
43void** skiplist_search(skiplist* list, const void* key);
44void** skiplist_search_le(skiplist* list, const void* key);
45void** skiplist_search_lt(skiplist* list, const void* key);
46void** skiplist_search_ge(skiplist* list, const void* key);
47void** skiplist_search_gt(skiplist* list, const void* key);
48
50 skiplist_remove(skiplist* list, const void* key);
51size_t skiplist_clear(skiplist* list, dict_delete_func delete_func);
52size_t skiplist_traverse(skiplist* list, dict_visit_func visit, void* user_data);
53size_t skiplist_count(const skiplist* list);
54bool skiplist_verify(const skiplist* list);
55
56/* Compute the histogram of link counts of the skiplist.
57 * For 0 < x < |ncounts|, |counts|[x] will be set to the number of nodes with x
58 * links, and the maximal link count will be returned. If the return value is
59 * greater than or equal to |ncounts|, not all link counts could be stored in
60 * |counts| (i.e. the array was not large enough). */
62 size_t counts[], size_t ncounts);
63
65
69
70bool skiplist_itor_valid(const skiplist_itor* itor);
74bool skiplist_itor_nextn(skiplist_itor* itor, size_t count);
75bool skiplist_itor_prevn(skiplist_itor* itor, size_t count);
78bool skiplist_itor_search(skiplist_itor* itor, const void* key);
79bool skiplist_itor_search_le(skiplist_itor* itor, const void* key);
80bool skiplist_itor_search_lt(skiplist_itor* itor, const void* key);
81bool skiplist_itor_search_ge(skiplist_itor* itor, const void* key);
82bool skiplist_itor_search_gt(skiplist_itor* itor, const void* key);
83const void* skiplist_itor_key(const skiplist_itor* itor);
85int skiplist_itor_compare(const skiplist_itor* it1, const skiplist_itor* it2);
87
89
90#endif /* !LIBDICT_SKIPLIST_H__ */
#define BEGIN_DECL
Definition dict.h:35
int(* dict_compare_func)(const void *, const void *)
Definition dict.h:54
void(* dict_delete_func)(void *, void *)
Definition dict.h:57
#define END_DECL
Definition dict.h:36
bool(* dict_visit_func)(const void *, void *, void *)
Definition dict.h:59
void skiplist_itor_free(skiplist_itor *)
Definition skiplist.c:525
bool skiplist_itor_search_le(skiplist_itor *itor, const void *key)
Definition skiplist.c:606
size_t skiplist_traverse(skiplist *list, dict_visit_func visit, void *user_data)
Definition skiplist.c:428
skiplist * skiplist_new(dict_compare_func cmp_func, unsigned max_link)
Definition skiplist.c:111
bool skiplist_itor_search_gt(skiplist_itor *itor, const void *key)
Definition skiplist.c:624
bool skiplist_itor_remove(skiplist_itor *itor)
Definition skiplist.c:653
void ** skiplist_search_le(skiplist *list, const void *key)
Definition skiplist.c:334
void ** skiplist_search(skiplist *list, const void *key)
Definition skiplist.c:327
bool skiplist_itor_search(skiplist_itor *itor, const void *key)
Definition skiplist.c:600
bool skiplist_verify(const skiplist *list)
Definition skiplist.c:445
bool skiplist_itor_first(skiplist_itor *itor)
Definition skiplist.c:577
int skiplist_itor_compare(const skiplist_itor *it1, const skiplist_itor *it2)
Definition skiplist.c:642
bool skiplist_itor_next(skiplist_itor *itor)
Definition skiplist.c:543
bool skiplist_itor_prevn(skiplist_itor *itor, size_t count)
Definition skiplist.c:568
size_t skiplist_free(skiplist *list, dict_delete_func delete_func)
Definition skiplist.c:149
void skiplist_itor_invalidate(skiplist_itor *itor)
Definition skiplist.c:537
const void * skiplist_itor_key(const skiplist_itor *itor)
Definition skiplist.c:630
void ** skiplist_search_gt(skiplist *list, const void *key)
Definition skiplist.c:355
bool skiplist_itor_search_lt(skiplist_itor *itor, const void *key)
Definition skiplist.c:612
bool skiplist_itor_valid(const skiplist_itor *itor)
Definition skiplist.c:531
dict * skiplist_dict_new(dict_compare_func cmp_func, unsigned max_link)
Definition skiplist.c:135
void ** skiplist_search_ge(skiplist *list, const void *key)
Definition skiplist.c:348
bool skiplist_itor_search_ge(skiplist_itor *itor, const void *key)
Definition skiplist.c:618
void ** skiplist_itor_datum(skiplist_itor *itor)
Definition skiplist.c:636
dict_itor * skiplist_dict_itor_new(skiplist *list)
Definition skiplist.c:511
void ** skiplist_search_lt(skiplist *list, const void *key)
Definition skiplist.c:341
dict_insert_result skiplist_insert(skiplist *list, void *key)
Definition skiplist.c:183
bool skiplist_itor_nextn(skiplist_itor *itor, size_t count)
Definition skiplist.c:559
skiplist_itor * skiplist_itor_new(skiplist *list)
Definition skiplist.c:500
size_t skiplist_clear(skiplist *list, dict_delete_func delete_func)
Definition skiplist.c:408
size_t skiplist_count(const skiplist *list)
Definition skiplist.c:439
dict_remove_result skiplist_remove(skiplist *list, const void *key)
Definition skiplist.c:362
bool skiplist_itor_last(skiplist_itor *itor)
Definition skiplist.c:583
size_t skiplist_link_count_histogram(const skiplist *list, size_t counts[], size_t ncounts)
Definition skiplist.c:484
bool skiplist_itor_prev(skiplist_itor *itor)
Definition skiplist.c:551
Definition dict.h:151
skiplist * list
Definition skiplist.c:58
unsigned max_link
Definition skiplist.c:51
dict_compare_func cmp_func
Definition skiplist.c:53