Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- pub struct UnitVec {
- vec: Vec<Unit>,
- vacants: BTreeSet<usize>
- }
- impl UnitVec {
- pub fn iter_mut<'a>(&'a mut self) -> UnitIterMut<'a> {
- UnitIterMut {
- vec: &mut self.vec,
- vacants: self.vacants.iter(),
- count: 0,
- }
- }
- }
- struct UnitIterMut<'a> {
- vec: &'a mut Vec<Unit>,
- vacants: btree_set::Iter<'a, usize>,
- count: usize,
- }
- impl<'a> Iterator for UnitIterMut<'a> {
- type Item = &'a mut Unit;
- fn next(&mut self) -> Option<Self::Item> {
- if self.count >= self.vec.len() {
- return None;
- } else if Some(&&self.count) == self.vacants.peekable().peek() {
- let _ = self.vacants.next();
- return self.next();
- } else {
- self.count += 1;
- return Some(self.vec[self.count - 1]);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement