diff options
| author | Jonas Schievink <jonasschievink@gmail.com> | 2021-04-03 23:45:27 +0200 |
|---|---|---|
| committer | Jonas Schievink <jonasschievink@gmail.com> | 2021-04-03 23:45:27 +0200 |
| commit | d1bce6070def3b4d5045c3fc4bb66904d50d0a40 (patch) | |
| tree | f671f0e97d91f9392f90911ebcb62df8eea958ea /lib | |
| parent | b78f1a0a4d90276c7bd99bd0e5ac6959578be76a (diff) | |
| download | rust-d1bce6070def3b4d5045c3fc4bb66904d50d0a40.tar.gz rust-d1bce6070def3b4d5045c3fc4bb66904d50d0a40.zip | |
Use shrink_to_fit to reduce DefMap sizes
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/arena/src/lib.rs | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/lib/arena/src/lib.rs b/lib/arena/src/lib.rs index 230a502910e..bce15c8679f 100644 --- a/lib/arena/src/lib.rs +++ b/lib/arena/src/lib.rs @@ -194,6 +194,29 @@ impl<T> Arena<T> { 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<Item = (Idx<T>, &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(); |
