diff --git a/src/main/java/models/formulas/meta/MetaDependencyFormula.java b/src/main/java/models/formulas/meta/MetaDependencyFormula.java index b2397b5..d6757bb 100644 --- a/src/main/java/models/formulas/meta/MetaDependencyFormula.java +++ b/src/main/java/models/formulas/meta/MetaDependencyFormula.java @@ -1,5 +1,6 @@ package models.formulas.meta; +import java.util.Arrays; import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -35,6 +36,10 @@ this.dependency = new MetaRDLTerm(dependingTerm, dependedTerms); } + public MetaDependencyFormula(MetaRDLTerm dependingTerm, MetaRDLTerm ...dependedTerms) { + this(dependingTerm, new HashSet<>(Arrays.asList(dependedTerms))); + } + @Override public Set isMatchedBy(Formula formula, MatchConstraint constraint) { if (! (formula instanceof DependencyFormula)) { diff --git a/src/main/java/models/terms/meta/MetaDependencyGenerator.java b/src/main/java/models/terms/meta/MetaDependencyGenerator.java index d90f8e0..191ecf1 100644 --- a/src/main/java/models/terms/meta/MetaDependencyGenerator.java +++ b/src/main/java/models/terms/meta/MetaDependencyGenerator.java @@ -5,6 +5,6 @@ @FunctionalInterface public interface MetaDependencyGenerator { - RDLTerm generate(int i); + RDLTerm generate(int i, int size); } diff --git a/src/main/java/models/terms/meta/MetaDependencyTermGenerator.java b/src/main/java/models/terms/meta/MetaDependencyTermGenerator.java index 07c1ef8..2974988 100644 --- a/src/main/java/models/terms/meta/MetaDependencyTermGenerator.java +++ b/src/main/java/models/terms/meta/MetaDependencyTermGenerator.java @@ -7,6 +7,6 @@ record TermPair(RDLTerm dependedTerm, RDLTerm argTerm) {}; - TermPair generate(int i); + TermPair generate(int i, int size); } diff --git a/src/main/java/models/terms/meta/MetaRDLTerm.java b/src/main/java/models/terms/meta/MetaRDLTerm.java index e067d9c..1993240 100644 --- a/src/main/java/models/terms/meta/MetaRDLTerm.java +++ b/src/main/java/models/terms/meta/MetaRDLTerm.java @@ -59,7 +59,7 @@ } this.size = size; this.termType = TermType.META_DEPENDENCY; - this.metaDependencyGenerator = (i) -> (RDLTerm) this.getChild(i + 1); + this.metaDependencyGenerator = (i, j) -> (RDLTerm) this.getChild(i + 1); } public MetaRDLTerm(MetaRDLTerm dependingTerm, MetaRDLTerm dependedTerm) { @@ -106,7 +106,7 @@ addChild(argTerm); } this.termType = TermType.META_DEPENDENCY_TERM; - this.metaDependencyTermGenerator = (i) -> new TermPair((RDLTerm) this.getChild(i * 2 + 1), (RDLTerm) this.getChild(i * 2 + 2)); + this.metaDependencyTermGenerator = (i, j) -> new TermPair((RDLTerm) this.getChild(i * 2 + 1), (RDLTerm) this.getChild(i * 2 + 2)); } public MetaRDLTerm(MetaRDLTerm dependingTerm, MetaRDLTerm ...terms) { @@ -197,7 +197,7 @@ boolean flg = true; for (int i = 0; i < perm.size(); i++) { int j = perm.get(i); - TermPair termPair = this.metaDependencyTermGenerator.generate(j); + TermPair termPair = this.metaDependencyTermGenerator.generate(j, perm.size()); RDLTerm dependedChild = termPair.dependedTerm(); RDLTerm argChild = termPair.argTerm(); RDLTerm anotherDependedChild = (RDLTerm) another.getChild(i * 2 + 1); @@ -240,7 +240,7 @@ boolean flg = true; for (int i = 0; i < perm.size(); i++) { int j = perm.get(i); - RDLTerm dependedChild = this.metaDependencyGenerator.generate(j); + RDLTerm dependedChild = this.metaDependencyGenerator.generate(j, perm.size()); RDLTerm anotherDependedChild = (RDLTerm) another.getChild(i + 1); if (dependedChild instanceof MetaRDLTerm) { MetaRDLTerm metaChild = (MetaRDLTerm) dependedChild; diff --git a/src/test/java/terms/DependencyTermTest.java b/src/test/java/terms/DependencyTermTest.java index 8fedc28..39835cf 100644 --- a/src/test/java/terms/DependencyTermTest.java +++ b/src/test/java/terms/DependencyTermTest.java @@ -139,7 +139,7 @@ DependencyTerm t1 = new DependencyTerm(a1, a2, a3, a4, a5); MetaResource x = new MetaResource(new Variable("x"), new Variable("n")); MetaRDLTerm mt1 = new MetaRDLTerm(x, - (MetaDependencyTermGenerator) (i) -> + (MetaDependencyTermGenerator) (i, j) -> new TermPair( new MetaResource(new Variable("x" + (2*i + 1)), Utils.parse("n-1-" + i)), new MetaResource(new Variable("x" + (2*i + 2)), Utils.parse("n+1")) @@ -154,7 +154,7 @@ @Test void DynamicMatchTest2() { MetaResource x = new MetaResource(new Variable("x")); - MetaRDLTerm mt1 = new MetaRDLTerm(x, (MetaDependencyTermGenerator) (i) -> new TermPair(new MetaResource(new Variable("x" + i)), new MetaResource(new Variable("y"+i)))); + MetaRDLTerm mt1 = new MetaRDLTerm(x, (MetaDependencyTermGenerator) (i, j) -> new TermPair(new MetaResource(new Variable("x" + i)), new MetaResource(new Variable("y"+i)))); DependencyTerm d1 = new DependencyTerm(a, b, c); DependencyTerm d2 = new DependencyTerm(a, b, c, d, e); assertTrue(! mt1.isMatchedBy(d1).isEmpty());