about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authoroberien <jaro.fietz@gmx.de>2018-01-18 20:49:32 +0100
committeroberien <jaro.fietz@gmx.de>2018-01-18 20:49:32 +0100
commit37771d42d72d80a3025cf1bbf2aa58df79669a4e (patch)
treeaef0212686d44f5ebe75e5b8b184b0312eee1e24 /src
parent3bd4af88bea2e6ecdd3455ed89b3ef1fc3500aa4 (diff)
downloadrust-37771d42d72d80a3025cf1bbf2aa58df79669a4e.tar.gz
rust-37771d42d72d80a3025cf1bbf2aa58df79669a4e.zip
Specialize StepBy::nth
Diffstat (limited to 'src')
-rw-r--r--src/libcore/iter/mod.rs12
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.