Skip to main content

libtw2_common/
map_iter.rs

1pub struct MapIterator<T, D, I: Iterator> {
2    data: D,
3    iterator: I,
4    // `map` is already an function of an iterator, so we can't use `map` as a
5    // name here.
6    map_fn: fn(I::Item, &mut D) -> T,
7}
8
9impl<T, D, I: Iterator> MapIterator<T, D, I> {
10    pub fn new(data: D, iterator: I, map_fn: fn(I::Item, &mut D) -> T) -> MapIterator<T, D, I> {
11        MapIterator {
12            data: data,
13            iterator: iterator,
14            map_fn: map_fn,
15        }
16    }
17}
18
19impl<T, D, I: Iterator> Iterator for MapIterator<T, D, I> {
20    type Item = T;
21    fn next(&mut self) -> Option<T> {
22        self.iterator
23            .next()
24            .map(|x| (self.map_fn)(x, &mut self.data))
25    }
26    fn size_hint(&self) -> (usize, Option<usize>) {
27        self.iterator.size_hint()
28    }
29}