package ec.gp.syntactic.simplification.logic;

import ec.EvolutionState;
import ec.app.semanticGP.func.IConstant;
import ec.app.semanticGP.func.logic.Constant;
import ec.app.semanticGP.func.logic.Nor;
import ec.gp.GPNode;
import ec.gp.syntactic.simplification.IRule;
import ec.util.Parameter;

class NorTrueRule implements IRule {

	private EvolutionState state;

	@Override
	public void setup(EvolutionState state, Parameter base) {
		this.state = state;
	}

	@Override
	public boolean match(GPNode subtree) {
		if (!(subtree instanceof Nor))
			return false;

		return (subtree.children[0] instanceof IConstant && ((IConstant<Boolean>) subtree.children[0]).getConstant())
				||
				(subtree.children[1] instanceof IConstant && ((IConstant<Boolean>) subtree.children[1]).getConstant());
	}

	@Override
	public GPNode replace(GPNode subtree) {
		assert match(subtree) : "The given tree is not a form of (p nor 1) or (1 nor p)";

		return Constant.get(false);
	}

}
