From cb70994b0e91448f5904c3dda51c7b2f79b1d28e Mon Sep 17 00:00:00 2001 From: Peter Zhu Date: Tue, 28 Nov 2023 13:37:38 -0500 Subject: Assert node inserted into red-black tree exists --- shape.c | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) (limited to 'shape.c') diff --git a/shape.c b/shape.c index c969b78da5..7c5d2b1619 100644 --- a/shape.c +++ b/shape.c @@ -229,25 +229,28 @@ redblack_insert_aux(redblack_node_t * tree, ID key, rb_shape_t * value) return redblack_new(RED, key, value, LEAF, LEAF); } else { + redblack_node_t *left, *right; if (key < tree->key) { - return redblack_balance(redblack_color(tree), - tree->key, - redblack_value(tree), - redblack_insert_aux(redblack_left(tree), key, value), - redblack_right(tree)); + left = redblack_insert_aux(redblack_left(tree), key, value); + RUBY_ASSERT(left != LEAF); + right = redblack_right(tree); + } + else if (key > tree->key) { + left = redblack_left(tree); + right = redblack_insert_aux(redblack_right(tree), key, value); + RUBY_ASSERT(right != LEAF); } else { - if (key > tree->key) { - return redblack_balance(redblack_color(tree), - tree->key, - redblack_value(tree), - redblack_left(tree), - redblack_insert_aux(redblack_right(tree), key, value)); - } - else { - return tree; - } + return tree; } + + return redblack_balance( + redblack_color(tree), + tree->key, + redblack_value(tree), + left, + right + ); } } -- cgit v1.2.3