Skip to content

Commit 46a62ca

Browse files
committed
Reduce genericity in Skip
1 parent 2d7fc4d commit 46a62ca

File tree

1 file changed

+18
-8
lines changed
  • src/libcore/iter/adapters

1 file changed

+18
-8
lines changed

src/libcore/iter/adapters/mod.rs

+18-8
Original file line numberDiff line numberDiff line change
@@ -1624,7 +1624,10 @@ impl<I> Iterator for Skip<I> where I: Iterator {
16241624
let (lower, upper) = self.iter.size_hint();
16251625

16261626
let lower = lower.saturating_sub(self.n);
1627-
let upper = upper.map(|x| x.saturating_sub(self.n));
1627+
let upper = match upper {
1628+
Some(x) => Some(x.saturating_sub(self.n)),
1629+
None => None,
1630+
};
16281631

16291632
(lower, upper)
16301633
}
@@ -1685,19 +1688,26 @@ impl<I> DoubleEndedIterator for Skip<I> where I: DoubleEndedIterator + ExactSize
16851688
}
16861689
}
16871690

1688-
fn try_rfold<Acc, Fold, R>(&mut self, init: Acc, mut fold: Fold) -> R where
1691+
fn try_rfold<Acc, Fold, R>(&mut self, init: Acc, fold: Fold) -> R where
16891692
Self: Sized, Fold: FnMut(Acc, Self::Item) -> R, R: Try<Ok=Acc>
16901693
{
1691-
let mut n = self.len();
1692-
if n == 0 {
1693-
Try::from_ok(init)
1694-
} else {
1695-
self.iter.try_rfold(init, move |acc, x| {
1694+
fn check<T, Acc, R: Try<Ok = Acc>>(
1695+
mut n: usize,
1696+
mut fold: impl FnMut(Acc, T) -> R,
1697+
) -> impl FnMut(Acc, T) -> LoopState<Acc, R> {
1698+
move |acc, x| {
16961699
n -= 1;
16971700
let r = fold(acc, x);
16981701
if n == 0 { LoopState::Break(r) }
16991702
else { LoopState::from_try(r) }
1700-
}).into_try()
1703+
}
1704+
}
1705+
1706+
let n = self.len();
1707+
if n == 0 {
1708+
Try::from_ok(init)
1709+
} else {
1710+
self.iter.try_rfold(init, check(n, fold)).into_try()
17011711
}
17021712
}
17031713
}

0 commit comments

Comments
 (0)