diff --git a/src/models/Dependency.java b/src/models/Dependency.java index 2704a4b..90762dd 100644 --- a/src/models/Dependency.java +++ b/src/models/Dependency.java @@ -9,6 +9,7 @@ private RDLTerm dependingTerm; private ResourceVariable dependedVariable; private Dependency dependency; + private boolean isListType; public Dependency(RDLTerm dependingTerm, ResourceVariable dependedVariable) { super(new Symbol(":", 2), dependedVariable.getOrder()); @@ -17,6 +18,7 @@ this.dependency = null; this.addChild(dependingTerm); this.addChild(dependedVariable); + this.isListType = false; } public Dependency(Dependency dependency) { @@ -25,6 +27,7 @@ this.dependingTerm = null; this.dependedVariable = null; this.addChild(dependency); + this.isListType = true; } public Dependency(RDLTerm dependingTerm, ResourceVariable dependedVariable, int order) { @@ -35,11 +38,13 @@ this.addChild(dependingTerm); this.addChild(dependedVariable); this.dependency = null; + this.isListType = false; } else { this.dependency = new Dependency(dependingTerm, dependedVariable, order+1); this.dependingTerm = null; this.dependedVariable = null; this.addChild(dependency); + this.isListType = true; } } @@ -93,6 +98,27 @@ } @Override + public boolean equals(Object another) { + if(! (another instanceof Dependency)) { + return false; + } + Dependency anotherDep = (Dependency) another; + if(anotherDep.isListType() != isListType()) { + return false; + } + if(isListType()) { + return anotherDep.getDependency().equals(dependency); + } + return anotherDep.getDependingTerm().equals(dependingTerm) + && anotherDep.getDependedVariable().equals(dependedVariable); + } + + @Override + public int hashCode() { + return ("Dep" + toString()).hashCode(); + } + + @Override public Object clone() { return new Dependency((RDLTerm) dependingTerm.clone(), (ResourceVariable) dependedVariable.clone()); } diff --git a/src/models/DependencyTerm.java b/src/models/DependencyTerm.java index a03746c..87a35a0 100644 --- a/src/models/DependencyTerm.java +++ b/src/models/DependencyTerm.java @@ -126,6 +126,20 @@ sb.append(')'); return sb.toString(); } + + @Override + public boolean equals(Object another) { + if(! (another instanceof DependencyTerm)) { + return false; + } + DependencyTerm term = (DependencyTerm) another; + return term.getDependency().equals(dependency) && term.getArgumentTerm().equals(argumentTerm); + } + + @Override + public int hashCode() { + return ("DT" + toString()).hashCode(); + } @Override public Object clone() { @@ -135,4 +149,5 @@ ); } + } diff --git a/src/models/RDLTerm.java b/src/models/RDLTerm.java index fdfac9b..f3c6b6e 100644 --- a/src/models/RDLTerm.java +++ b/src/models/RDLTerm.java @@ -26,5 +26,14 @@ public String toTermString() { return toString(); } + + @Override + public abstract boolean equals(Object another); + + @Override + public abstract int hashCode(); + + @Override + public abstract Object clone(); } diff --git a/src/models/ResourceConstant.java b/src/models/ResourceConstant.java index df03de3..3983644 100644 --- a/src/models/ResourceConstant.java +++ b/src/models/ResourceConstant.java @@ -1,12 +1,10 @@ package models; import lombok.Getter; -import lombok.Setter; import models.algebra.Symbol; import models.algebra.Type; @Getter -@Setter public class ResourceConstant extends EvaluatableTerm{ private String name; @@ -38,6 +36,21 @@ public void selfLinearRightNormalize() { } + + @Override + public boolean equals(Object another) { + if(! (another instanceof ResourceConstant)) { + return false; + } + var cons = (ResourceConstant) another; + return cons.getOrder() == getOrder() && cons.getName().equals(getName()); + } + + @Override + public int hashCode() { + return ("Const" + toStringWithOrder()).hashCode(); + } + @Override public String toString() { return this.name; @@ -47,12 +60,11 @@ public String toStringWithOrder() { return this.name + "(" + order + ")"; } - + @Override public Object clone() { return new ResourceConstant(name, type); } - - + } diff --git a/src/models/ResourceVariable.java b/src/models/ResourceVariable.java index b2e2f71..cd87365 100644 --- a/src/models/ResourceVariable.java +++ b/src/models/ResourceVariable.java @@ -1,11 +1,9 @@ package models; import lombok.Getter; -import lombok.Setter; import models.algebra.Symbol; import models.algebra.Type; -@Setter @Getter public class ResourceVariable extends EvaluatableTerm{ @@ -32,6 +30,21 @@ return true; } + + @Override + public boolean equals(Object another) { + if(! (another instanceof ResourceVariable)) { + return false; + } + var vari = (ResourceVariable) another; + return vari.getOrder() == getOrder() && vari.getName().equals(getName()) && vari.getType().equals(getType()); + } + + @Override + public int hashCode() { + return ("Vari" + toStringWithOrder()).hashCode(); + } + @Override public String toString() { return this.name; diff --git a/src/models/SetEvaluatableTerm.java b/src/models/SetEvaluatableTerm.java index 31a364c..4adb243 100644 --- a/src/models/SetEvaluatableTerm.java +++ b/src/models/SetEvaluatableTerm.java @@ -1,11 +1,9 @@ package models; import lombok.Getter; -import lombok.Setter; import models.algebra.Symbol; @Getter -@Setter public class SetEvaluatableTerm extends EvaluatableTerm{ private EvaluatableTerm term; @@ -42,6 +40,21 @@ 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(); diff --git a/target/classes/models/Dependency.class b/target/classes/models/Dependency.class index 347c461..eebf1e7 100644 --- a/target/classes/models/Dependency.class +++ b/target/classes/models/Dependency.class Binary files differ diff --git a/target/classes/models/DependencyTerm.class b/target/classes/models/DependencyTerm.class index 2bec431..a7920f5 100644 --- a/target/classes/models/DependencyTerm.class +++ b/target/classes/models/DependencyTerm.class Binary files differ diff --git a/target/classes/models/RDLTerm.class b/target/classes/models/RDLTerm.class index 2a3d702..ad2618e 100644 --- a/target/classes/models/RDLTerm.class +++ b/target/classes/models/RDLTerm.class Binary files differ diff --git a/target/classes/models/ResourceConstant.class b/target/classes/models/ResourceConstant.class index bdbec10..2d0f5ac 100644 --- a/target/classes/models/ResourceConstant.class +++ b/target/classes/models/ResourceConstant.class Binary files differ diff --git a/target/classes/models/ResourceVariable.class b/target/classes/models/ResourceVariable.class index 3ce4e81..0bee4dc 100644 --- a/target/classes/models/ResourceVariable.class +++ b/target/classes/models/ResourceVariable.class Binary files differ diff --git a/target/classes/models/SetEvaluatableTerm.class b/target/classes/models/SetEvaluatableTerm.class index e7828eb..ac9eb8e 100644 --- a/target/classes/models/SetEvaluatableTerm.class +++ b/target/classes/models/SetEvaluatableTerm.class Binary files differ