libdict
Data Structure C Library
Loading...
Searching...
No Matches
rb_tree.h
Go to the documentation of this file.
1/*
2 * libdict -- red-black tree 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_RB_TREE_H__
29#define LIBDICT_RB_TREE_H__
30
31#include "dict.h"
32
34
35typedef struct rb_tree rb_tree;
36
39size_t rb_tree_free(rb_tree* tree, dict_delete_func delete_func);
40
42 rb_tree_insert(rb_tree* tree, void* key);
43void** rb_tree_search(rb_tree* tree, const void* key);
44void** rb_tree_search_le(rb_tree* tree, const void* key);
45void** rb_tree_search_lt(rb_tree* tree, const void* key);
46void** rb_tree_search_ge(rb_tree* tree, const void* key);
47void** rb_tree_search_gt(rb_tree* tree, const void* key);
49 rb_tree_remove(rb_tree* tree, const void* key);
50size_t rb_tree_clear(rb_tree* tree, dict_delete_func delete_func);
51size_t rb_tree_traverse(rb_tree* tree, dict_visit_func visit, void* user_data);
52bool rb_tree_select(rb_tree* tree, size_t n, const void** key, void** datum);
53size_t rb_tree_count(const rb_tree* tree);
57bool rb_tree_verify(const rb_tree* tree);
58
59typedef struct rb_itor rb_itor;
60
64
65bool rb_itor_valid(const rb_itor* itor);
66void rb_itor_invalidate(rb_itor* itor);
67bool rb_itor_next(rb_itor* itor);
68bool rb_itor_prev(rb_itor* itor);
69bool rb_itor_nextn(rb_itor* itor, size_t count);
70bool rb_itor_prevn(rb_itor* itor, size_t count);
71bool rb_itor_first(rb_itor* itor);
72bool rb_itor_last(rb_itor* itor);
73bool rb_itor_search(rb_itor* itor, const void* key);
74bool rb_itor_search_le(rb_itor* itor, const void* key);
75bool rb_itor_search_lt(rb_itor* itor, const void* key);
76bool rb_itor_search_ge(rb_itor* itor, const void* key);
77bool rb_itor_search_gt(rb_itor* itor, const void* key);
78const void* rb_itor_key(const rb_itor* itor);
79void** rb_itor_datum(rb_itor* itor);
80int rb_itor_compare(const rb_itor* i1, const rb_itor* i2);
81bool rb_itor_remove(rb_itor* itor);
82
84
85#endif /* !LIBDICT_RB_TREE_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 ** rb_tree_search_lt(rb_tree *tree, const void *key)
Definition rb_tree.c:172
size_t rb_tree_min_path_length(const rb_tree *tree)
Definition rb_tree.c:380
bool rb_itor_search_lt(rb_itor *itor, const void *key)
Definition rb_tree.c:630
bool rb_itor_search_ge(rb_itor *itor, const void *key)
Definition rb_tree.c:631
const void * rb_itor_key(const rb_itor *itor)
Definition rb_tree.c:633
rb_tree * rb_tree_new(dict_compare_func cmp_func)
Definition rb_tree.c:113
bool rb_itor_next(rb_itor *itor)
Definition rb_tree.c:591
bool rb_itor_valid(const rb_itor *itor)
Definition rb_tree.c:587
void ** rb_tree_search_ge(rb_tree *tree, const void *key)
Definition rb_tree.c:173
dict_itor * rb_dict_itor_new(rb_tree *tree)
Definition rb_tree.c:573
size_t rb_tree_traverse(rb_tree *tree, dict_visit_func visit, void *user_data)
Definition rb_tree.c:385
size_t rb_tree_total_path_length(const rb_tree *tree)
Definition rb_tree.c:382
void ** rb_tree_search(rb_tree *tree, const void *key)
Definition rb_tree.c:170
bool rb_itor_search_le(rb_itor *itor, const void *key)
Definition rb_tree.c:629
void rb_itor_invalidate(rb_itor *itor)
Definition rb_tree.c:588
size_t rb_tree_clear(rb_tree *tree, dict_delete_func delete_func)
Definition rb_tree.c:149
size_t rb_tree_max_path_length(const rb_tree *tree)
Definition rb_tree.c:381
rb_itor * rb_itor_new(rb_tree *tree)
Definition rb_tree.c:562
bool rb_itor_prevn(rb_itor *itor, size_t count)
Definition rb_tree.c:617
bool rb_itor_search(rb_itor *itor, const void *key)
Definition rb_tree.c:628
bool rb_itor_prev(rb_itor *itor)
Definition rb_tree.c:599
bool rb_itor_remove(rb_itor *itor)
Definition rb_tree.c:638
void ** rb_itor_datum(rb_itor *itor)
Definition rb_tree.c:634
bool rb_itor_first(rb_itor *itor)
Definition rb_tree.c:626
size_t rb_tree_free(rb_tree *tree, dict_delete_func delete_func)
Definition rb_tree.c:142
bool rb_itor_nextn(rb_itor *itor, size_t count)
Definition rb_tree.c:607
bool rb_itor_last(rb_itor *itor)
Definition rb_tree.c:627
dict_insert_result rb_tree_insert(rb_tree *tree, void *key)
Definition rb_tree.c:177
bool rb_tree_verify(const rb_tree *tree)
Definition rb_tree.c:545
void ** rb_tree_search_le(rb_tree *tree, const void *key)
Definition rb_tree.c:171
void rb_itor_free(rb_itor *tree)
Definition rb_tree.c:586
size_t rb_tree_count(const rb_tree *tree)
Definition rb_tree.c:379
dict * rb_dict_new(dict_compare_func cmp_func)
Definition rb_tree.c:128
dict_remove_result rb_tree_remove(rb_tree *tree, const void *key)
Definition rb_tree.c:294
bool rb_tree_select(rb_tree *tree, size_t n, const void **key, void **datum)
Definition rb_tree.c:400
bool rb_itor_search_gt(rb_itor *itor, const void *key)
Definition rb_tree.c:632
void ** rb_tree_search_gt(rb_tree *tree, const void *key)
Definition rb_tree.c:174
int rb_itor_compare(const rb_itor *i1, const rb_itor *i2)
Definition rb_tree.c:635
Definition dict.h:151
dict_compare_func cmp_func
Definition rb_tree.c:58