libdict
Data Structure C Library
Loading...
Searching...
No Matches
pr_tree.h
Go to the documentation of this file.
1/*
2 * libdict -- internal path reduction 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_PR_TREE_H__
29#define LIBDICT_PR_TREE_H__
30
31#include "dict.h"
32
34
35typedef struct pr_tree pr_tree;
36
39size_t pr_tree_free(pr_tree* tree, dict_delete_func delete_func);
40
42 pr_tree_insert(pr_tree* tree, void* key);
43void** pr_tree_search(pr_tree* tree, const void* key);
44void** pr_tree_search_le(pr_tree* tree, const void* key);
45void** pr_tree_search_lt(pr_tree* tree, const void* key);
46void** pr_tree_search_ge(pr_tree* tree, const void* key);
47void** pr_tree_search_gt(pr_tree* tree, const void* key);
49 pr_tree_remove(pr_tree* tree, const void* key);
50size_t pr_tree_clear(pr_tree* tree, dict_delete_func delete_func);
51size_t pr_tree_traverse(pr_tree* tree, dict_visit_func visit, void* user_data);
52bool pr_tree_select(pr_tree* tree, size_t n, const void** key, void** datum);
53size_t pr_tree_count(const pr_tree* tree);
57bool pr_tree_verify(const pr_tree* tree);
58
59typedef struct pr_itor pr_itor;
60
64
65bool pr_itor_valid(const pr_itor* itor);
66void pr_itor_invalidate(pr_itor* itor);
67bool pr_itor_next(pr_itor* itor);
68bool pr_itor_prev(pr_itor* itor);
69bool pr_itor_nextn(pr_itor* itor, size_t count);
70bool pr_itor_prevn(pr_itor* itor, size_t count);
71bool pr_itor_first(pr_itor* itor);
72bool pr_itor_last(pr_itor* itor);
73bool pr_itor_search(pr_itor* itor, const void* key);
74bool pr_itor_search_le(pr_itor* itor, const void* key);
75bool pr_itor_search_lt(pr_itor* itor, const void* key);
76bool pr_itor_search_ge(pr_itor* itor, const void* key);
77bool pr_itor_search_gt(pr_itor* itor, const void* key);
78const void* pr_itor_key(const pr_itor* itor);
79void** pr_itor_datum(pr_itor* itor);
80int pr_itor_compare(const pr_itor* i1, const pr_itor* i2);
81bool pr_itor_remove(pr_itor* itor);
82
84
85#endif /* !LIBDICT_PR_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
pr_tree * pr_tree_new(dict_compare_func cmp_func)
Definition pr_tree.c:98
size_t pr_tree_max_path_length(const pr_tree *tree)
Definition pr_tree.c:376
dict * pr_dict_new(dict_compare_func cmp_func)
Definition pr_tree.c:113
void ** pr_tree_search_gt(pr_tree *tree, const void *key)
Definition pr_tree.c:131
void ** pr_tree_search_lt(pr_tree *tree, const void *key)
Definition pr_tree.c:129
const void * pr_itor_key(const pr_itor *itor)
Definition pr_tree.c:530
bool pr_itor_next(pr_itor *itor)
Definition pr_tree.c:519
dict_itor * pr_dict_itor_new(pr_tree *tree)
Definition pr_tree.c:503
dict_insert_result pr_tree_insert(pr_tree *tree, void *key)
Definition pr_tree.c:252
size_t pr_tree_traverse(pr_tree *tree, dict_visit_func visit, void *user_data)
Definition pr_tree.c:341
bool pr_itor_prevn(pr_itor *itor, size_t count)
Definition pr_tree.c:522
bool pr_itor_nextn(pr_itor *itor, size_t count)
Definition pr_tree.c:521
dict_remove_result pr_tree_remove(pr_tree *tree, const void *key)
Definition pr_tree.c:328
bool pr_itor_valid(const pr_itor *itor)
Definition pr_tree.c:517
bool pr_itor_remove(pr_itor *itor)
Definition pr_tree.c:535
void ** pr_tree_search_ge(pr_tree *tree, const void *key)
Definition pr_tree.c:130
int pr_itor_compare(const pr_itor *i1, const pr_itor *i2)
Definition pr_tree.c:532
bool pr_itor_prev(pr_itor *itor)
Definition pr_tree.c:520
bool pr_tree_select(pr_tree *tree, size_t n, const void **key, void **datum)
Definition pr_tree.c:347
size_t pr_tree_min_path_length(const pr_tree *tree)
Definition pr_tree.c:377
bool pr_itor_last(pr_itor *itor)
Definition pr_tree.c:524
size_t pr_tree_clear(pr_tree *tree, dict_delete_func delete_func)
Definition pr_tree.c:338
bool pr_itor_search_le(pr_itor *itor, const void *key)
Definition pr_tree.c:526
bool pr_itor_search_ge(pr_itor *itor, const void *key)
Definition pr_tree.c:528
size_t pr_tree_free(pr_tree *tree, dict_delete_func delete_func)
Definition pr_tree.c:126
bool pr_itor_search(pr_itor *itor, const void *key)
Definition pr_tree.c:525
bool pr_itor_first(pr_itor *itor)
Definition pr_tree.c:523
void pr_itor_free(pr_itor *tree)
Definition pr_tree.c:516
void ** pr_tree_search_le(pr_tree *tree, const void *key)
Definition pr_tree.c:128
void ** pr_itor_datum(pr_itor *itor)
Definition pr_tree.c:531
size_t pr_tree_total_path_length(const pr_tree *tree)
Definition pr_tree.c:378
size_t pr_tree_count(const pr_tree *tree)
Definition pr_tree.c:375
bool pr_tree_verify(const pr_tree *tree)
Definition pr_tree.c:481
pr_itor * pr_itor_new(pr_tree *tree)
Definition pr_tree.c:492
void pr_itor_invalidate(pr_itor *itor)
Definition pr_tree.c:518
void ** pr_tree_search(pr_tree *tree, const void *key)
Definition pr_tree.c:127
bool pr_itor_search_gt(pr_itor *itor, const void *key)
Definition pr_tree.c:529
bool pr_itor_search_lt(pr_itor *itor, const void *key)
Definition pr_tree.c:527
Definition dict.h:151
dict_compare_func cmp_func
Definition pr_tree.c:46