about summary refs log tree commit diff
diff options
context:
space:
mode:
authorVojtech Kral <vojtech@kral.hk>2021-04-13 00:10:03 +0200
committerVojtech Kral <vojtech@kral.hk>2021-04-15 23:23:22 +0200
commitbccbf9db1c799b4848c1742ddc6170e8fa94c965 (patch)
tree55be1c8f43634820c43948728515544ef8c2f428
parent60158f4a7cf3e3063df6127d3f0d206921d285b0 (diff)
downloadrust-bccbf9db1c799b4848c1742ddc6170e8fa94c965.tar.gz
rust-bccbf9db1c799b4848c1742ddc6170e8fa94c965.zip
VecDeque: binary_search_by(): return right away if hit found at back.first() #78021
-rw-r--r--library/alloc/src/collections/vec_deque/mod.rs5
1 files changed, 4 insertions, 1 deletions
diff --git a/library/alloc/src/collections/vec_deque/mod.rs b/library/alloc/src/collections/vec_deque/mod.rs
index d3e70991ad5..e6436016711 100644
--- a/library/alloc/src/collections/vec_deque/mod.rs
+++ b/library/alloc/src/collections/vec_deque/mod.rs
@@ -2481,8 +2481,11 @@ impl<T> VecDeque<T> {
         F: FnMut(&'a T) -> Ordering,
     {
         let (front, back) = self.as_slices();
+        let cmp_back = back.first().map(|elem| f(elem));
 
-        if let Some(Ordering::Less | Ordering::Equal) = back.first().map(|elem| f(elem)) {
+        if let Some(Ordering::Equal) = cmp_back {
+            Ok(front.len())
+        } else if let Some(Ordering::Less) = cmp_back {
             back.binary_search_by(f).map(|idx| idx + front.len()).map_err(|idx| idx + front.len())
         } else {
             front.binary_search_by(f)