From 3855592447b01ee80240f882c8edc140b2d8e18d Mon Sep 17 00:00:00 2001 From: Johannes <124836140+Johannes0021@users.noreply.github.com> Date: Tue, 1 Apr 2025 09:51:03 +0200 Subject: [PATCH] Prevent underflow with saturating_sub(1) (#812) (#817) --- src/dynamics/island_manager.rs | 6 +++--- src/dynamics/solver/interaction_groups.rs | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/dynamics/island_manager.rs b/src/dynamics/island_manager.rs index 8a4fa45..92c9dab 100644 --- a/src/dynamics/island_manager.rs +++ b/src/dynamics/island_manager.rs @@ -37,7 +37,7 @@ impl IslandManager { } pub(crate) fn num_islands(&self) -> usize { - self.active_islands.len() - 1 + self.active_islands.len().saturating_sub(1) } /// Update this data-structure after one or multiple rigid-bodies have been removed for `bodies`. @@ -244,8 +244,8 @@ impl IslandManager { self.active_islands.clear(); self.active_islands.push(0); - // The max avoid underflow when the stack is empty. - let mut island_marker = self.stack.len().max(1) - 1; + // saturating_sub(1) prevents underflow when the stack is empty. + let mut island_marker = self.stack.len().saturating_sub(1); // NOTE: islands containing a body with non-standard number of iterations won’t // be merged with another island, unless another island with standard diff --git a/src/dynamics/solver/interaction_groups.rs b/src/dynamics/solver/interaction_groups.rs index 521b7a2..35e8c50 100644 --- a/src/dynamics/solver/interaction_groups.rs +++ b/src/dynamics/solver/interaction_groups.rs @@ -58,8 +58,9 @@ impl ParallelInteractionGroups { let range = self.groups[i]..self.groups[i + 1]; &self.sorted_interactions[range] } + pub fn num_groups(&self) -> usize { - self.groups.len() - 1 + self.groups.len().saturating_sub(1) } pub fn group_interactions(