rotatingtree.h 924 B

123456789101112131415161718192021222324252627
  1. /* "Rotating trees" (Armin Rigo)
  2. *
  3. * Google "splay trees" for the general idea.
  4. *
  5. * It's a dict-like data structure that works best when accesses are not
  6. * random, but follow a strong pattern. The one implemented here is for
  7. * access patterns where the same small set of keys is looked up over
  8. * and over again, and this set of keys evolves slowly over time.
  9. */
  10. #include <stdlib.h>
  11. #define EMPTY_ROTATING_TREE ((rotating_node_t *)NULL)
  12. typedef struct rotating_node_s rotating_node_t;
  13. typedef int (*rotating_tree_enum_fn) (rotating_node_t *node, void *arg);
  14. struct rotating_node_s {
  15. void *key;
  16. rotating_node_t *left;
  17. rotating_node_t *right;
  18. };
  19. void RotatingTree_Add(rotating_node_t **root, rotating_node_t *node);
  20. rotating_node_t* RotatingTree_Get(rotating_node_t **root, void *key);
  21. int RotatingTree_Enum(rotating_node_t *root, rotating_tree_enum_fn enumfn,
  22. void *arg);