diff options
| author | Josh Stone <jistone@redhat.com> | 2019-07-11 16:03:21 -0700 |
|---|---|---|
| committer | Josh Stone <jistone@redhat.com> | 2019-08-12 15:03:44 -0700 |
| commit | b1fd3d024d977828e3071392a7ccc0a1e27bd206 (patch) | |
| tree | ce3434435ffa1556fc6c9534b8883cd666e26d09 | |
| parent | d940ddf8f5851ace3504058d6285f0b7b8c45c9f (diff) | |
| download | rust-b1fd3d024d977828e3071392a7ccc0a1e27bd206.tar.gz rust-b1fd3d024d977828e3071392a7ccc0a1e27bd206.zip | |
Remove genericity in StepBy::size_hint
| -rw-r--r-- | src/libcore/iter/adapters/mod.rs | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/libcore/iter/adapters/mod.rs b/src/libcore/iter/adapters/mod.rs index 4e54cb2bf31..008907b6e31 100644 --- a/src/libcore/iter/adapters/mod.rs +++ b/src/libcore/iter/adapters/mod.rs @@ -448,14 +448,24 @@ impl<I> Iterator for StepBy<I> where I: Iterator { #[inline] fn size_hint(&self) -> (usize, Option<usize>) { - let inner_hint = self.iter.size_hint(); + #[inline] + fn first_size(step: usize) -> impl Fn(usize) -> usize { + move |n| if n == 0 { 0 } else { 1 + (n - 1) / (step + 1) } + } + + #[inline] + fn other_size(step: usize) -> impl Fn(usize) -> usize { + move |n| n / (step + 1) + } + + let (low, high) = self.iter.size_hint(); if self.first_take { - let f = |n| if n == 0 { 0 } else { 1 + (n-1)/(self.step+1) }; - (f(inner_hint.0), inner_hint.1.map(f)) + let f = first_size(self.step); + (f(low), high.map(f)) } else { - let f = |n| n / (self.step+1); - (f(inner_hint.0), inner_hint.1.map(f)) + let f = other_size(self.step); + (f(low), high.map(f)) } } |
