From 357cb2eab405c5a05255575b18ea1b5c5f0972e6 Mon Sep 17 00:00:00 2001 From: Rutherther Date: Wed, 1 Oct 2025 18:29:19 +0200 Subject: [PATCH] feat: add AndTerminatingConditions that ands multiple conditions --- env/src/main.rs | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/env/src/main.rs b/env/src/main.rs index b000c67e225eedee6b3c8d300a49b95e25023162..6bc0fc59a5250dde01f1ca6b5e8f63adf4627768 100644 --- a/env/src/main.rs +++ b/env/src/main.rs @@ -312,6 +312,32 @@ impl NoBetterForCyclesTerminatingCondition { } } +struct AndTerminatingConditions<'a, T: Clone> { + terminating_conditions: Vec<&'a mut dyn TerminatingCondition> +} + +impl<'a, T: Clone> AndTerminatingConditions<'a, T> { + pub fn new(terminating_conditions: Vec<&'a mut dyn TerminatingCondition>) -> Self { + Self { + terminating_conditions + } + } +} + +impl<'a, T: Clone> TerminatingCondition for AndTerminatingConditions<'a, T> { + fn should_terminate( + self: &mut Self, + candidate: &LocalSearchCandidate, + stats: &Vec>, + cycle: usize + ) -> bool { + return self.terminating_conditions.iter_mut() + .all( + |cond| cond.should_terminate(candidate, stats, cycle) + ) + } +} + impl TerminatingCondition for NoBetterForCyclesTerminatingCondition { fn should_terminate ( self: &mut Self,