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 32
use ::theban_interval_tree::RangePairIter; use ::memrange::Range; use content::Bitmap; use content::BitmapSlice; pub struct BitmapSliceIter<'a> { orig: RangePairIter<'a, Bitmap>, orig_rng: Range, } impl<'a> BitmapSliceIter<'a> { pub fn new(orig: RangePairIter<Bitmap>, rng: Range) -> BitmapSliceIter { return BitmapSliceIter{orig: orig, orig_rng: rng}; } pub fn get_range(&self) -> Range { return self.orig_rng; } } impl<'a> Iterator for BitmapSliceIter<'a> { type Item = (Range,BitmapSlice<'a>); fn next(&mut self) -> Option<(Range,BitmapSlice<'a>)> { if let Some(n) = self.orig.get_next_node() { return Some(( n.key.get_intersection(&self.orig_rng), n.data.to_subslice(n.key, self.orig_rng)) ) } return None } }