diff --git a/src/models/formulas/InFormula.java b/src/models/formulas/InFormula.java new file mode 100644 index 0000000..7b95536 --- /dev/null +++ b/src/models/formulas/InFormula.java @@ -0,0 +1,36 @@ +package models.formulas; + +import lombok.Getter; +import models.terms.EvaluatableTerm; + +@Getter +public class InFormula extends Formula { + + private EvaluatableTerm leftSideHand; + private EvaluatableTerm rightSideHand; + + public InFormula(EvaluatableTerm leftSideHand, EvaluatableTerm rightSideHand) { + this.leftSideHand = leftSideHand; + this.rightSideHand = rightSideHand; + } + + @Override + public String toString() { + return leftSideHand.toString() + " in " + rightSideHand.toString(); + } + + @Override + public boolean equals(Object another) { + if (! (another instanceof InFormula)) { + return false; + } + InFormula formula = (InFormula) another; + return leftSideHand.equals(formula.getLeftSideHand()) && rightSideHand.equals(formula.getRightSideHand()); + } + + @Override + public int hashCode() { + return toString().hashCode(); + } + +} diff --git a/src/models/formulas/meta/MetaFormula.java b/src/models/formulas/meta/MetaFormula.java index 949217f..cd43fbd 100644 --- a/src/models/formulas/meta/MetaFormula.java +++ b/src/models/formulas/meta/MetaFormula.java @@ -17,7 +17,7 @@ public abstract boolean isMatchedBy(Formula formula, Map binding, Map orderConstraint); public abstract String toString(); - public abstract boolean equals(Object anohter); + public abstract boolean equals(Object another); public abstract int hashCode(); } diff --git a/src/models/formulas/meta/MetaInFormula.java b/src/models/formulas/meta/MetaInFormula.java new file mode 100644 index 0000000..d446557 --- /dev/null +++ b/src/models/formulas/meta/MetaInFormula.java @@ -0,0 +1,61 @@ +package models.formulas.meta; + +import java.util.Map; + +import exceptions.IllegalTypeException; +import lombok.Getter; +import models.algebra.Variable; +import models.formulas.Formula; +import models.formulas.InFormula; +import models.terms.RDLTerm; +import models.terms.meta.MetaRDLTerm; +import models.terms.meta.OrderVariableConstraint; + +@Getter +public class MetaInFormula extends MetaFormula { + + private MetaRDLTerm leftSideHand; + private MetaRDLTerm rightSideHand; + + public MetaInFormula(MetaRDLTerm leftSideHand, MetaRDLTerm rightSideHand) { + if (! leftSideHand.isEvaluatableTerm()) { + throw new IllegalTypeException(); + } + if(! rightSideHand.isEvaluatableTerm()) { + throw new IllegalTypeException(); + } + this.leftSideHand = leftSideHand; + this.rightSideHand = rightSideHand; + } + + @Override + public boolean isMatchedBy(Formula formula, Map binding, + Map orderConstraint) { + if (! (formula instanceof InFormula)) { + return false; + } + InFormula inFormula = (InFormula) formula; + return leftSideHand.isMatchedBy(inFormula.getLeftSideHand(), binding, orderConstraint) + && rightSideHand.isMatchedBy(inFormula.getRightSideHand(), binding, orderConstraint); + } + + @Override + public String toString() { + return leftSideHand.toString() + " in " + rightSideHand.toString(); + } + + @Override + public boolean equals(Object anohter) { + if (! (anohter instanceof MetaInFormula)) { + return false; + } + MetaInFormula formula = (MetaInFormula) anohter; + return leftSideHand.equals(formula.getLeftSideHand()) && rightSideHand.equals(formula.getRightSideHand()); + } + + @Override + public int hashCode() { + return toString().hashCode(); + } + +}