Advertisement
Guest User

Untitled

a guest
Aug 19th, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.03 KB | None | 0 0
  1. const SIZE: usize = 3;
  2.  
  3. fn letter(n: u8) -> char {
  4. assert!(n < 26);
  5. (n + b'A') as char
  6. }
  7.  
  8. fn main() {
  9. use rand::Rng;
  10. let mut rng = rand::thread_rng();
  11.  
  12. let vec: Vec<char> = (0..SIZE*SIZE).map(|_| letter(rng.gen_range(0, 26))).collect();
  13. let vec = dbg!(trivial::Trivial2dVec::new(vec));
  14. dbg!(vec[2][1]);
  15. }
  16.  
  17. mod trivial {
  18. use super::SIZE;
  19.  
  20. #[derive(Debug, Clone)]
  21. pub(crate) struct Trivial2dVec<T>(Vec<T>);
  22.  
  23. impl<T> Trivial2dVec<T> {
  24. pub(crate) fn new(vec: Vec<T>) -> Self {
  25. assert_eq!(vec.len(), SIZE * SIZE);
  26. Self(vec)
  27. }
  28. }
  29.  
  30. impl<T> std::ops::Index<usize> for Trivial2dVec<T> {
  31. type Output = [T];
  32. fn index(&self, x: usize) -> &[T] {
  33. let base = x * SIZE;
  34. &self.0[base..base + SIZE]
  35. }
  36. }
  37. impl<T> std::ops::IndexMut<usize> for Trivial2dVec<T> {
  38. fn index_mut(&mut self, x: usize) -> &mut [T] {
  39. let base = x * SIZE;
  40. &mut self.0[base..base + SIZE]
  41. }
  42. }
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement