diff options
| author | Ariel Ben-Yehuda <arielb1@mail.tau.ac.il> | 2017-04-05 23:01:10 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-04-05 23:01:10 +0000 |
| commit | 5e410ba5efd5885120ab1bf39a1a1eec85c9d1db (patch) | |
| tree | 3e8b2d36540f03ae4014b0bb3179a8d50326fb5c | |
| parent | b712950d7b3a91e78d195adff49afb4a27abeb8d (diff) | |
| parent | 74f8ea263e119f947264f373229a8f1a940ae877 (diff) | |
| download | rust-5e410ba5efd5885120ab1bf39a1a1eec85c9d1db.tar.gz rust-5e410ba5efd5885120ab1bf39a1a1eec85c9d1db.zip | |
Rollup merge of #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
| -rw-r--r-- | src/libcore/iter/mod.rs | 12 | ||||
| -rw-r--r-- | src/libcore/iter/traits.rs | 2 |
2 files changed, 13 insertions, 1 deletions
diff --git a/src/libcore/iter/mod.rs b/src/libcore/iter/mod.rs index 04394e0a3a8..273f9d0e6f6 100644 --- a/src/libcore/iter/mod.rs +++ b/src/libcore/iter/mod.rs @@ -358,12 +358,24 @@ impl<I> Iterator for Rev<I> where I: DoubleEndedIterator { fn next(&mut self) -> Option<<I as Iterator>::Item> { self.iter.next_back() } #[inline] fn size_hint(&self) -> (usize, Option<usize>) { self.iter.size_hint() } + + fn find<P>(&mut self, predicate: P) -> Option<Self::Item> + where P: FnMut(&Self::Item) -> bool + { + self.iter.rfind(predicate) + } } #[stable(feature = "rust1", since = "1.0.0")] impl<I> DoubleEndedIterator for Rev<I> where I: DoubleEndedIterator { #[inline] fn next_back(&mut self) -> Option<<I as Iterator>::Item> { self.iter.next() } + + fn rfind<P>(&mut self, predicate: P) -> Option<Self::Item> + where P: FnMut(&Self::Item) -> bool + { + self.iter.find(predicate) + } } #[stable(feature = "rust1", since = "1.0.0")] diff --git a/src/libcore/iter/traits.rs b/src/libcore/iter/traits.rs index 34f14ef53f8..798dda19928 100644 --- a/src/libcore/iter/traits.rs +++ b/src/libcore/iter/traits.rs @@ -467,7 +467,7 @@ pub trait DoubleEndedIterator: Iterator { Self: Sized, P: FnMut(&Self::Item) -> bool { - for x in self.by_ref().rev() { + while let Some(x) = self.next_back() { if predicate(&x) { return Some(x) } } None |
