From 4e4940e21ee2bdcdeb084e6d2ed675cdac746dfe Mon Sep 17 00:00:00 2001 From: oxalica Date: Sat, 6 May 2023 21:21:00 +0800 Subject: Add `Arena::alloc_many` to easily get `IdxRange` There are no currently ways to get `IdxRange` without manually offseting `Idx`. Providing a method for multiple-allocation simplifies this process and makes it less error-prone. --- lib/la-arena/src/lib.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/lib/la-arena/src/lib.rs b/lib/la-arena/src/lib.rs index c793fff848e..bb7f21788c6 100644 --- a/lib/la-arena/src/lib.rs +++ b/lib/la-arena/src/lib.rs @@ -312,6 +312,21 @@ impl Arena { idx } + /// Densely allocates multiple values, returning the values’ index range. + /// + /// ``` + /// let mut arena = la_arena::Arena::new(); + /// let range = arena.alloc_many(0..4); + /// + /// assert_eq!(arena[range], [0, 1, 2, 3]); + /// ``` + pub fn alloc_many>(&mut self, iter: II) -> IdxRange { + let start = self.next_idx(); + self.extend(iter); + let end = self.next_idx(); + IdxRange::new(start..end) + } + /// Returns an iterator over the arena’s elements. /// /// ``` -- cgit 1.4.1-3-g733a5