Skip to content

Commit 2d575ee

Browse files
committed
feat: enum-map clearing
1 parent 0087513 commit 2d575ee

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

Diff for: enum-collections/src/enummap.rs

+72
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,26 @@ impl<K: Enumerated, V: Default, const N: usize> EnumMap<K, V, N> {
198198
_key: PhantomData,
199199
}
200200
}
201+
/// Sets all values to `V::default()`.
202+
///
203+
/// ```
204+
/// use enum_collections::{EnumMap, Enumerated};
205+
/// #[derive(Enumerated)]
206+
/// pub enum Letter {
207+
/// A,
208+
/// B,
209+
/// }
210+
/// let mut enum_map = EnumMap::<Letter, i32, { Letter::SIZE }>::new(|| 42);
211+
/// enum_map.iter().for_each(|value| assert_eq!(42, *value));
212+
/// enum_map.clear_set_default();
213+
/// enum_map.iter().for_each(|value| assert_eq!(0, *value));
214+
/// ```
215+
///
216+
pub fn clear_set_default(&mut self) {
217+
for idx in 0..self.data.len() {
218+
self.data[idx] = V::default();
219+
}
220+
}
201221
}
202222

203223
impl<K: Enumerated, V, const N: usize> EnumMap<K, Option<V>, N> {
@@ -222,6 +242,34 @@ impl<K: Enumerated, V, const N: usize> EnumMap<K, Option<V>, N> {
222242
_key: PhantomData,
223243
}
224244
}
245+
246+
/// Clears the EnumMap and sets all values to `None`.
247+
///
248+
/// This function iterates over each variant of the EnumMap and sets its value to `None`.
249+
///
250+
/// # Examples
251+
///
252+
/// ```
253+
/// use enum_collections::{EnumMap, Enumerated};
254+
/// #[derive(Enumerated)]
255+
/// pub enum Letter {
256+
/// A,
257+
/// B,
258+
/// }
259+
///
260+
/// let mut enum_map = EnumMap::<Letter, Option<i32>, { Letter::SIZE }>::new_option();
261+
/// enum_map[Letter::A] = Some(10);
262+
/// enum_map[Letter::B] = Some(20);
263+
///
264+
/// enum_map.clear_set_none();
265+
/// enum_map.iter().for_each(|value| assert_eq!(None, *value));
266+
///
267+
/// ```
268+
pub fn clear_set_none(&mut self) {
269+
for idx in 0..self.data.len() {
270+
self.data[idx] = None;
271+
}
272+
}
225273
}
226274

227275
impl<K: Enumerated, V, const N: usize> EnumMap<K, V, N> {
@@ -247,6 +295,30 @@ impl<K: Enumerated, V, const N: usize> EnumMap<K, V, N> {
247295
}
248296
}
249297

298+
/// Iterates over each variant of the EnumMap and sets its value to the value provided by the `val_provider` function.
299+
///
300+
/// Unlike [Self::new], this function does not allocate a new EnumMap.
301+
///
302+
/// # Examples
303+
///
304+
/// ```
305+
/// use enum_collections::{EnumMap, Enumerated};
306+
/// #[derive(Enumerated)]
307+
/// pub enum Letter {
308+
/// A,
309+
/// B,
310+
/// }
311+
///
312+
/// let mut enum_map = EnumMap::<Letter, i32, { Letter::SIZE }>::new(|| 42);
313+
/// enum_map.set_all(|| 24);
314+
/// enum_map.iter().for_each(|value| assert_eq!(24, *value));
315+
/// ```
316+
pub fn set_all(&mut self, val_provider: fn() -> V) {
317+
for idx in 0..self.data.len() {
318+
self.data[idx] = val_provider();
319+
}
320+
}
321+
250322
/// Iterates over the EnumMap's key-value pairs.
251323
///
252324
/// ```

0 commit comments

Comments
 (0)