Skip to content

Commit 0991a09

Browse files
committed
Remove genericity in StepBy::size_hint
1 parent 977e1e4 commit 0991a09

File tree

1 file changed

+15
-5
lines changed
  • src/libcore/iter/adapters

1 file changed

+15
-5
lines changed

src/libcore/iter/adapters/mod.rs

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -448,14 +448,24 @@ impl<I> Iterator for StepBy<I> where I: Iterator {
448448

449449
#[inline]
450450
fn size_hint(&self) -> (usize, Option<usize>) {
451-
let inner_hint = self.iter.size_hint();
451+
#[inline]
452+
fn first_size(step: usize) -> impl Fn(usize) -> usize {
453+
move |n| if n == 0 { 0 } else { 1 + (n - 1) / (step + 1) }
454+
}
455+
456+
#[inline]
457+
fn other_size(step: usize) -> impl Fn(usize) -> usize {
458+
move |n| n / (step + 1)
459+
}
460+
461+
let (low, high) = self.iter.size_hint();
452462

453463
if self.first_take {
454-
let f = |n| if n == 0 { 0 } else { 1 + (n-1)/(self.step+1) };
455-
(f(inner_hint.0), inner_hint.1.map(f))
464+
let f = first_size(self.step);
465+
(f(low), high.map(f))
456466
} else {
457-
let f = |n| n / (self.step+1);
458-
(f(inner_hint.0), inner_hint.1.map(f))
467+
let f = other_size(self.step);
468+
(f(low), high.map(f))
459469
}
460470
}
461471

0 commit comments

Comments
 (0)