From 3f79b7bd553a52fca7a098f5195b406ff9970491 Mon Sep 17 00:00:00 2001 From: Nathan Reiner Date: Sun, 15 Jan 2023 01:13:51 +0100 Subject: add list and static library builder --- lib/avl_tree/avl_tree.c | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-) (limited to 'lib/avl_tree/avl_tree.c') 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; } } -- cgit v1.2.3-70-g09d2