aboutsummaryrefslogtreecommitdiff
path: root/lib/avl_tree
diff options
context:
space:
mode:
authorNathan Reiner <nathan@nathanreiner.xyz>2023-01-15 01:13:51 +0100
committerNathan Reiner <nathan@nathanreiner.xyz>2023-01-15 01:13:51 +0100
commit3f79b7bd553a52fca7a098f5195b406ff9970491 (patch)
tree99d0399141e7894219fe7a0deed1ccadb226b9c9 /lib/avl_tree
parent919450dc7d965c4067287e1ece3ceafdde8ff5a9 (diff)
add list and static library builder
Diffstat (limited to 'lib/avl_tree')
-rw-r--r--lib/avl_tree/avl_tree.c34
1 files changed, 15 insertions, 19 deletions
diff --git a/lib/avl_tree/avl_tree.c b/lib/avl_tree/avl_tree.c
index db3e44e..1e901d1 100644
--- a/lib/avl_tree/avl_tree.c
+++ b/lib/avl_tree/avl_tree.c
@@ -63,22 +63,18 @@ void *avl_tree_search(avl_tree_t *tree, void *value)
return 0;
avl_tree_node_t *current = tree->root;
- u8 factor = tree->compare(current->value, value);
+ i8 factor = 0;
- while (current->left || current->right) {
+ while (current) {
factor = tree->compare(current->value, value);
switch (factor) {
- case (u8)1: current = current->right; break;
- case (u8)0: return current->value; break;
- case (u8)-1: current = current->left; break;
+ case 1: current = current->right; break;
+ case 0: return current->value; break;
+ case -1: current = current->left; break;
}
}
- factor = tree->compare(current->value, value);
- if (!factor)
- return current->value;
-
return 0;
}
@@ -99,7 +95,7 @@ void avl_tree_insert(avl_tree_t *tree, void *value)
{
avl_tree_node_t *current = tree->root;
avl_tree_node_t *last = current;
- u8 factor = 0;
+ i8 factor = 0;
if (current)
factor = tree->compare(current->value, value);
@@ -110,13 +106,13 @@ void avl_tree_insert(avl_tree_t *tree, void *value)
last = current;
switch (factor) {
- case (u8)1: current = current->right; break;
- case (u8)0:
+ case 1: current = current->right; break;
+ case 0:
free(current->value);
current->value = value;
current = 0;
break;
- case (u8)-1: current = current->left; break;
+ case -1: current = current->left; break;
}
}
@@ -125,8 +121,8 @@ void avl_tree_insert(avl_tree_t *tree, void *value)
current = __new_avl_tree_node(last, value);
switch (factor) {
- case (u8)1: last->right = current; break;
- case (u8)-1: last->left = current; break;
+ case 1: last->right = current; break;
+ case -1: last->left = current; break;
}
} else if (!last) {
++tree->size;
@@ -159,7 +155,7 @@ void avl_tree_remove(avl_tree_t *tree, void *value)
{
avl_tree_node_t *current = tree->root;
avl_tree_node_t *last = current;
- u8 factor = 0;
+ i8 factor = 0;
if (current)
factor = tree->compare(current->value, value);
@@ -170,9 +166,9 @@ void avl_tree_remove(avl_tree_t *tree, void *value)
last = current;
switch (factor) {
- case (u8)1: current = current->right; break;
- case (u8)0: current = 0; break;
- case (u8)-1: current = current->left; break;
+ case 1: current = current->right; break;
+ case 0: current = 0; break;
+ case -1: current = current->left; break;
}
}