Advertisement
Guest User

Untitled

a guest
Feb 26th, 2017
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 0.86 KB | None | 0 0
  1. pub struct UnitVec {
  2.     vec: Vec<Unit>,
  3.     vacants: BTreeSet<usize>
  4. }
  5.  
  6. impl UnitVec {
  7.     pub fn iter_mut<'a>(&'a mut self) -> UnitIterMut<'a> {
  8.        UnitIterMut {
  9.            vec: &mut self.vec,
  10.            vacants: self.vacants.iter(),
  11.            count: 0,
  12.        }
  13.    }
  14. }
  15.  
  16. struct UnitIterMut<'a> {
  17.     vec: &'a mut Vec<Unit>,
  18.    vacants: btree_set::Iter<'a, usize>,
  19.     count: usize,
  20. }
  21.  
  22. impl<'a> Iterator for UnitIterMut<'a> {
  23.     type Item = &'a mut Unit;
  24.    fn next(&mut self) -> Option<Self::Item> {
  25.        if self.count >= self.vec.len() {
  26.            return None;
  27.        } else if Some(&&self.count) == self.vacants.peekable().peek() {
  28.            let _ = self.vacants.next();
  29.            return self.next();
  30.        } else {
  31.            self.count += 1;
  32.            return Some(self.vec[self.count - 1]);
  33.        }
  34.    }
  35. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement