projects
/
tinc
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Use darwin/device.c when compiling on MacOS/X.
[tinc]
/
lib
/
avl_tree.c
diff --git
a/lib/avl_tree.c
b/lib/avl_tree.c
index
8630d4d
..
a4f0051
100644
(file)
--- a/
lib/avl_tree.c
+++ b/
lib/avl_tree.c
@@
-29,7
+29,7
@@
library for inclusion into tinc (http://tinc.nl.linux.org/) by
Guus Sliepen <guus@sliepen.warande.net>.
library for inclusion into tinc (http://tinc.nl.linux.org/) by
Guus Sliepen <guus@sliepen.warande.net>.
- $Id: avl_tree.c,v 1.1.2.
5 2001/02/06 10:13:2
1 guus Exp $
+ $Id: avl_tree.c,v 1.1.2.
8 2002/02/10 21:57:5
1 guus Exp $
*/
#include <stdio.h>
*/
#include <stdio.h>
@@
-430,7
+430,7
@@
avl_node_t *avl_insert(avl_tree_t *tree, void *data)
new->data = data;
avl_insert_after(tree, closest, new);
break;
new->data = data;
avl_insert_after(tree, closest, new);
break;
-
case 0
:
+
default
:
return NULL;
}
}
return NULL;
}
}
@@
-493,6
+493,9
@@
void avl_insert_before(avl_tree_t *tree, avl_node_t *before, avl_node_t *node)
node->parent = before;
node->prev = before->prev;
node->parent = before;
node->prev = before->prev;
+ if(before->left)
+ return avl_insert_after(tree, before->prev, node);
+
if (before->prev)
before->prev->next = node;
else
if (before->prev)
before->prev->next = node;
else
@@
-509,6
+512,9
@@
void avl_insert_after(avl_tree_t *tree, avl_node_t *after, avl_node_t *node)
if (!after)
return tree->head ? avl_insert_before(tree, tree->head, node) : avl_insert_top(tree, node);
if (!after)
return tree->head ? avl_insert_before(tree, tree->head, node) : avl_insert_top(tree, node);
+ if(after->right)
+ return avl_insert_before(tree, after->next, node);
+
node->prev = after;
node->parent = after;
node->next = after->next;
node->prev = after;
node->parent = after;
node->next = after->next;
@@
-591,6
+597,15
@@
void avl_unlink_node(avl_tree_t *tree, avl_node_t *node)
}
avl_rebalance(tree, balnode);
}
avl_rebalance(tree, balnode);
+
+ node->next = node->prev = node->parent = node->left = node->right = NULL;
+
+#ifdef AVL_COUNT
+ node->count = 0;
+#endif
+#ifdef AVL_DEPTH
+ node->depth = 0;
+#endif
}
void avl_delete_node(avl_tree_t *tree, avl_node_t *node)
}
void avl_delete_node(avl_tree_t *tree, avl_node_t *node)