rtcm_rs/util/
data_vec.rs

1use crate::tinyvec::ArrayVec;
2#[cfg(feature = "serde")]
3use crate::{Deserialize, Serialize};
4#[allow(unused)]
5use core::fmt::Write;
6use core::ops::{Deref, DerefMut};
7use core::slice::{Iter, IterMut};
8
9#[derive(Default, Clone, Debug, PartialEq)]
10#[cfg_attr(feature = "serde", derive(Serialize, Deserialize), serde(crate = "sd"))]
11pub struct DataVec<T: Default + Clone, const N: usize>(ArrayVec<[T; N]>);
12
13impl<T: Default + Clone, const N: usize> Deref for DataVec<T, N> {
14    type Target = [T];
15
16    #[inline(always)]
17    fn deref(&self) -> &Self::Target {
18        self.0.deref()
19    }
20}
21impl<T: Default + Clone, const N: usize> DerefMut for DataVec<T, N> {
22    #[inline(always)]
23    fn deref_mut(&mut self) -> &mut Self::Target {
24        self.0.deref_mut()
25    }
26}
27
28impl<T: Default + Clone, const N: usize> DataVec<T, N> {
29    #[inline(always)]
30    pub fn new() -> Self {
31        DataVec(ArrayVec::new())
32    }
33    #[inline(always)]
34    pub fn as_slice(&self) -> &[T] {
35        self.deref()
36    }
37    #[inline(always)]
38    pub fn as_mut_slice(&mut self) -> &mut [T] {
39        self.deref_mut()
40    }
41    #[inline(always)]
42    pub fn len(&self) -> usize {
43        self.0.len()
44    }
45    #[inline(always)]
46    pub fn capacity(&self) -> usize {
47        self.0.capacity()
48    }
49    #[inline(always)]
50    pub fn clear(&mut self) {
51        self.0.clear();
52    }
53    #[inline(always)]
54    pub fn iter(&self) -> Iter<'_, T> {
55        self.0.iter()
56    }
57    #[inline(always)]
58    pub fn iter_mut(&mut self) -> IterMut<'_, T> {
59        self.0.iter_mut()
60    }
61    #[inline(always)]
62    pub fn pop(&mut self) -> Option<T> {
63        self.0.pop()
64    }
65    #[inline(always)]
66    pub fn push(&mut self, value: T) {
67        self.0.push(value);
68    }
69    #[inline(always)]
70    pub fn remove(&mut self, index: usize) -> T {
71        self.0.remove(index)
72    }
73    #[inline(always)]
74    pub fn set_len(&mut self, new_len: usize) {
75        self.0.set_len(new_len);
76    }
77}
78
79#[cfg(feature = "test_gen")]
80use crate::source_repr::SourceRepr;
81#[cfg(feature = "test_gen")]
82impl<T: Default + Clone + SourceRepr, const N: usize> SourceRepr for DataVec<T, N> {
83    fn to_source(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
84        f.write_char('{')?;
85        write!(
86            f,
87            "#[allow(unused_mut)] let mut vec = DataVec::<_,{}>::new();",
88            N
89        )?;
90        for v in self.0.iter() {
91            f.write_str("vec.push(")?;
92            v.to_source(f)?;
93            f.write_str(");")?;
94        }
95        f.write_str("vec")?;
96        f.write_char('}')
97    }
98}