diff options
author | Ben Bridle <bridle.benjamin@gmail.com> | 2024-10-07 14:20:34 +1300 |
---|---|---|
committer | Ben Bridle <bridle.benjamin@gmail.com> | 2024-10-07 14:21:11 +1300 |
commit | e0c939be5db522e4205ffcf7cde597be1140894a (patch) | |
tree | 1694546d17ad37ce3964b5d5e773d20dec5543ab /src/lib.rs | |
parent | ce3dd5b063594bf5e04b75f04597aef9aff45bc6 (diff) | |
download | buffer-e0c939be5db522e4205ffcf7cde597be1140894a.zip |
Implement IntoIterator and Deref for Buffer
This allows a buffer to be used directly as an iterator in a for loop.
Diffstat (limited to 'src/lib.rs')
-rw-r--r-- | src/lib.rs | 32 |
1 files changed, 32 insertions, 0 deletions
@@ -87,3 +87,35 @@ impl std::ops::Index<usize> for Buffer { impl std::ops::IndexMut<usize> 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() + } +} |