diff options
| author | Dylan DPC <dylan.dpc@gmail.com> | 2020-02-09 00:53:52 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-02-09 00:53:52 +0100 |
| commit | cb87c958ef147f144d4b973e04e26a6bf9ddde9d (patch) | |
| tree | 4d1d53e5a31385b1f079e090a2ba4a5cc50d24cf /src/liballoc/collections | |
| parent | d17bc9f0615b08cb708178a1eec93896457b9d42 (diff) | |
| parent | fa9bfebfc9256369c03cbe8bba2e737de3cb38fc (diff) | |
| download | rust-cb87c958ef147f144d4b973e04e26a6bf9ddde9d.tar.gz rust-cb87c958ef147f144d4b973e04e26a6bf9ddde9d.zip | |
Rollup merge of #68834 - ssomers:btree_first_last_fix68829, r=KodrAus
Fix and test implementation of BTreeMap's first/last_entry, pop_first/last Properly implement and test `first_entry` & `last_entry` to fix problem report #68829
Diffstat (limited to 'src/liballoc/collections')
| -rw-r--r-- | src/liballoc/collections/btree/map.rs | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/src/liballoc/collections/btree/map.rs b/src/liballoc/collections/btree/map.rs index 0b3f603686d..5b4b1c93347 100644 --- a/src/liballoc/collections/btree/map.rs +++ b/src/liballoc/collections/btree/map.rs @@ -675,13 +675,15 @@ impl<K: Ord, V> BTreeMap<K, V> { T: Ord, K: Borrow<T>, { - match self.length { - 0 => None, - _ => Some(OccupiedEntry { - handle: self.root.as_mut().first_kv(), + let front = self.root.as_mut().first_leaf_edge(); + if let Ok(kv) = front.right_kv() { + Some(OccupiedEntry { + handle: kv.forget_node_type(), length: &mut self.length, _marker: PhantomData, - }), + }) + } else { + None } } @@ -736,13 +738,15 @@ impl<K: Ord, V> BTreeMap<K, V> { T: Ord, K: Borrow<T>, { - match self.length { - 0 => None, - _ => Some(OccupiedEntry { - handle: self.root.as_mut().last_kv(), + let back = self.root.as_mut().last_leaf_edge(); + if let Ok(kv) = back.left_kv() { + Some(OccupiedEntry { + handle: kv.forget_node_type(), length: &mut self.length, _marker: PhantomData, - }), + }) + } else { + None } } |
