rust: rbtree: simplify finding current in remove_current

The previous version used a verbose `match` to get
`current`, which may be slightly confusing at first
glance.

This change makes it shorter and more clearly expresses
the intent: prefer `next` if available, otherwise fall
back to `prev`.

Signed-off-by: Onur Özkan <work@onurozkan.dev>
Reviewed-by: Alice Ryhl <aliceryhl@google.com>
Reviewed-by: Alexandre Courbot <acourbot@nvidia.com>
Link: https://lore.kernel.org/r/20250708075850.25789-1-work@onurozkan.dev
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
This commit is contained in:
Onur Özkan
2025-07-08 10:58:50 +03:00
committed by Miguel Ojeda
parent 8ffb945647
commit b6f885060e

View File

@@ -775,23 +775,14 @@ impl<'a, K, V> Cursor<'a, K, V> {
// the tree cannot change. By the tree invariant, all nodes are valid.
unsafe { bindings::rb_erase(&mut (*this).links, addr_of_mut!(self.tree.root)) };
let current = match (prev, next) {
(_, Some(next)) => next,
(Some(prev), None) => prev,
(None, None) => {
return (None, node);
}
};
// INVARIANT:
// - `current` is a valid node in the [`RBTree`] pointed to by `self.tree`.
let cursor = next.or(prev).map(|current| Self {
current,
tree: self.tree,
});
(
// INVARIANT:
// - `current` is a valid node in the [`RBTree`] pointed to by `self.tree`.
Some(Self {
current,
tree: self.tree,
}),
node,
)
(cursor, node)
}
/// Remove the previous node, returning it if it exists.