aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Mercer <130914459+smercer10@users.noreply.github.com>2025-08-29 11:02:30 +0100
committerSam Mercer <130914459+smercer10@users.noreply.github.com>2025-08-29 11:02:30 +0100
commit30021e8dac0ff6a9a8ddc023f5a4c3924ebfd7c3 (patch)
tree4ebf90327d378bb47e8b5a8a46c1392f438866b5
parentf7936419cd5a022d6bb2100274832df5e7f42eee (diff)
Fix rbtree.find_or_insert
Update the existing node's value if the key is already present and align documentation with behavior.
-rw-r--r--core/container/rbtree/rbtree.odin7
1 files changed, 4 insertions, 3 deletions
diff --git a/core/container/rbtree/rbtree.odin b/core/container/rbtree/rbtree.odin
index 090551367..e9d0d08f4 100644
--- a/core/container/rbtree/rbtree.odin
+++ b/core/container/rbtree/rbtree.odin
@@ -128,9 +128,9 @@ find_value :: proc(t: ^$T/Tree($Key, $Value), key: Key) -> (value: Value, ok: bo
return
}
-// find_or_insert attempts to insert the value into the tree, and returns
-// the node, a boolean indicating if the value was inserted, and the
-// node allocator error if relevant. If the value is already present, the existing node is updated.
+// find_or_insert attempts to insert the key-value pair into the tree, and returns
+// the node, a boolean indicating if a new node was inserted, and the
+// node allocator error if relevant. If the key is already present, the existing node is updated and returned.
find_or_insert :: proc(t: ^$T/Tree($Key, $Value), key: Key, value: Value) -> (n: ^Node(Key, Value), inserted: bool, err: runtime.Allocator_Error) {
n_ptr := &t._root
for n_ptr^ != nil {
@@ -141,6 +141,7 @@ find_or_insert :: proc(t: ^$T/Tree($Key, $Value), key: Key, value: Value) -> (n:
case .Greater:
n_ptr = &n._right
case .Equal:
+ n.value = value
return
}
}