/*
* Copyright © 2010 by Ondrej Skalicka. All Rights Reserved
*/
package cz.cvut.felk.cig.jcop.solver.condition;
import cz.cvut.felk.cig.jcop.solver.message.Message;
import cz.cvut.felk.cig.jcop.solver.message.MessageOptimize;
import cz.cvut.felk.cig.jcop.solver.message.MessageSolverStart;
/**
* Limits solver to run only certain amount of iterations.
*
* @author Ondrej Skalicka
*/
public class IterationCondition extends BaseCondition {
/**
* Current number of iterations from message {@link cz.cvut.felk.cig.jcop.solver.message.MessageOptimize}.
*/
protected int iterations;
/**
* Threshold for iterations - if {@link #iterations} reaches this number, this condition is considered met.
*/
protected int iterationThreshold;
/**
* Creates new IterationCondition with given threshold.
*
* @param iterationThreshold how many iterations are allowed
*/
public IterationCondition(int iterationThreshold) {
this.iterationThreshold = iterationThreshold;
this.iterations = 0;
}
public boolean isConditionMet() {
return this.iterations >= this.iterationThreshold;
}
@Override
public void onMessage(Message message) {
if (message instanceof MessageOptimize) this.iterations++;
else if (message instanceof MessageSolverStart) this.iterations = 0;
}
}