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(