Skip to content

Commit 5e410ba

Browse files
author
Ariel Ben-Yehuda
authored
Rollup merge of rust-lang#41028 - bluss:rev-rfind, r=alexcrichton
Let .rev()'s find use the underlying rfind and vice versa - Connect the plumbing in an obvious way from Rev's find → underlying rfind and vice versa - A style change in the provided implementation for Iterator::rfind, using simple next_back when it is enough
2 parents b712950 + 74f8ea2 commit 5e410ba

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

src/libcore/iter/mod.rs

+12
Original file line numberDiff line numberDiff line change
@@ -358,12 +358,24 @@ impl<I> Iterator for Rev<I> where I: DoubleEndedIterator {
358358
fn next(&mut self) -> Option<<I as Iterator>::Item> { self.iter.next_back() }
359359
#[inline]
360360
fn size_hint(&self) -> (usize, Option<usize>) { self.iter.size_hint() }
361+
362+
fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
363+
where P: FnMut(&Self::Item) -> bool
364+
{
365+
self.iter.rfind(predicate)
366+
}
361367
}
362368

363369
#[stable(feature = "rust1", since = "1.0.0")]
364370
impl<I> DoubleEndedIterator for Rev<I> where I: DoubleEndedIterator {
365371
#[inline]
366372
fn next_back(&mut self) -> Option<<I as Iterator>::Item> { self.iter.next() }
373+
374+
fn rfind<P>(&mut self, predicate: P) -> Option<Self::Item>
375+
where P: FnMut(&Self::Item) -> bool
376+
{
377+
self.iter.find(predicate)
378+
}
367379
}
368380

369381
#[stable(feature = "rust1", since = "1.0.0")]

src/libcore/iter/traits.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ pub trait DoubleEndedIterator: Iterator {
467467
Self: Sized,
468468
P: FnMut(&Self::Item) -> bool
469469
{
470-
for x in self.by_ref().rev() {
470+
while let Some(x) = self.next_back() {
471471
if predicate(&x) { return Some(x) }
472472
}
473473
None

0 commit comments

Comments
 (0)