00001 #ifdef __cplusplus
00002 extern "C" {
00003 #endif
00004
00005 #ifndef CDSA_BST_H
00006 #define CDSA_BST_H
00007
00008 #include <string.h>
00009 #include <stdbool.h>
00010
00011 #include "cdsa_types.h"
00012
00039 typedef struct Bst Bst;
00040 struct Bst;
00041
00047
00060 cdsa_status_t bst_new(Bst **new_bst, cdsa_compare_func_t compare, cdsa_destroy_map_func_t destroy);
00061
00062
00072 cdsa_status_t bst_destroy(Bst **tree);
00073
00083 cdsa_status_t bst_is_empty(const Bst *const tree, bool *is_empty);
00084
00094 cdsa_status_t bst_size(const Bst *const tree, size_t *size);
00095
00107 cdsa_status_t bst_has_key(const Bst *const tree, const void *const key, bool *has_key);
00108
00121 cdsa_status_t bst_get(const Bst *const tree, const void *const key, void *ptr);
00122
00136 cdsa_status_t bst_put(Bst *const tree, const void *const key, void *const value, void *prev);
00137
00153 cdsa_status_t bst_remove(Bst *const tree, const void *const key, void *prev_val);
00154
00156
00162
00168 cdsa_status_t bst_predecessor(Bst *tree, void *key, void *pred);
00169
00175 cdsa_status_t bst_successor(Bst *tree, void *key, void *succ);
00176
00182 cdsa_status_t bst_min(Bst *tree, void *min_key);
00183
00189 cdsa_status_t bst_max(Bst *tree, void *max_key);
00190
00196 cdsa_status_t bst_pre_order_walk(Bst *tree, cdsa_visit_map_func_t f);
00197
00203 cdsa_status_t bst_in_order_walk(Bst *tree, cdsa_visit_map_func_t f);
00204
00210 cdsa_status_t bst_post_order_walk(Bst *tree, cdsa_visit_map_func_t f);
00211
00213
00214 #ifdef __cplusplus
00215 }
00216 #endif
00217
00218 #endif
00219