/include/pr_tree.h
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__ */