Skip to content

Commit f365574

Browse files
committed
Reduce genericity in Skip
1 parent b46d5d1 commit f365574

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

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1552,7 +1552,10 @@ impl<I> Iterator for Skip<I> where I: Iterator {
15521552
let (lower, upper) = self.iter.size_hint();
15531553

15541554
let lower = lower.saturating_sub(self.n);
1555-
let upper = upper.map(|x| x.saturating_sub(self.n));
1555+
let upper = match upper {
1556+
Some(x) => Some(x.saturating_sub(self.n)),
1557+
None => None,
1558+
};
15561559

15571560
(lower, upper)
15581561
}
@@ -1613,19 +1616,26 @@ impl<I> DoubleEndedIterator for Skip<I> where I: DoubleEndedIterator + ExactSize
16131616
}
16141617
}
16151618

1616-
fn try_rfold<Acc, Fold, R>(&mut self, init: Acc, mut fold: Fold) -> R where
1619+
fn try_rfold<Acc, Fold, R>(&mut self, init: Acc, fold: Fold) -> R where
16171620
Self: Sized, Fold: FnMut(Acc, Self::Item) -> R, R: Try<Ok=Acc>
16181621
{
1619-
let mut n = self.len();
1620-
if n == 0 {
1621-
Try::from_ok(init)
1622-
} else {
1623-
self.iter.try_rfold(init, move |acc, x| {
1622+
fn check<T, Acc, R: Try<Ok = Acc>>(
1623+
mut n: usize,
1624+
mut fold: impl FnMut(Acc, T) -> R,
1625+
) -> impl FnMut(Acc, T) -> LoopState<Acc, R> {
1626+
move |acc, x| {
16241627
n -= 1;
16251628
let r = fold(acc, x);
16261629
if n == 0 { LoopState::Break(r) }
16271630
else { LoopState::from_try(r) }
1628-
}).into_try()
1631+
}
1632+
}
1633+
1634+
let n = self.len();
1635+
if n == 0 {
1636+
Try::from_ok(init)
1637+
} else {
1638+
self.iter.try_rfold(init, check(n, fold)).into_try()
16291639
}
16301640
}
16311641
}

0 commit comments

Comments
 (0)