Newer
Older
ResourceDependencyLogic / src / models / EvaluableTerm.java
@Sakoda2269 Sakoda2269 on 20 Sep 1 KB first commit
package models;

import models.algebra.Type;

public abstract class EvaluableTerm extends RDLTerm{

	public EvaluableTerm(int order) {
		super(order);
	}
	
	public abstract boolean isLinearRightNormal();
	
	@Deprecated
	public abstract EvaluableTerm linearRightNormalize();
	public abstract void selfLinearRightNormalize();
	
	public static RDLVariable of(String name, Type type, int order) {
		return new RDLVariable(name, type, order);
	}
	
	public static AssignEvaluableTerm of(EvaluableTerm term, RDLVariable variable, EvaluableTerm valueTerm) {
		return new AssignEvaluableTerm(term, variable, valueTerm);
	}
	
	public static EvaluableTerm of(EvaluableTerm term, RDLVariable variable, EvaluableTerm valueTerm, int order) {
		if(variable.getOrder() == valueTerm.getOrder() && variable.getOrder() == order) {
			return new AssignEvaluableTerm(term, variable, valueTerm);
		} else if(variable.getOrder() -1 == order) {
			return new AssignEvaluableTerm(term, variable, valueTerm);
		} else {
			return new SetEvaluableTerm(new AssignEvaluableTerm(term, variable, valueTerm), order);
		}
	}
	
	public static SetEvaluableTerm of(EvaluableTerm term, int order) {
		return new SetEvaluableTerm(term, order);
	}
	
}