From 6a5b6450e7eae2adbc64b901f8356301a2815f92 Mon Sep 17 00:00:00 2001 From: Stein Somers Date: Mon, 21 Jun 2021 20:28:00 +0200 Subject: [PATCH] BTree: consistently avoid unwrap_unchecked in iterators --- .../alloc/src/collections/btree/navigate.rs | 34 ++++++------------- 1 file changed, 10 insertions(+), 24 deletions(-) diff --git a/library/alloc/src/collections/btree/navigate.rs b/library/alloc/src/collections/btree/navigate.rs index 17568f7b005ba..bf3542b384d78 100644 --- a/library/alloc/src/collections/btree/navigate.rs +++ b/library/alloc/src/collections/btree/navigate.rs @@ -47,14 +47,12 @@ impl<'a, K, V> LeafRange, K, V> { #[inline] pub unsafe fn next_unchecked(&mut self) -> (&'a K, &'a V) { - debug_assert!(self.front.is_some()); - unsafe { self.front.as_mut().unwrap_unchecked().next_unchecked() } + unsafe { self.front.as_mut().unwrap().next_unchecked() } } #[inline] pub unsafe fn next_back_unchecked(&mut self) -> (&'a K, &'a V) { - debug_assert!(self.back.is_some()); - unsafe { self.back.as_mut().unwrap_unchecked().next_back_unchecked() } + unsafe { self.back.as_mut().unwrap().next_back_unchecked() } } } @@ -71,14 +69,12 @@ impl<'a, K, V> LeafRange, K, V> { #[inline] pub unsafe fn next_unchecked(&mut self) -> (&'a K, &'a mut V) { - debug_assert!(self.front.is_some()); - unsafe { self.front.as_mut().unwrap_unchecked().next_unchecked() } + unsafe { self.front.as_mut().unwrap().next_unchecked() } } #[inline] pub unsafe fn next_back_unchecked(&mut self) -> (&'a K, &'a mut V) { - debug_assert!(self.back.is_some()); - unsafe { self.back.as_mut().unwrap_unchecked().next_back_unchecked() } + unsafe { self.back.as_mut().unwrap().next_back_unchecked() } } } @@ -400,9 +396,7 @@ impl<'a, K, V> Handle, K, V, marker::Leaf>, marker::Ed /// There must be another KV in the direction travelled. unsafe fn next_unchecked(&mut self) -> (&'a K, &'a V) { super::mem::replace(self, |leaf_edge| { - let kv = leaf_edge.next_kv(); - debug_assert!(kv.is_ok()); - let kv = unsafe { kv.ok().unwrap_unchecked() }; + let kv = leaf_edge.next_kv().ok().unwrap(); (kv.next_leaf_edge(), kv.into_kv()) }) } @@ -414,9 +408,7 @@ impl<'a, K, V> Handle, K, V, marker::Leaf>, marker::Ed /// There must be another KV in the direction travelled. unsafe fn next_back_unchecked(&mut self) -> (&'a K, &'a V) { super::mem::replace(self, |leaf_edge| { - let kv = leaf_edge.next_back_kv(); - debug_assert!(kv.is_ok()); - let kv = unsafe { kv.ok().unwrap_unchecked() }; + let kv = leaf_edge.next_back_kv().ok().unwrap(); (kv.next_back_leaf_edge(), kv.into_kv()) }) } @@ -430,9 +422,7 @@ impl<'a, K, V> Handle, K, V, marker::Leaf>, marker::E /// There must be another KV in the direction travelled. unsafe fn next_unchecked(&mut self) -> (&'a K, &'a mut V) { let kv = super::mem::replace(self, |leaf_edge| { - let kv = leaf_edge.next_kv(); - debug_assert!(kv.is_ok()); - let kv = unsafe { kv.ok().unwrap_unchecked() }; + let kv = leaf_edge.next_kv().ok().unwrap(); (unsafe { ptr::read(&kv) }.next_leaf_edge(), kv) }); // Doing this last is faster, according to benchmarks. @@ -446,9 +436,7 @@ impl<'a, K, V> Handle, K, V, marker::Leaf>, marker::E /// There must be another KV in the direction travelled. unsafe fn next_back_unchecked(&mut self) -> (&'a K, &'a mut V) { let kv = super::mem::replace(self, |leaf_edge| { - let kv = leaf_edge.next_back_kv(); - debug_assert!(kv.is_ok()); - let kv = unsafe { kv.ok().unwrap_unchecked() }; + let kv = leaf_edge.next_back_kv().ok().unwrap(); (unsafe { ptr::read(&kv) }.next_back_leaf_edge(), kv) }); // Doing this last is faster, according to benchmarks. @@ -472,9 +460,7 @@ impl Handle, marker::Edge> { pub unsafe fn deallocating_next_unchecked( &mut self, ) -> Handle, marker::KV> { - super::mem::replace(self, |leaf_edge| unsafe { - leaf_edge.deallocating_next().unwrap_unchecked() - }) + super::mem::replace(self, |leaf_edge| unsafe { leaf_edge.deallocating_next().unwrap() }) } /// Moves the leaf edge handle to the previous leaf edge and returns the key and value @@ -493,7 +479,7 @@ impl Handle, marker::Edge> { &mut self, ) -> Handle, marker::KV> { super::mem::replace(self, |leaf_edge| unsafe { - leaf_edge.deallocating_next_back().unwrap_unchecked() + leaf_edge.deallocating_next_back().unwrap() }) } }