diff --git a/mino/src/matrix.rs b/mino/src/matrix.rs index 545c6f6..f6267b0 100644 --- a/mino/src/matrix.rs +++ b/mino/src/matrix.rs @@ -245,6 +245,15 @@ where } } +impl core::ops::IndexMut for MatBuf +where + T: AsRef<[u16]> + AsMut<[u16]>, +{ + fn index_mut(&mut self, _: core::ops::RangeFull) -> &mut [u16] { + &mut self.buffer.as_mut()[..self.rows] + } +} + // All boilerplate below impl> core::ops::Deref for MatBuf { @@ -274,6 +283,24 @@ impl, U: AsRef<[u16]>> core::cmp::PartialEq> for MatBu self.as_mat() == other.as_mat() } } +impl> core::ops::Index for MatBuf { + type Output = [u16]; + fn index(&self, _: core::ops::RangeFull) -> &[u16] { + &self.as_mat()[..] + } +} +impl + AsMut<[u16]>> core::ops::IndexMut> for MatBuf { + fn index_mut(&mut self, r: core::ops::Range) -> &mut [u16] { + let ar = self.to_array_range(r); + &mut self.buffer.as_mut()[ar] + } +} +impl> core::ops::Index> for MatBuf { + type Output = [u16]; + fn index(&self, r: core::ops::Range) -> &[u16] { + &self.as_mat()[r] + } +} #[cfg(test)] mod test {