add some iterators
This commit is contained in:
		
							parent
							
								
									b8baf8127d
								
							
						
					
					
						commit
						ee0c9dceab
					
				
					 2 changed files with 53 additions and 0 deletions
				
			
		|  | @ -101,6 +101,14 @@ impl BitVec { | |||
|         self.data.is_empty() | ||||
|     } | ||||
| 
 | ||||
|     /// Get an iterator over every bit in the vector
 | ||||
|     pub fn iter(&self) -> Iter { | ||||
|         Iter { | ||||
|             bit_vec: self, | ||||
|             index: 0, | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     /// Calculates the byte index and bitmask for a specific bit in the vector
 | ||||
|     fn get_indexes(&self, bit_index: usize) -> (usize, u8) { | ||||
|         assert!( | ||||
|  | @ -143,6 +151,25 @@ impl From<&[u8]> for BitVec { | |||
|     } | ||||
| } | ||||
| 
 | ||||
| pub struct Iter<'t> { | ||||
|     bit_vec: &'t BitVec, | ||||
|     index: usize, | ||||
| } | ||||
| 
 | ||||
| impl<'t> Iterator for Iter<'t> { | ||||
|     type Item = bool; | ||||
| 
 | ||||
|     fn next(&mut self) -> Option<Self::Item> { | ||||
|         if self.index >= self.bit_vec.size { | ||||
|             return None; | ||||
|         } | ||||
| 
 | ||||
|         let result = Some(self.bit_vec.get(self.index)); | ||||
|         self.index += 1; | ||||
|         result | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| #[cfg(test)] | ||||
| mod tests { | ||||
|     use crate::{BitVec, DataRef}; | ||||
|  |  | |||
|  | @ -43,6 +43,13 @@ impl ByteGrid { | |||
|         } | ||||
|     } | ||||
| 
 | ||||
|     pub fn iter(&self) -> Iter { | ||||
|         Iter { | ||||
|             byte_grid: self, | ||||
|             index: 0, | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     fn check_indexes(&self, x: usize, y: usize) { | ||||
|         assert!( | ||||
|             x < self.width, | ||||
|  | @ -152,6 +159,25 @@ impl RefGrid<u8> for ByteGrid { | |||
|     } | ||||
| } | ||||
| 
 | ||||
| pub struct Iter<'t> { | ||||
|     byte_grid: &'t ByteGrid, | ||||
|     index: usize, | ||||
| } | ||||
| 
 | ||||
| impl<'t> Iterator for Iter<'t> { | ||||
|     type Item = u8; | ||||
| 
 | ||||
|     fn next(&mut self) -> Option<Self::Item> { | ||||
|         if self.index >= self.byte_grid.data.len() { | ||||
|             return None; | ||||
|         } | ||||
| 
 | ||||
|         let result = self.byte_grid.data[self.index]; | ||||
|         self.index += 1; | ||||
|         Some(result) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| #[cfg(test)] | ||||
| mod tests { | ||||
|     use crate::{ByteGrid, DataRef, Grid}; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Vinzenz Schroeter
						Vinzenz Schroeter