gdsl  1.8
gdsl_rbtree.h
Go to the documentation of this file.
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