@@ -198,6 +198,26 @@ impl<K: Enumerated, V: Default, const N: usize> EnumMap<K, V, N> {
198
198
_key : PhantomData ,
199
199
}
200
200
}
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
+ }
201
221
}
202
222
203
223
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> {
222
242
_key : PhantomData ,
223
243
}
224
244
}
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
+ }
225
273
}
226
274
227
275
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> {
247
295
}
248
296
}
249
297
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
+
250
322
/// Iterates over the EnumMap's key-value pairs.
251
323
///
252
324
/// ```
0 commit comments