equal
deleted
inserted
replaced
1 use std::iter; |
|
2 use std::ops::{Index, IndexMut}; |
1 use std::ops::{Index, IndexMut}; |
|
2 use std::slice::SliceIndex; |
3 |
3 |
4 struct Vec2D<T> { |
4 pub struct Vec2D<T> { |
5 data: Vec<T>, |
5 data: Vec<T>, |
6 width: usize, |
6 width: usize, |
7 height: usize, |
7 height: usize, |
8 } |
8 } |
9 |
9 |
47 |
47 |
48 #[inline] |
48 #[inline] |
49 pub fn height(&self) -> usize { |
49 pub fn height(&self) -> usize { |
50 self.height |
50 self.height |
51 } |
51 } |
|
52 |
|
53 #[inline] |
|
54 pub fn get_mut(&mut self, row: usize, column: usize) -> Option<&mut <usize as SliceIndex<[T]>>::Output> { |
|
55 self.data.get_mut(row * self.width + column) |
|
56 } |
52 } |
57 } |
53 |
58 |
54 #[cfg(test)] |
59 #[cfg(test)] |
55 mod tests { |
60 mod tests { |
56 use super::*; |
61 use super::*; |
67 |
72 |
68 v[2][1] = 0; |
73 v[2][1] = 0; |
69 |
74 |
70 assert_eq!(v[2][0], 0xff); |
75 assert_eq!(v[2][0], 0xff); |
71 assert_eq!(v[2][1], 0); |
76 assert_eq!(v[2][1], 0); |
|
77 |
|
78 v.get_mut(2, 1).map(|v| *v = 1); |
|
79 assert_eq!(v[2][1], 1); |
|
80 |
|
81 assert_eq!(v.get_mut(2, 2), None); |
72 } |
82 } |
73 } |
83 } |