about summary refs log tree commit diff
path: root/src/liballoc
diff options
context:
space:
mode:
authorMazdak Farrokhzad <twingoow@gmail.com>2020-04-10 18:15:24 +0200
committerGitHub <noreply@github.com>2020-04-10 18:15:24 +0200
commitf699a55e4b4f2d7ee720aaf6d24f6040fee2dced (patch)
tree347a8dcd67c7b34cde6590175c543328d3ed96ac /src/liballoc
parent277ce9e2499f72d3d0d84b4921df77a1707ffe52 (diff)
parent4ade06bab8e9a3bf36a50aaaeb03dbb34dca0d71 (diff)
downloadrust-f699a55e4b4f2d7ee720aaf6d24f6040fee2dced.tar.gz
rust-f699a55e4b4f2d7ee720aaf6d24f6040fee2dced.zip
Rollup merge of #70981 - ssomers:btreemap_into_into_iter, r=Mark-Simulacrum
Rearrange BTreeMap::into_iter to match range_mut.

r? @Mark-Simulacrum
I wondered why you catered for the optional root differently in `into_iter` than in `range_mut`.
Diffstat (limited to 'src/liballoc')
-rw-r--r--src/liballoc/collections/btree/map.rs26
1 files changed, 13 insertions, 13 deletions
diff --git a/src/liballoc/collections/btree/map.rs b/src/liballoc/collections/btree/map.rs
index 682e7c53084..38fa3d73624 100644
--- a/src/liballoc/collections/btree/map.rs
+++ b/src/liballoc/collections/btree/map.rs
@@ -1544,19 +1544,19 @@ impl<K, V> IntoIterator for BTreeMap<K, V> {
     type IntoIter = IntoIter<K, V>;
 
     fn into_iter(self) -> IntoIter<K, V> {
-        let me = ManuallyDrop::new(self);
-        if me.root.is_none() {
-            return IntoIter { front: None, back: None, length: 0 };
-        }
-
-        let root1 = unsafe { unwrap_unchecked(ptr::read(&me.root)).into_ref() };
-        let root2 = unsafe { unwrap_unchecked(ptr::read(&me.root)).into_ref() };
-        let len = me.length;
-
-        IntoIter {
-            front: Some(root1.first_leaf_edge()),
-            back: Some(root2.last_leaf_edge()),
-            length: len,
+        let mut me = ManuallyDrop::new(self);
+        if let Some(root) = me.root.as_mut() {
+            let root1 = unsafe { ptr::read(root).into_ref() };
+            let root2 = unsafe { ptr::read(root).into_ref() };
+            let len = me.length;
+
+            IntoIter {
+                front: Some(root1.first_leaf_edge()),
+                back: Some(root2.last_leaf_edge()),
+                length: len,
+            }
+        } else {
+            IntoIter { front: None, back: None, length: 0 }
         }
     }
 }