Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const SIZE: usize = 3;
- fn letter(n: u8) -> char {
- assert!(n < 26);
- (n + b'A') as char
- }
- fn main() {
- use rand::Rng;
- let mut rng = rand::thread_rng();
- let vec: Vec<char> = (0..SIZE*SIZE).map(|_| letter(rng.gen_range(0, 26))).collect();
- let vec = dbg!(trivial::Trivial2dVec::new(vec));
- dbg!(vec[2][1]);
- }
- mod trivial {
- use super::SIZE;
- #[derive(Debug, Clone)]
- pub(crate) struct Trivial2dVec<T>(Vec<T>);
- impl<T> Trivial2dVec<T> {
- pub(crate) fn new(vec: Vec<T>) -> Self {
- assert_eq!(vec.len(), SIZE * SIZE);
- Self(vec)
- }
- }
- impl<T> std::ops::Index<usize> for Trivial2dVec<T> {
- type Output = [T];
- fn index(&self, x: usize) -> &[T] {
- let base = x * SIZE;
- &self.0[base..base + SIZE]
- }
- }
- impl<T> std::ops::IndexMut<usize> for Trivial2dVec<T> {
- fn index_mut(&mut self, x: usize) -> &mut [T] {
- let base = x * SIZE;
- &mut self.0[base..base + SIZE]
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement