replace try_for_each with try_fold to generate less code
removes two functions to inline by combining the check functions and extra call to try_for_each
This commit is contained in:
parent
22bc9e1d9c
commit
8737061cb5
1 changed files with 14 additions and 13 deletions
|
@ -1859,14 +1859,13 @@ pub trait Iterator {
|
||||||
Self: Sized, F: FnMut(Self::Item) -> bool
|
Self: Sized, F: FnMut(Self::Item) -> bool
|
||||||
{
|
{
|
||||||
#[inline]
|
#[inline]
|
||||||
fn check<T>(mut f: impl FnMut(T) -> bool) -> impl FnMut(T) -> LoopState<(), ()> {
|
fn check<T>(mut f: impl FnMut(T) -> bool) -> impl FnMut((), T) -> LoopState<(), ()> {
|
||||||
move |x| {
|
move |(), x| {
|
||||||
if f(x) { LoopState::Continue(()) }
|
if f(x) { LoopState::Continue(()) }
|
||||||
else { LoopState::Break(()) }
|
else { LoopState::Break(()) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
self.try_fold((), check(f)) == LoopState::Continue(())
|
||||||
self.try_for_each(check(f)) == LoopState::Continue(())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Tests if any element of the iterator matches a predicate.
|
/// Tests if any element of the iterator matches a predicate.
|
||||||
|
@ -1913,14 +1912,14 @@ pub trait Iterator {
|
||||||
F: FnMut(Self::Item) -> bool
|
F: FnMut(Self::Item) -> bool
|
||||||
{
|
{
|
||||||
#[inline]
|
#[inline]
|
||||||
fn check<T>(mut f: impl FnMut(T) -> bool) -> impl FnMut(T) -> LoopState<(), ()> {
|
fn check<T>(mut f: impl FnMut(T) -> bool) -> impl FnMut((), T) -> LoopState<(), ()> {
|
||||||
move |x| {
|
move |(), x| {
|
||||||
if f(x) { LoopState::Break(()) }
|
if f(x) { LoopState::Break(()) }
|
||||||
else { LoopState::Continue(()) }
|
else { LoopState::Continue(()) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self.try_for_each(check(f)) == LoopState::Break(())
|
self.try_fold((), check(f)) == LoopState::Break(())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Searches for an element of an iterator that satisfies a predicate.
|
/// Searches for an element of an iterator that satisfies a predicate.
|
||||||
|
@ -1972,14 +1971,16 @@ pub trait Iterator {
|
||||||
P: FnMut(&Self::Item) -> bool,
|
P: FnMut(&Self::Item) -> bool,
|
||||||
{
|
{
|
||||||
#[inline]
|
#[inline]
|
||||||
fn check<T>(mut predicate: impl FnMut(&T) -> bool) -> impl FnMut(T) -> LoopState<(), T> {
|
fn check<T>(
|
||||||
move |x| {
|
mut predicate: impl FnMut(&T) -> bool
|
||||||
|
) -> impl FnMut((), T) -> LoopState<(), T> {
|
||||||
|
move |(), x| {
|
||||||
if predicate(&x) { LoopState::Break(x) }
|
if predicate(&x) { LoopState::Break(x) }
|
||||||
else { LoopState::Continue(()) }
|
else { LoopState::Continue(()) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self.try_for_each(check(predicate)).break_value()
|
self.try_fold((), check(predicate)).break_value()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Applies function to the elements of iterator and returns
|
/// Applies function to the elements of iterator and returns
|
||||||
|
@ -2004,14 +2005,14 @@ pub trait Iterator {
|
||||||
F: FnMut(Self::Item) -> Option<B>,
|
F: FnMut(Self::Item) -> Option<B>,
|
||||||
{
|
{
|
||||||
#[inline]
|
#[inline]
|
||||||
fn check<T, B>(mut f: impl FnMut(T) -> Option<B>) -> impl FnMut(T) -> LoopState<(), B> {
|
fn check<T, B>(mut f: impl FnMut(T) -> Option<B>) -> impl FnMut((), T) -> LoopState<(), B> {
|
||||||
move |x| match f(x) {
|
move |(), x| match f(x) {
|
||||||
Some(x) => LoopState::Break(x),
|
Some(x) => LoopState::Break(x),
|
||||||
None => LoopState::Continue(()),
|
None => LoopState::Continue(()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self.try_for_each(check(f)).break_value()
|
self.try_fold((), check(f)).break_value()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Searches for an element in an iterator, returning its index.
|
/// Searches for an element in an iterator, returning its index.
|
||||||
|
|
Loading…
Reference in a new issue