vigilant_lamp/extra/
iter_range.rs1use std::iter::{Skip};
2
3pub struct RangedIterator<A: Iterator> {
4 parent: A,
5 remaining: usize
6}
7
8impl<A: Iterator> RangedIterator<A> {
9 pub fn new (parent: A, from: usize, to: usize) -> RangedIterator<Skip<A>> {
10 RangedIterator { parent: parent.skip(from), remaining: to - from }
11 }
12
13 pub fn limit (parent: A, len: usize) -> RangedIterator<A> {
14 RangedIterator { parent, remaining: len }
15 }
16}
17
18impl<A: Iterator> Iterator for RangedIterator<A> {
19 type Item = A::Item;
20
21 fn next (&mut self) -> Option<Self::Item> {
22 if self.remaining <= 0 {
23 return None
24 }
25
26 self.remaining -= 1;
27 self.parent.next()
28 }
29}