From d1bce6070def3b4d5045c3fc4bb66904d50d0a40 Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Sat, 3 Apr 2021 23:45:27 +0200 Subject: Use shrink_to_fit to reduce DefMap sizes --- lib/arena/src/lib.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'lib/arena/src/lib.rs') diff --git a/lib/arena/src/lib.rs b/lib/arena/src/lib.rs index 230a50291..bce15c867 100644 --- a/lib/arena/src/lib.rs +++ b/lib/arena/src/lib.rs @@ -194,6 +194,29 @@ impl Arena { self.data.iter().enumerate().map(|(idx, value)| (Idx::from_raw(RawIdx(idx as u32)), value)) } + /// Returns an iterator over the arena’s mutable elements. + /// + /// ``` + /// let mut arena = la_arena::Arena::new(); + /// let idx1 = arena.alloc(20); + /// + /// assert_eq!(arena[idx1], 20); + /// + /// let mut iterator = arena.iter_mut(); + /// *iterator.next().unwrap().1 = 10; + /// drop(iterator); + /// + /// assert_eq!(arena[idx1], 10); + /// ``` + pub fn iter_mut( + &mut self, + ) -> impl Iterator, &mut T)> + ExactSizeIterator + DoubleEndedIterator { + self.data + .iter_mut() + .enumerate() + .map(|(idx, value)| (Idx::from_raw(RawIdx(idx as u32)), value)) + } + /// Reallocates the arena to make it take up as little space as possible. pub fn shrink_to_fit(&mut self) { self.data.shrink_to_fit(); -- cgit v1.2.3