Skip to content

Commit

Permalink
Unrolled build for rust-lang#120505
Browse files Browse the repository at this point in the history
Rollup merge of rust-lang#120505 - Amanieu:fix-btreemap-cursor-remove, r=m-ou-se

Fix BTreeMap's Cursor::remove_{next,prev}

These would incorrectly leave `current` as `None` after a failed attempt to remove an element (due to the cursor already being at the start/end).
  • Loading branch information
rust-timer committed Feb 15, 2024
2 parents 62fb0db + adb7607 commit 60651fe
Showing 1 changed file with 12 additions and 0 deletions.
12 changes: 12 additions & 0 deletions library/alloc/src/collections/btree/map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3247,9 +3247,15 @@ impl<'a, K: Ord, V, A: Allocator + Clone> CursorMutKey<'a, K, V, A> {
#[unstable(feature = "btree_cursors", issue = "107540")]
pub fn remove_next(&mut self) -> Option<(K, V)> {
let current = self.current.take()?;
if current.reborrow().next_kv().is_err() {
self.current = Some(current);
return None;
}
let mut emptied_internal_root = false;
let (kv, pos) = current
.next_kv()
// This should be unwrap(), but that doesn't work because NodeRef
// doesn't implement Debug. The condition is checked above.
.ok()?
.remove_kv_tracking(|| emptied_internal_root = true, self.alloc.clone());
self.current = Some(pos);
Expand All @@ -3270,9 +3276,15 @@ impl<'a, K: Ord, V, A: Allocator + Clone> CursorMutKey<'a, K, V, A> {
#[unstable(feature = "btree_cursors", issue = "107540")]
pub fn remove_prev(&mut self) -> Option<(K, V)> {
let current = self.current.take()?;
if current.reborrow().next_back_kv().is_err() {
self.current = Some(current);
return None;
}
let mut emptied_internal_root = false;
let (kv, pos) = current
.next_back_kv()
// This should be unwrap(), but that doesn't work because NodeRef
// doesn't implement Debug. The condition is checked above.
.ok()?
.remove_kv_tracking(|| emptied_internal_root = true, self.alloc.clone());
self.current = Some(pos);
Expand Down

0 comments on commit 60651fe

Please sign in to comment.