@@ 312,6 312,32 @@ impl NoBetterForCyclesTerminatingCondition {
}
}
+struct AndTerminatingConditions<'a, T: Clone> {
+ terminating_conditions: Vec<&'a mut dyn TerminatingCondition<T>>
+}
+
+impl<'a, T: Clone> AndTerminatingConditions<'a, T> {
+ pub fn new(terminating_conditions: Vec<&'a mut dyn TerminatingCondition<T>>) -> Self {
+ Self {
+ terminating_conditions
+ }
+ }
+}
+
+impl<'a, T: Clone> TerminatingCondition<T> for AndTerminatingConditions<'a, T> {
+ fn should_terminate(
+ self: &mut Self,
+ candidate: &LocalSearchCandidate<T>,
+ stats: &Vec<LocalSearchCandidate<T>>,
+ cycle: usize
+ ) -> bool {
+ return self.terminating_conditions.iter_mut()
+ .all(
+ |cond| cond.should_terminate(candidate, stats, cycle)
+ )
+ }
+}
+
impl<T: Clone> TerminatingCondition<T> for NoBetterForCyclesTerminatingCondition {
fn should_terminate (
self: &mut Self,