diff options
| author | Stein Somers <git@steinsomers.be> | 2020-02-04 22:19:05 +0100 |
|---|---|---|
| committer | Stein Somers <git@steinsomers.be> | 2020-02-28 00:13:32 +0100 |
| commit | 4f6661a18d2c35e6d4bfa8533ddaab10cd522b35 (patch) | |
| tree | 86dc13d5a5acb2b6e0f3230d890f8a06b406aa39 /src/liballoc/collections | |
| parent | b685985ea40ab1faa8cb888bf001779e44a8c716 (diff) | |
| download | rust-4f6661a18d2c35e6d4bfa8533ddaab10cd522b35.tar.gz rust-4f6661a18d2c35e6d4bfa8533ddaab10cd522b35.zip | |
Fix and test implementation of BTreeMap's first_entry, last_entry, pop_first, pop_last
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 8eabc177304..c1778f2065d 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 } } |
