gdsl
1.8
|
00001 /* 00002 * This file is part of the Generic Data Structures Library (GDSL). 00003 * Copyright (C) 1998-2018 Nicolas Darnis <ndarnis@free.fr>. 00004 * 00005 * GDSL is free software: you can redistribute it and/or modify 00006 * it under the terms of the GNU General Public License as published by 00007 * the Free Software Foundation, either version 3 of the License, or 00008 * (at your option) any later version. 00009 * 00010 * GDSL is distributed in the hope that it will be useful, 00011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 * GNU General Public License for more details. 00014 * 00015 * You should have received a copy of the GNU General Public License 00016 * along with GDSL. If not, see <http://www.gnu.org/licenses/>. 00017 */ 00018 00019 /* 00020 * GDSL - Generic Data Structures Library 00021 * $RCSfile: gdsl_rbtree.h,v $ 00022 * $Revision: 1.21 $ 00023 * $Date: 2015/02/17 12:22:57 $ 00024 */ 00025 00026 00027 #ifndef _GDSL_RBTREE_H_ 00028 #define _GDSL_RBTREE_H_ 00029 00030 00031 #include "gdsl_types.h" 00032 #include "_gdsl_bintree.h" 00033 #include "gdsl_macros.h" 00034 00035 00036 #ifdef __cplusplus 00037 extern "C" 00038 { 00039 #endif /* __cplusplus */ 00040 00053 typedef struct gdsl_rbtree* gdsl_rbtree_t; 00054 00055 /******************************************************************************/ 00056 /* Management functions of red-black trees */ 00057 /******************************************************************************/ 00058 00082 extern gdsl_rbtree_t 00083 gdsl_rbtree_alloc (const char* NAME, 00084 gdsl_alloc_func_t ALLOC_F, 00085 gdsl_free_func_t FREE_F, 00086 gdsl_compare_func_t COMP_F 00087 ); 00088 00102 extern void 00103 gdsl_rbtree_free (gdsl_rbtree_t T 00104 ); 00105 00118 extern void 00119 gdsl_rbtree_flush (gdsl_rbtree_t T 00120 ); 00121 00122 /******************************************************************************/ 00123 /* Consultation functions of red-black trees */ 00124 /******************************************************************************/ 00125 00135 extern char* 00136 gdsl_rbtree_get_name (const gdsl_rbtree_t T 00137 ); 00138 00147 extern bool 00148 gdsl_rbtree_is_empty (const gdsl_rbtree_t T 00149 ); 00150 00158 extern gdsl_element_t 00159 gdsl_rbtree_get_root (const gdsl_rbtree_t T 00160 ); 00161 00170 extern ulong 00171 gdsl_rbtree_get_size (const gdsl_rbtree_t T 00172 ); 00173 00182 extern ulong 00183 gdsl_rbtree_height (const gdsl_rbtree_t T 00184 ); 00185 00186 /******************************************************************************/ 00187 /* Modification functions of red-black trees */ 00188 /******************************************************************************/ 00189 00203 extern gdsl_rbtree_t 00204 gdsl_rbtree_set_name (gdsl_rbtree_t T, 00205 const char* NEW_NAME 00206 ); 00207 00230 extern gdsl_element_t 00231 gdsl_rbtree_insert (gdsl_rbtree_t T, 00232 void* VALUE, 00233 int* RESULT 00234 ); 00235 00252 extern gdsl_element_t 00253 gdsl_rbtree_remove (gdsl_rbtree_t T, 00254 void* VALUE 00255 ); 00256 00274 extern gdsl_rbtree_t 00275 gdsl_rbtree_delete (gdsl_rbtree_t T, 00276 void* VALUE 00277 ); 00278 00279 /******************************************************************************/ 00280 /* Search functions of red-black trees */ 00281 /******************************************************************************/ 00282 00302 extern gdsl_element_t 00303 gdsl_rbtree_search (const gdsl_rbtree_t T, 00304 gdsl_compare_func_t COMP_F, 00305 void* VALUE 00306 ); 00307 00308 /******************************************************************************/ 00309 /* Parse functions of red-black trees */ 00310 /******************************************************************************/ 00311 00330 extern gdsl_element_t 00331 gdsl_rbtree_map_prefix (const gdsl_rbtree_t T, 00332 gdsl_map_func_t MAP_F, 00333 void* USER_DATA 00334 ); 00335 00354 extern gdsl_element_t 00355 gdsl_rbtree_map_infix (const gdsl_rbtree_t T, 00356 gdsl_map_func_t MAP_F, 00357 void* USER_DATA 00358 ); 00359 00378 extern gdsl_element_t 00379 gdsl_rbtree_map_postfix (const gdsl_rbtree_t T, 00380 gdsl_map_func_t MAP_F, 00381 void* USER_DATA 00382 ); 00383 00384 /******************************************************************************/ 00385 /* Input/output functions of red-black trees */ 00386 /******************************************************************************/ 00387 00404 extern void 00405 gdsl_rbtree_write (const gdsl_rbtree_t T, 00406 gdsl_write_func_t WRITE_F, 00407 FILE* OUTPUT_FILE, 00408 void* USER_DATA 00409 ); 00410 00429 extern void 00430 gdsl_rbtree_write_xml (const gdsl_rbtree_t T, 00431 gdsl_write_func_t WRITE_F, 00432 FILE* OUTPUT_FILE, 00433 void* USER_DATA 00434 ); 00435 00453 extern void 00454 gdsl_rbtree_dump (const gdsl_rbtree_t T, 00455 gdsl_write_func_t WRITE_F, 00456 FILE* OUTPUT_FILE, 00457 void* USER_DATA 00458 ); 00459 00465 #ifdef __cplusplus 00466 } 00467 #endif /* __cplusplus */ 00468 00469 00470 #endif /* _GDSL_RBTREE_H_ */ 00471 00472