From 5bcdc439f60867e914bcbc242c8578bc3c14f52c Mon Sep 17 00:00:00 2001 From: Bruno-Alumn <171815746+Bruno-Alumn@users.noreply.github.com> Date: Fri, 30 Oct 2026 15:21:57 +0100 Subject: [PATCH] Build the used mask ids once in next_mask_id's fallback Scanning every mask for every candidate id made a dense run of ids quadratic. Collect them into a set first. --- crates/develop/src/lib.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/crates/develop/src/lib.rs b/crates/develop/src/lib.rs index dd059c117..f2d1e63bf 100644 --- a/crates/develop/src/lib.rs +++ b/crates/develop/src/lib.rs @@ -164,11 +164,16 @@ impl DevelopSettings { /// Next free mask id: one past the highest, or, when that is `u32::MAX` (ids come from files, /// pastes and agents), the lowest one no mask uses. pub fn next_mask_id(&self) -> u32 { - let used = |id: u32| self.masks.iter().any(|m| m.id == id); match self.masks.iter().map(|m| m.id).max() { None => 1, // fewer masks than ids: one of the first `masks.len() + 1` is free - Some(max) => max.checked_add(1).or_else(|| (1..=u32::MAX).find(|&id| !used(id))).unwrap_or(0), + Some(max) => max + .checked_add(1) + .or_else(|| { + let used: std::collections::HashSet = self.masks.iter().map(|m| m.id).collect(); + (1..=u32::MAX).find(|id| !used.contains(id)) + }) + .unwrap_or(0), } } }