PageRenderTime 23ms CodeModel.GetById 18ms app.highlight 3ms RepoModel.GetById 1ms app.codeStats 0ms

/include/pr_tree.h

http://github.com/fmela/libdict
C Header | 85 lines | 48 code | 11 blank | 26 comment | 0 complexity | bb757433820bcc52541e2e8585470149 MD5 | raw file
Possible License(s): BSD-2-Clause
 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
33BEGIN_DECL
34
35typedef struct pr_tree pr_tree;
36
37pr_tree*	pr_tree_new(dict_compare_func cmp_func);
38dict*		pr_dict_new(dict_compare_func cmp_func);
39size_t		pr_tree_free(pr_tree* tree, dict_delete_func delete_func);
40
41dict_insert_result
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);
48dict_remove_result
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);
54size_t		pr_tree_min_path_length(const pr_tree* tree);
55size_t		pr_tree_max_path_length(const pr_tree* tree);
56size_t		pr_tree_total_path_length(const pr_tree* tree);
57bool		pr_tree_verify(const pr_tree* tree);
58
59typedef struct pr_itor pr_itor;
60
61pr_itor*	pr_itor_new(pr_tree* tree);
62dict_itor*	pr_dict_itor_new(pr_tree* tree);
63void		pr_itor_free(pr_itor* tree);
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
83END_DECL
84
85#endif /* !LIBDICT_PR_TREE_H__ */