diff options
| author | oberien <jaro.fietz@gmx.de> | 2018-01-18 20:49:32 +0100 |
|---|---|---|
| committer | oberien <jaro.fietz@gmx.de> | 2018-01-18 20:49:32 +0100 |
| commit | 37771d42d72d80a3025cf1bbf2aa58df79669a4e (patch) | |
| tree | aef0212686d44f5ebe75e5b8b184b0312eee1e24 /src | |
| parent | 3bd4af88bea2e6ecdd3455ed89b3ef1fc3500aa4 (diff) | |
| download | rust-37771d42d72d80a3025cf1bbf2aa58df79669a4e.tar.gz rust-37771d42d72d80a3025cf1bbf2aa58df79669a4e.zip | |
Specialize StepBy::nth
Diffstat (limited to 'src')
| -rw-r--r-- | src/libcore/iter/mod.rs | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/libcore/iter/mod.rs b/src/libcore/iter/mod.rs index 06c29b47bf9..443b1567e1b 100644 --- a/src/libcore/iter/mod.rs +++ b/src/libcore/iter/mod.rs @@ -694,6 +694,18 @@ impl<I> Iterator for StepBy<I> where I: Iterator { (f(inner_hint.0), inner_hint.1.map(f)) } } + + #[inline] + fn nth(&mut self, mut n: usize) -> Option<Self::Item> { + if self.first_take { + if n == 0 { + self.first_take = false; + return self.iter.next() + } + n -= 1; + } + self.iter.nth(n * self.step) + } } // StepBy can only make the iterator shorter, so the len will still fit. |
