cl_aux/traits/
clear.rs

1#[cfg(feature = "alloc")]
2use alloc::{string::String, vec::Vec};
3
4/// See [`Clear::clear`] for more information.
5pub trait Clear {
6  /// "Clears" the internal buffer, "erasing" all elements.
7  fn clear(&mut self);
8}
9
10impl<T> Clear for &mut T
11where
12  T: Clear,
13{
14  #[inline]
15  fn clear(&mut self) {
16    (*self).clear();
17  }
18}
19
20impl Clear for () {
21  #[inline]
22  fn clear(&mut self) {}
23}
24
25/// ```rust
26/// let mut opt = Some(0);
27/// cl_aux::Clear::clear(&mut opt);
28/// assert_eq!(opt, None);
29/// ```
30impl<T> Clear for Option<T> {
31  #[inline]
32  fn clear(&mut self) {
33    *self = None;
34  }
35}
36
37/// ```rust
38/// let mut structure = cl_aux::doc_tests::string();
39/// cl_aux::Clear::clear(&mut structure);
40/// assert_eq!(structure.len(), 0);
41/// ```
42#[cfg(feature = "alloc")]
43impl Clear for String {
44  #[inline]
45  fn clear(&mut self) {
46    self.clear();
47  }
48}
49
50/// ```rust
51/// let mut structure = cl_aux::doc_tests::vec();
52/// cl_aux::Clear::clear(&mut structure);
53/// assert_eq!(structure.len(), 0);
54/// ```
55#[cfg(feature = "alloc")]
56impl<T> Clear for Vec<T> {
57  #[inline]
58  fn clear(&mut self) {
59    self.clear();
60  }
61}
62
63/// ```rust
64/// let mut structure = cl_aux::doc_tests::array_string();
65/// cl_aux::Clear::clear(&mut structure);
66/// assert_eq!(structure.len(), 0);
67/// ```
68#[cfg(feature = "arrayvec")]
69impl<const N: usize> Clear for arrayvec::ArrayString<N> {
70  #[inline]
71  fn clear(&mut self) {
72    self.clear();
73  }
74}
75
76/// ```rust
77/// let mut structure = cl_aux::doc_tests::array_vec();
78/// cl_aux::Clear::clear(&mut structure);
79/// assert_eq!(structure.len(), 0);
80/// ```
81#[cfg(feature = "arrayvec")]
82impl<T, const N: usize> Clear for arrayvec::ArrayVec<T, N> {
83  #[inline]
84  fn clear(&mut self) {
85    self.clear();
86  }
87}
88
89/// ```rust
90/// let mut structure = cl_aux::doc_tests::small_vec();
91/// cl_aux::Clear::clear(&mut structure);
92/// assert_eq!(structure.len(), 0);
93/// ```
94#[cfg(feature = "smallvec")]
95impl<A> Clear for smallvec::SmallVec<A>
96where
97  A: smallvec::Array,
98{
99  #[inline]
100  fn clear(&mut self) {
101    self.clear();
102  }
103}
104
105/// ```rust
106/// let mut structure = cl_aux::doc_tests::tiny_vec_array_vec();
107/// cl_aux::Clear::clear(&mut structure);
108/// assert_eq!(structure.len(), 0);
109/// ```
110#[cfg(feature = "tinyvec")]
111impl<A> Clear for tinyvec::ArrayVec<A>
112where
113  A: tinyvec::Array,
114  A::Item: Default,
115{
116  #[inline]
117  fn clear(&mut self) {
118    self.clear();
119  }
120}
121
122/// ```rust
123/// let mut structure = cl_aux::doc_tests::tiny_vec_tiny_vec();
124/// cl_aux::Clear::clear(&mut structure);
125/// assert_eq!(structure.len(), 0);
126/// ```
127#[cfg(all(feature = "alloc", feature = "tinyvec"))]
128impl<A> Clear for tinyvec::TinyVec<A>
129where
130  A: tinyvec::Array,
131  A::Item: Default,
132{
133  #[inline]
134  fn clear(&mut self) {
135    self.clear();
136  }
137}