diff options
Diffstat (limited to 'Modules/rotatingtree.h')
-rw-r--r-- | Modules/rotatingtree.h | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/Modules/rotatingtree.h b/Modules/rotatingtree.h new file mode 100644 index 0000000..97cc8e8 --- /dev/null +++ b/Modules/rotatingtree.h @@ -0,0 +1,27 @@ +/* "Rotating trees" (Armin Rigo) + * + * Google "splay trees" for the general idea. + * + * It's a dict-like data structure that works best when accesses are not + * random, but follow a strong pattern. The one implemented here is for + * accesses patterns where the same small set of keys is looked up over + * and over again, and this set of keys evolves slowly over time. + */ + +#include <stdlib.h> + +#define EMPTY_ROTATING_TREE ((rotating_node_t *)NULL) + +typedef struct rotating_node_s rotating_node_t; +typedef int (*rotating_tree_enum_fn) (rotating_node_t *node, void *arg); + +struct rotating_node_s { + void *key; + rotating_node_t *left; + rotating_node_t *right; +}; + +void RotatingTree_Add(rotating_node_t **root, rotating_node_t *node); +rotating_node_t* RotatingTree_Get(rotating_node_t **root, void *key); +int RotatingTree_Enum(rotating_node_t *root, rotating_tree_enum_fn enumfn, + void *arg); |