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 #ifndef _SPLAY_TREE_H
00031 #define _SPLAY_TREE_H
00032
00033 #ifdef __cplusplus
00034 extern "C" {
00035 #endif
00036
00037 #include "ansidecl.h"
00038
00039 #ifndef GTY
00040 #define GTY(X)
00041 #endif
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) (splay_tree_key, splay_tree_key);
00056
00057
00058
00059 typedef void (*splay_tree_delete_key_fn) (splay_tree_key);
00060
00061
00062
00063 typedef void (*splay_tree_delete_value_fn) (splay_tree_value);
00064
00065
00066 typedef int (*splay_tree_foreach_fn) (splay_tree_node, void*);
00067
00068
00069
00070
00071
00072 typedef void *(*splay_tree_allocate_fn) (int, void *);
00073
00074
00075
00076
00077
00078 typedef void (*splay_tree_deallocate_fn) (void *, void *);
00079
00080
00081 struct splay_tree_node_s GTY(())
00082 {
00083
00084 splay_tree_key GTY ((use_param1)) key;
00085
00086
00087 splay_tree_value GTY ((use_param2)) value;
00088
00089
00090 splay_tree_node GTY ((use_params)) left;
00091 splay_tree_node GTY ((use_params)) right;
00092 };
00093
00094
00095 struct splay_tree_s GTY(())
00096 {
00097
00098 splay_tree_node GTY ((use_params)) 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 * GTY((skip)) allocate_data;
00113
00114 };
00115 typedef struct splay_tree_s *splay_tree;
00116
00117 extern splay_tree splay_tree_new (splay_tree_compare_fn,
00118 splay_tree_delete_key_fn,
00119 splay_tree_delete_value_fn);
00120 extern splay_tree splay_tree_new_with_allocator (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 (splay_tree);
00127 extern splay_tree_node splay_tree_insert (splay_tree,
00128 splay_tree_key,
00129 splay_tree_value);
00130 extern void splay_tree_remove (splay_tree, splay_tree_key);
00131 extern splay_tree_node splay_tree_lookup (splay_tree, splay_tree_key);
00132 extern splay_tree_node splay_tree_predecessor (splay_tree, splay_tree_key);
00133 extern splay_tree_node splay_tree_successor (splay_tree, splay_tree_key);
00134 extern splay_tree_node splay_tree_max (splay_tree);
00135 extern splay_tree_node splay_tree_min (splay_tree);
00136 extern int splay_tree_foreach (splay_tree, splay_tree_foreach_fn, void*);
00137 extern int splay_tree_compare_ints (splay_tree_key, splay_tree_key);
00138 extern int splay_tree_compare_pointers (splay_tree_key, splay_tree_key);
00139
00140 #ifdef __cplusplus
00141 }
00142 #endif
00143
00144 #endif