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 #ifndef GTY
00044 #define GTY(X)
00045 #endif
00046
00047
00048
00049
00050
00051 typedef unsigned long int splay_tree_key;
00052 typedef unsigned long int splay_tree_value;
00053
00054
00055 typedef struct splay_tree_node_s *splay_tree_node;
00056
00057
00058
00059 typedef int (*splay_tree_compare_fn) PARAMS((splay_tree_key, splay_tree_key));
00060
00061
00062
00063 typedef void (*splay_tree_delete_key_fn) PARAMS((splay_tree_key));
00064
00065
00066
00067 typedef void (*splay_tree_delete_value_fn) PARAMS((splay_tree_value));
00068
00069
00070 typedef int (*splay_tree_foreach_fn) PARAMS((splay_tree_node, void*));
00071
00072
00073
00074
00075
00076 typedef PTR (*splay_tree_allocate_fn) PARAMS((int, void *));
00077
00078
00079
00080
00081
00082 typedef void (*splay_tree_deallocate_fn) PARAMS((void *, void *));
00083
00084
00085 struct splay_tree_node_s GTY(())
00086 {
00087
00088 splay_tree_key GTY ((use_param1)) key;
00089
00090
00091 splay_tree_value GTY ((use_param2)) value;
00092
00093
00094 splay_tree_node GTY ((use_params)) left;
00095 splay_tree_node GTY ((use_params)) right;
00096 };
00097
00098
00099 struct splay_tree_s GTY(())
00100 {
00101
00102 splay_tree_node GTY ((use_params)) root;
00103
00104
00105 splay_tree_compare_fn comp;
00106
00107
00108 splay_tree_delete_key_fn delete_key;
00109
00110
00111 splay_tree_delete_value_fn delete_value;
00112
00113
00114 splay_tree_allocate_fn allocate;
00115 splay_tree_deallocate_fn deallocate;
00116 PTR GTY((skip)) allocate_data;
00117
00118 };
00119 typedef struct splay_tree_s *splay_tree;
00120
00121 extern splay_tree splay_tree_new PARAMS((splay_tree_compare_fn,
00122 splay_tree_delete_key_fn,
00123 splay_tree_delete_value_fn));
00124 extern splay_tree splay_tree_new_with_allocator
00125 PARAMS((splay_tree_compare_fn,
00126 splay_tree_delete_key_fn,
00127 splay_tree_delete_value_fn,
00128 splay_tree_allocate_fn,
00129 splay_tree_deallocate_fn,
00130 void *));
00131 extern void splay_tree_delete PARAMS((splay_tree));
00132 extern splay_tree_node splay_tree_insert
00133 PARAMS((splay_tree,
00134 splay_tree_key,
00135 splay_tree_value));
00136 extern void splay_tree_remove PARAMS((splay_tree,
00137 splay_tree_key));
00138 extern splay_tree_node splay_tree_lookup
00139 PARAMS((splay_tree,
00140 splay_tree_key));
00141 extern splay_tree_node splay_tree_predecessor
00142 PARAMS((splay_tree,
00143 splay_tree_key));
00144 extern splay_tree_node splay_tree_successor
00145 PARAMS((splay_tree,
00146 splay_tree_key));
00147 extern splay_tree_node splay_tree_max
00148 PARAMS((splay_tree));
00149 extern splay_tree_node splay_tree_min
00150 PARAMS((splay_tree));
00151 extern int splay_tree_foreach PARAMS((splay_tree,
00152 splay_tree_foreach_fn,
00153 void*));
00154 extern int splay_tree_compare_ints PARAMS((splay_tree_key,
00155 splay_tree_key));
00156 extern int splay_tree_compare_pointers PARAMS((splay_tree_key,
00157 splay_tree_key));
00158
00159 #ifdef __cplusplus
00160 }
00161 #endif
00162
00163 #endif