package models;
import lombok.Getter;
import models.algebra.Symbol;
@Getter
public class SetEvaluatableTerm extends EvaluatableTerm{
private EvaluatableTerm term;
public SetEvaluatableTerm(EvaluatableTerm term) {
super(new Symbol("", 1), term.getOrder() - 1);
this.term = term;
this.addChild(term);
}
public SetEvaluatableTerm(EvaluatableTerm term, int order) {
super(new Symbol("", 1), order);
if(term.getOrder() > order + 1) {
var childTerm = new SetEvaluatableTerm(term, order+1);
this.term = childTerm;
this.addChild(childTerm);
} else {
this.term = term;
this.addChild(term);
}
}
@Override
public EvaluatableTerm linearRightNormalize() {
return (SetEvaluatableTerm) clone();
}
@Override
public void selfLinearRightNormalize() {
}
@Override
public boolean isLinearRightNormal() {
return term.isLinearRightNormal();
}
@Override
public boolean equals(Object another) {
if(! (another instanceof SetEvaluatableTerm)) {
return false;
}
var term = (SetEvaluatableTerm) another;
return term.getTerm().equals(getTerm());
}
@Override
public int hashCode() {
return ("SET" + toString()).hashCode();
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append('{');
sb.append(term.toString());
sb.append('}');
return sb.toString();
}
@Override
public String toStringWithOrder() {
StringBuilder sb = new StringBuilder();
sb.append('{');
sb.append(term.toStringWithOrder());
sb.append('}');
return sb.toString() + "(" + order + ")";
}
@Override
public Object clone() {
return new SetEvaluatableTerm((EvaluatableTerm) term.clone(), order);
}
}