-splay_node_t *splay_insert(splay_tree_t *tree, void *data) {
- splay_node_t *closest, *new;
- int result;
-
- if(!tree->root) {
- new = splay_alloc_node();
- new->data = data;
- splay_insert_top(tree, new);
- } else {
- closest = splay_search_closest_node(tree, data, &result);
-
- if(!result)
- return NULL;
-
- new = splay_alloc_node();
- new->data = data;
-
- if(result < 0)
- splay_insert_before(tree, closest, new);
- else
- splay_insert_after(tree, closest, new);
- }
-
- return new;
-}
-
-splay_node_t *splay_insert_node(splay_tree_t *tree, splay_node_t *node) {
- splay_node_t *closest;
- int result;
-
- if(!tree->root)
- splay_insert_top(tree, node);
- else {
- closest = splay_search_closest_node(tree, node->data, &result);
-
- if(!result)
- return NULL;
-
- if(result < 0)
- splay_insert_before(tree, closest, node);
- else
- splay_insert_after(tree, closest, node);
- }
-
- return node;
-}
-
-void splay_insert_top(splay_tree_t *tree, splay_node_t *node) {