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}