1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
pub struct Stepper { start: usize, end: usize, step: usize } impl Stepper { pub fn new(start: usize, end: usize, step: usize) -> Self { Stepper { start: start, end: end, step: step } } } impl Iterator for Stepper { type Item = usize; fn next(&mut self) -> Option<usize> { if self.start >= self.end { return None; } let next = self.start; self.start += self.step; Some(next) } } #[macro_export] macro_rules! step { ($start:expr => $end:expr; $step:expr) => { Stepper::new($start, $end, $step).into_iter() } }