From e0c939be5db522e4205ffcf7cde597be1140894a Mon Sep 17 00:00:00 2001 From: Ben Bridle Date: Mon, 7 Oct 2024 14:20:34 +1300 Subject: Implement IntoIterator and Deref for Buffer This allows a buffer to be used directly as an iterator in a for loop. --- src/lib.rs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'src') diff --git a/src/lib.rs b/src/lib.rs index 91cbdbc..fe5d57a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -87,3 +87,35 @@ impl std::ops::Index for Buffer { impl std::ops::IndexMut for Buffer { fn index_mut(&mut self, i: usize) -> &mut Colour { &mut self.array[i] } } + +impl std::ops::Deref for Buffer { + type Target = [Colour]; + + fn deref(&self) -> &[Colour] { + self.pixels.as_slice() + } +} + +impl std::ops::DerefMut for Buffer { + fn deref_mut(&mut self) -> &mut [Colour] { + self.pixels.as_mut_slice() + } +} + +impl<'a> IntoIterator for &'a Buffer { + type Item = &'a Colour; + type IntoIter = std::slice::Iter<'a, Colour>; + + fn into_iter(self) -> Self::IntoIter { + self.array.iter() + } +} + +impl<'a> IntoIterator for &'a mut Buffer { + type Item = &'a mut Colour; + type IntoIter = std::slice::IterMut<'a, Colour>; + + fn into_iter(self) -> Self::IntoIter { + self.array.iter_mut() + } +} -- cgit v1.2.3-70-g09d2