diff options
Diffstat (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/RelationConstraintCalculator.xtend')
-rw-r--r-- | Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/RelationConstraintCalculator.xtend | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/RelationConstraintCalculator.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/RelationConstraintCalculator.xtend index 3e4fea8a..7fec452f 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/RelationConstraintCalculator.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/RelationConstraintCalculator.xtend | |||
@@ -46,11 +46,11 @@ class RelationMultiplicityConstraint { | |||
46 | def constrainsUnrepairable() { | 46 | def constrainsUnrepairable() { |
47 | // TODO Optimize the unrepairable matches computation, | 47 | // TODO Optimize the unrepairable matches computation, |
48 | // or come up with a heuristic when does computing unrepairables worth the overhead. | 48 | // or come up with a heuristic when does computing unrepairables worth the overhead. |
49 | constrainsUnfinished && canHaveMultipleSourcesPerTarget && false | 49 | constrainsUnfinished && canHaveMultipleSourcesPerTarget && reference |
50 | } | 50 | } |
51 | 51 | ||
52 | def constrainsRemainingInverse() { | 52 | def constrainsRemainingInverse() { |
53 | lowerBound >= 1 && !containment && inverseUpperBoundFinite | 53 | lowerBound >= 1 && !containment && !container && inverseUpperBoundFinite && reference |
54 | } | 54 | } |
55 | 55 | ||
56 | def constrainsRemainingContents() { | 56 | def constrainsRemainingContents() { |
@@ -61,6 +61,18 @@ class RelationMultiplicityConstraint { | |||
61 | constrainsUnfinished || constrainsUnrepairable || constrainsRemainingInverse || constrainsRemainingContents | 61 | constrainsUnfinished || constrainsUnrepairable || constrainsRemainingInverse || constrainsRemainingContents |
62 | } | 62 | } |
63 | 63 | ||
64 | def isSourceTypeComplex() { | ||
65 | getParamTypeReference(0) instanceof ComplexTypeReference | ||
66 | } | ||
67 | |||
68 | def isTargetTypeComplex() { | ||
69 | getParamTypeReference(1) instanceof ComplexTypeReference | ||
70 | } | ||
71 | |||
72 | def isReference() { | ||
73 | sourceTypeComplex && targetTypeComplex | ||
74 | } | ||
75 | |||
64 | def getSourceType() { | 76 | def getSourceType() { |
65 | getParamType(0) | 77 | getParamType(0) |
66 | } | 78 | } |
@@ -69,15 +81,20 @@ class RelationMultiplicityConstraint { | |||
69 | getParamType(1) | 81 | getParamType(1) |
70 | } | 82 | } |
71 | 83 | ||
72 | private def getParamType(int i) { | 84 | private def getParamTypeReference(int i) { |
73 | val parameters = relation.parameters | 85 | val parameters = relation.parameters |
74 | if (i < parameters.size) { | 86 | if (i < parameters.size) { |
75 | val firstParam = parameters.get(i) | 87 | return parameters.get(i) |
76 | if (firstParam instanceof ComplexTypeReference) { | 88 | } |
77 | return firstParam.referred | 89 | throw new IllegalArgumentException("Argument index out of range") |
78 | } | 90 | } |
91 | |||
92 | private def getParamType(int i) { | ||
93 | val reference = getParamTypeReference(i) | ||
94 | if (reference instanceof ComplexTypeReference) { | ||
95 | return reference.referred | ||
79 | } | 96 | } |
80 | throw new IllegalArgumentException("Constraint with unknown source type") | 97 | throw new IllegalArgumentException("Constraint with primitive type") |
81 | } | 98 | } |
82 | } | 99 | } |
83 | 100 | ||