diff -r 0aeea29ef890 -r c24a76f131d6 rust/vec2d/src/lib.rs --- a/rust/vec2d/src/lib.rs Wed Nov 07 19:43:17 2018 +0100 +++ b/rust/vec2d/src/lib.rs Wed Nov 07 22:01:47 2018 +0300 @@ -55,8 +55,14 @@ Self { size, data: vec![value; size.area()] } } - pub fn raw_data(&self) -> &[T] { - &self.data + #[inline] + pub fn as_slice(&self) -> &[T] { + self.data.as_slice() + } + + #[inline] + pub fn as_mut_slice(&mut self) -> &mut [T] { + self.data.as_mut_slice() } #[inline] @@ -83,6 +89,24 @@ pub fn rows(&self) -> impl Iterator { self.data.chunks(self.width()) } + + #[inline] + pub fn rows_mut(&mut self) -> impl Iterator { + let width = self.width(); + self.data.chunks_mut(width) + } +} + +impl AsRef<[T]> for Vec2D { + fn as_ref(&self) -> &[T] { + self.as_slice() + } +} + +impl AsMut<[T]> for Vec2D { + fn as_mut(&mut self) -> &mut [T] { + self.as_mut_slice() + } } #[cfg(test)]