From cbf58af4f0c751769e85191b3bdbe800a6ffad63 Mon Sep 17 00:00:00 2001 From: melodicore Date: Sat, 21 Mar 2026 15:06:28 +0200 Subject: [PATCH] feat: mutable iterators Signed-off-by: melodicore --- enum-collections/src/enummap.rs | 46 +++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/enum-collections/src/enummap.rs b/enum-collections/src/enummap.rs index f4f0ac8..3cef2bf 100644 --- a/enum-collections/src/enummap.rs +++ b/enum-collections/src/enummap.rs @@ -366,6 +366,29 @@ impl EnumMap { K::VARIANTS.iter().zip(self.data.iter()) } + /// Mutably iterates over the EnumMap's key-value pairs. Only the values are mutable. + /// + /// ``` + /// use std::ops::AddAssign; + /// use enum_collections::{EnumMap, Enumerated}; + /// #[derive(Enumerated, Debug)] + /// pub enum Letter { + /// A, + /// B, + /// } + /// + /// let mut enum_map = EnumMap::::new(|| 42); + /// for (_letter, value) in enum_map.iter_kv_mut() { + /// value.add_assign(10); + /// assert_eq!(52, *value); + /// } + /// + /// ``` + #[cfg(feature = "variants")] + pub fn iter_kv_mut(&mut self) -> std::iter::Zip, std::slice::IterMut<'_, V>> { + K::VARIANTS.iter().zip(self.data.iter_mut()) + } + /// Iterates over the EnumMap's values. /// /// ``` @@ -387,6 +410,29 @@ impl EnumMap { self.data.iter() } + /// Mutably iterates over the EnumMap's values. + /// + /// ``` + /// use std::ops::AddAssign; + /// use enum_collections::{EnumMap, Enumerated}; + /// #[derive(Enumerated, Debug)] + /// pub enum Letter { + /// A, + /// B, + /// } + /// + /// let mut enum_map = EnumMap::::new(|| 42); + /// for value in enum_map.iter_mut() { + /// value.add_assign(10); + /// assert_eq!(52, *value); + /// } + /// + /// ``` + #[cfg(feature = "variants")] + pub fn iter_mut(&mut self) -> std::slice::IterMut<'_, V> { + self.data.iter_mut() + } + /// Creates a new EnumMap where value of each variant is produced by the provided function. /// The function receives the enum variant being initialized for inspection. ///