1#[cfg(feature = "serde")]
2use crate::{Deserialize, Serialize};
3#[allow(unused)]
4use core::fmt::Write;
5use core::ops::{Deref, DerefMut};
6use core::slice::{Iter, IterMut};
7
8#[derive(Default, Clone, Debug, PartialEq)]
9#[cfg_attr(feature = "serde", derive(Serialize, Deserialize), serde(crate = "sd"))]
10pub struct Grid16P<T: Default + Clone>([T; 16]);
11
12impl<T: Default + Clone> Deref for Grid16P<T> {
13 type Target = [T];
14
15 #[inline(always)]
16 fn deref(&self) -> &Self::Target {
17 &self.0[..]
18 }
19}
20impl<T: Default + Clone> DerefMut for Grid16P<T> {
21 #[inline(always)]
22 fn deref_mut(&mut self) -> &mut Self::Target {
23 &mut self.0[..]
24 }
25}
26
27impl<T: Default + Clone> Grid16P<T> {
28 #[inline(always)]
29 pub fn new() -> Self {
30 Grid16P(Default::default())
31 }
32 #[inline(always)]
33 pub fn as_slice(&self) -> &[T] {
34 self.deref()
35 }
36 #[inline(always)]
37 pub fn as_mut_slice(&mut self) -> &mut [T] {
38 self.deref_mut()
39 }
40 #[inline(always)]
41 pub fn len(&self) -> usize {
42 self.0.len()
43 }
44 #[inline(always)]
45 pub fn iter(&self) -> Iter<'_, T> {
46 self.0.iter()
47 }
48 #[inline(always)]
49 pub fn iter_mut(&mut self) -> IterMut<'_, T> {
50 self.0.iter_mut()
51 }
52}
53
54#[cfg(feature = "test_gen")]
55use crate::source_repr::SourceRepr;
56#[cfg(feature = "test_gen")]
57impl<T: Default + Clone + SourceRepr> SourceRepr for Grid16P<T> {
58 fn to_source(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
59 write!(
60 f,
61 "{{let mut grid=Grid16P::new();let mut gp_iter=grid.iter_mut();"
62 )?;
63 for v in self.0.iter() {
64 write!(f, "*gp_iter.next().unwrap()=")?;
65 v.to_source(f)?;
66 f.write_str(";")?;
67 }
68 write!(f, "grid}}")
69 }
70}