summaryrefslogtreecommitdiff
path: root/src/lib.rs
diff options
context:
space:
mode:
authorBen Bridle <bridle.benjamin@gmail.com>2024-10-07 14:20:34 +1300
committerBen Bridle <bridle.benjamin@gmail.com>2024-10-07 14:21:11 +1300
commite0c939be5db522e4205ffcf7cde597be1140894a (patch)
tree1694546d17ad37ce3964b5d5e773d20dec5543ab /src/lib.rs
parentce3dd5b063594bf5e04b75f04597aef9aff45bc6 (diff)
downloadbuffer-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.rs32
1 files changed, 32 insertions, 0 deletions
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<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()
+ }
+}