summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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()
+ }
+}