diff options
author | Peter Zhu <peter@peterzhu.ca> | 2023-11-28 13:37:38 -0500 |
---|---|---|
committer | Peter Zhu <peter@peterzhu.ca> | 2023-11-28 13:37:38 -0500 |
commit | cb70994b0e91448f5904c3dda51c7b2f79b1d28e (patch) | |
tree | 83cab45aa898740437559a5bcba8f903cf57faf6 /shape.c | |
parent | cd4207869ff831c41db3ec873b175369ffca080a (diff) | |
download | ruby-cb70994b0e91448f5904c3dda51c7b2f79b1d28e.tar.gz |
Assert node inserted into red-black tree exists
Diffstat (limited to 'shape.c')
-rw-r--r-- | shape.c | 33 |
1 files changed, 18 insertions, 15 deletions
@@ -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 + ); } } |