package ac.essex.gp.tree;

/**
 * Each time a node is executed, the debugger is called to record the value.
 * This provides valuable information to the Tree Optimiser.
 *
 * @author Olly Oechsle, University of Essex, Date: 16-Jan-2007
 * @version 1.0
 */
public class Debugger {

    protected int numberOfExecutions = 0;

    private double value = -1;

    boolean alwaysTheSame = true;

    public Debugger() {
        numberOfExecutions = 0;
    }

    public double record(double value)  {
        if (this.value != -1 && value != this.value) {
            alwaysTheSame = false;
        }
        numberOfExecutions++;
        this.value = value;
        return value;
    }

    public double getLastValue() {
        return value;
    }

    public boolean alwaysTheSame() {
        return alwaysTheSame;
    }

    public boolean neverExecuted() {
        return numberOfExecutions == 0;
    }

}
