remove iter from trait
This commit is contained in:
		
							parent
							
								
									17d41ef6c6
								
							
						
					
					
						commit
						c600761f29
					
				
					 3 changed files with 37 additions and 60 deletions
				
			
		| 
						 | 
					@ -1,3 +1,5 @@
 | 
				
			||||||
 | 
					use std::slice::{Iter, IterMut};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::grid::RefGrid;
 | 
					use crate::grid::RefGrid;
 | 
				
			||||||
use crate::{DataRef, Grid};
 | 
					use crate::{DataRef, Grid};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -43,6 +45,24 @@ impl ByteGrid {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pub fn iter(&self) -> Iter<u8> {
 | 
				
			||||||
 | 
					        self.data.iter()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pub fn iter_rows(&self) -> IterRows {
 | 
				
			||||||
 | 
					        IterRows {
 | 
				
			||||||
 | 
					            byte_grid: self,
 | 
				
			||||||
 | 
					            row: 0,
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Returns an iterator that allows modifying each value.
 | 
				
			||||||
 | 
					    ///
 | 
				
			||||||
 | 
					    /// The iterator yields all cells from top left to bottom right.
 | 
				
			||||||
 | 
					    pub fn iter_mut(&mut self) -> IterMut<u8> {
 | 
				
			||||||
 | 
					        self.data.iter_mut()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fn check_indexes(&self, x: usize, y: usize) {
 | 
					    fn check_indexes(&self, x: usize, y: usize) {
 | 
				
			||||||
        assert!(
 | 
					        assert!(
 | 
				
			||||||
            x < self.width,
 | 
					            x < self.width,
 | 
				
			||||||
| 
						 | 
					@ -92,21 +112,6 @@ impl Grid<u8> for ByteGrid {
 | 
				
			||||||
        self.data[x + y * self.width]
 | 
					        self.data[x + y * self.width]
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fn iter(&self) -> impl Iterator<Item = u8> {
 | 
					 | 
				
			||||||
        Iter {
 | 
					 | 
				
			||||||
            byte_grid: self,
 | 
					 | 
				
			||||||
            index: 0,
 | 
					 | 
				
			||||||
            end: self.data.len(),
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    fn iter_rows(&self) -> impl Iterator<Item = impl Iterator<Item = u8>> {
 | 
					 | 
				
			||||||
        IterRows {
 | 
					 | 
				
			||||||
            byte_grid: self,
 | 
					 | 
				
			||||||
            row: 0,
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    fn fill(&mut self, value: u8) {
 | 
					    fn fill(&mut self, value: u8) {
 | 
				
			||||||
        self.data.fill(value);
 | 
					        self.data.fill(value);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -167,45 +172,24 @@ impl RefGrid<u8> for ByteGrid {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub struct Iter<'t> {
 | 
					 | 
				
			||||||
    byte_grid: &'t ByteGrid,
 | 
					 | 
				
			||||||
    index: usize,
 | 
					 | 
				
			||||||
    end: usize,
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
impl<'t> Iterator for Iter<'t> {
 | 
					 | 
				
			||||||
    type Item = u8;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    fn next(&mut self) -> Option<Self::Item> {
 | 
					 | 
				
			||||||
        if self.index >= self.end {
 | 
					 | 
				
			||||||
            return None;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        let result = self.byte_grid.data[self.index];
 | 
					 | 
				
			||||||
        self.index += 1;
 | 
					 | 
				
			||||||
        Some(result)
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
pub struct IterRows<'t> {
 | 
					pub struct IterRows<'t> {
 | 
				
			||||||
    byte_grid: &'t ByteGrid,
 | 
					    byte_grid: &'t ByteGrid,
 | 
				
			||||||
    row: usize,
 | 
					    row: usize,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<'t> Iterator for IterRows<'t> {
 | 
					impl<'t> Iterator for IterRows<'t> {
 | 
				
			||||||
    type Item = Iter<'t>;
 | 
					    type Item = Iter<'t, u8>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fn next(&mut self) -> Option<Self::Item> {
 | 
					    fn next(&mut self) -> Option<Self::Item> {
 | 
				
			||||||
        if self.row >= self.byte_grid.height {
 | 
					        if self.row >= self.byte_grid.height {
 | 
				
			||||||
            return None;
 | 
					            return None;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        let result = Some(Iter {
 | 
					
 | 
				
			||||||
            byte_grid: self.byte_grid,
 | 
					        let start = self.row * self.byte_grid.width;
 | 
				
			||||||
            index: self.row * self.byte_grid.width,
 | 
					        let end = start + self.byte_grid.width;
 | 
				
			||||||
            end: (self.row + 1) * self.byte_grid.width,
 | 
					        let result = self.byte_grid.data[start..end].iter();
 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
        self.row += 1;
 | 
					        self.row += 1;
 | 
				
			||||||
        result
 | 
					        Some(result)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -54,13 +54,6 @@ pub trait Grid<T> {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// Get an iterator over every cell in the grid.
 | 
					 | 
				
			||||||
    ///
 | 
					 | 
				
			||||||
    /// Iteration is done in memory order, rows first.
 | 
					 | 
				
			||||||
    fn iter(&self) -> impl Iterator<Item = T>;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    fn iter_rows(&self) -> impl Iterator<Item = impl Iterator<Item = T>>;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /// Sets all cells in the grid to the specified value
 | 
					    /// Sets all cells in the grid to the specified value
 | 
				
			||||||
    fn fill(&mut self, value: T);
 | 
					    fn fill(&mut self, value: T);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -60,6 +60,17 @@ impl PixelGrid {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pub fn iter(&self) -> crate::bit_vec::Iter {
 | 
				
			||||||
 | 
					        self.bit_vec.iter()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pub fn iter_rows(&self) -> IterRows {
 | 
				
			||||||
 | 
					        IterRows {
 | 
				
			||||||
 | 
					            pixel_grid: self,
 | 
				
			||||||
 | 
					            row: 0,
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fn check_indexes(&self, x: usize, y: usize) {
 | 
					    fn check_indexes(&self, x: usize, y: usize) {
 | 
				
			||||||
        assert!(
 | 
					        assert!(
 | 
				
			||||||
            x < self.width,
 | 
					            x < self.width,
 | 
				
			||||||
| 
						 | 
					@ -96,17 +107,6 @@ impl Grid<bool> for PixelGrid {
 | 
				
			||||||
        self.bit_vec.get(x + y * self.width)
 | 
					        self.bit_vec.get(x + y * self.width)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fn iter(&self) -> impl Iterator<Item = bool> {
 | 
					 | 
				
			||||||
        self.bit_vec.iter()
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    fn iter_rows(&self) -> impl Iterator<Item = impl Iterator<Item = bool>> {
 | 
					 | 
				
			||||||
        IterRows {
 | 
					 | 
				
			||||||
            pixel_grid: self,
 | 
					 | 
				
			||||||
            row: 0,
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /// Sets the state of all pixels in the `PixelGrid`.
 | 
					    /// Sets the state of all pixels in the `PixelGrid`.
 | 
				
			||||||
    ///
 | 
					    ///
 | 
				
			||||||
    /// # Arguments
 | 
					    /// # Arguments
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue