rtcm_rs/util/
grid16p.rs

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}