- Notifications
You must be signed in to change notification settings - Fork 31.8k
/
Copy pathrotatingtree.h
27 lines (22 loc) · 924 Bytes
/
rotatingtree.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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
* access 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>
#defineEMPTY_ROTATING_TREE ((rotating_node_t *)NULL)
typedefstructrotating_node_srotating_node_t;
typedefint (*rotating_tree_enum_fn) (rotating_node_t*node, void*arg);
structrotating_node_s {
void*key;
rotating_node_t*left;
rotating_node_t*right;
};
voidRotatingTree_Add(rotating_node_t**root, rotating_node_t*node);
rotating_node_t*RotatingTree_Get(rotating_node_t**root, void*key);
intRotatingTree_Enum(rotating_node_t*root, rotating_tree_enum_fnenumfn,
void*arg);