00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef _SPLAY_TREE_H
00035 #define _SPLAY_TREE_H
00036
00037 #ifdef __cplusplus
00038 extern "C" {
00039 #endif
00040
00041 #include "ansidecl.h"
00042
00043
00044
00045
00046
00047 typedef unsigned long int splay_tree_key;
00048 typedef unsigned long int splay_tree_value;
00049
00050
00051 typedef struct splay_tree_node_s *splay_tree_node;
00052
00053
00054
00055 typedef int (*splay_tree_compare_fn) PARAMS((splay_tree_key, splay_tree_key));
00056
00057
00058
00059 typedef void (*splay_tree_delete_key_fn) PARAMS((splay_tree_key));
00060
00061
00062
00063 typedef void (*splay_tree_delete_value_fn) PARAMS((splay_tree_value));
00064
00065
00066 typedef int (*splay_tree_foreach_fn) PARAMS((splay_tree_node, void*));
00067
00068
00069
00070
00071
00072 typedef void *(*splay_tree_allocate_fn) PARAMS((int, void *));
00073
00074
00075
00076
00077
00078 typedef void (*splay_tree_deallocate_fn) PARAMS((void *, void *));
00079
00080
00081 struct splay_tree_node_s
00082 {
00083
00084 splay_tree_key key;
00085
00086
00087 splay_tree_value value;
00088
00089
00090 splay_tree_node left;
00091 splay_tree_node right;
00092 };
00093
00094
00095 typedef struct splay_tree_s
00096 {
00097
00098 splay_tree_node root;
00099
00100
00101 splay_tree_compare_fn comp;
00102
00103
00104 splay_tree_delete_key_fn delete_key;
00105
00106
00107 splay_tree_delete_value_fn delete_value;
00108
00109
00110 splay_tree_allocate_fn allocate;
00111 splay_tree_deallocate_fn deallocate;
00112 void *allocate_data;
00113
00114 } *splay_tree;
00115
00116 extern splay_tree splay_tree_new PARAMS((splay_tree_compare_fn,
00117 splay_tree_delete_key_fn,
00118 splay_tree_delete_value_fn));
00119 extern splay_tree splay_tree_new_with_allocator
00120 PARAMS((splay_tree_compare_fn,
00121 splay_tree_delete_key_fn,
00122 splay_tree_delete_value_fn,
00123 splay_tree_allocate_fn,
00124 splay_tree_deallocate_fn,
00125 void *));
00126 extern void splay_tree_delete PARAMS((splay_tree));
00127 extern splay_tree_node splay_tree_insert
00128 PARAMS((splay_tree,
00129 splay_tree_key,
00130 splay_tree_value));
00131 extern void splay_tree_remove PARAMS((splay_tree,
00132 splay_tree_key));
00133 extern splay_tree_node splay_tree_lookup
00134 PARAMS((splay_tree,
00135 splay_tree_key));
00136 extern splay_tree_node splay_tree_predecessor
00137 PARAMS((splay_tree,
00138 splay_tree_key));
00139 extern splay_tree_node splay_tree_successor
00140 PARAMS((splay_tree,
00141 splay_tree_key));
00142 extern splay_tree_node splay_tree_max
00143 PARAMS((splay_tree));
00144 extern splay_tree_node splay_tree_min
00145 PARAMS((splay_tree));
00146 extern int splay_tree_foreach PARAMS((splay_tree,
00147 splay_tree_foreach_fn,
00148 void*));
00149 extern int splay_tree_compare_ints PARAMS((splay_tree_key,
00150 splay_tree_key));
00151 extern int splay_tree_compare_pointers PARAMS((splay_tree_key,
00152 splay_tree_key));
00153
00154 #ifdef __cplusplus
00155 }
00156 #endif
00157
00158 #endif