diff options
Diffstat (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PConstraintTransformer.xtend')
-rw-r--r-- | Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PConstraintTransformer.xtend | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PConstraintTransformer.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PConstraintTransformer.xtend index 608ab994..5ca78e97 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PConstraintTransformer.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PConstraintTransformer.xtend | |||
@@ -143,7 +143,13 @@ class PConstraintTransformer { | |||
143 | return referPattern(pcall.referredQuery,params,modality,true,true) | 143 | return referPattern(pcall.referredQuery,params,modality,true,true) |
144 | } | 144 | } |
145 | dispatch def transformConstraint(ExportedParameter e, Modality modality, List<VariableMapping> variableMapping) { | 145 | dispatch def transformConstraint(ExportedParameter e, Modality modality, List<VariableMapping> variableMapping) { |
146 | return '''// «e.parameterName» is exported''' | 146 | val v1 = '''var_«e.parameterName»''' |
147 | val v2 = e.parameterVariable.canonizeName | ||
148 | if(v1.compareTo(v2) == 0) { | ||
149 | return '''// «v1» exported''' | ||
150 | } else { | ||
151 | return '''«v1» == «v2»;''' | ||
152 | } | ||
147 | } | 153 | } |
148 | dispatch def transformConstraint(ConstantValue c, Modality modality, List<VariableMapping> variableMapping) { | 154 | dispatch def transformConstraint(ConstantValue c, Modality modality, List<VariableMapping> variableMapping) { |
149 | val target = c.supplierKey | 155 | val target = c.supplierKey |
@@ -189,24 +195,29 @@ class PConstraintTransformer { | |||
189 | def hasValue(PVariable v, String target, Modality m, List<VariableMapping> variableMapping) { | 195 | def hasValue(PVariable v, String target, Modality m, List<VariableMapping> variableMapping) { |
190 | val typeReference = variableMapping.filter[it.sourcePVariable === v].head.targetLogicVariable.range as PrimitiveTypeReference | 196 | val typeReference = variableMapping.filter[it.sourcePVariable === v].head.targetLogicVariable.range as PrimitiveTypeReference |
191 | if(m.isMay) { | 197 | if(m.isMay) { |
192 | '''PrimitiveElement.valueSet(«v.canonizeName»,«v.valueSetted»); «hasValueExpression(typeReference,v,v.valueVariable)» check(!«v.valueSetted»||«v.valueVariable»==«target»));''' | 198 | '''PrimitiveElement.valueSet(«v.canonizeName»,«v.valueSetted»); «hasValueExpressionByRef(typeReference,v,v.valueVariable)» check(!«v.valueSetted»||«v.valueVariable»==«target»));''' |
193 | } else { // Must or current | 199 | } else { // Must or current |
194 | '''PrimitiveElement.valueSet(«v.canonizeName»,true);«hasValueExpression(typeReference,v,target)»''' | 200 | '''PrimitiveElement.valueSet(«v.canonizeName»,true);«hasValueExpressionByRef(typeReference,v,target)»''' |
195 | } | 201 | } |
196 | } | 202 | } |
197 | 203 | ||
198 | private def hasValueExpression(List<VariableMapping> variableMapping, PVariable v, String target) { | 204 | private def hasValueExpression(List<VariableMapping> variableMapping, PVariable v, String target) { |
199 | hasValueExpression( | 205 | val mapping = variableMapping.filter[ |
200 | variableMapping.filter[it.sourcePVariable === v].head.targetLogicVariable.range, | 206 | val v2 = (it.sourcePVariable as PVariable) |
207 | v2 === v | ||
208 | ].head | ||
209 | val range = mapping.targetLogicVariable.range | ||
210 | hasValueExpressionByRef( | ||
211 | range, | ||
201 | v, | 212 | v, |
202 | target | 213 | target |
203 | ) | 214 | ) |
204 | } | 215 | } |
205 | private def dispatch hasValueExpression(BoolTypeReference typeReference, PVariable v, String target) '''BooleanElement.value(«v.canonizeName»,«target»);''' | 216 | private def dispatch hasValueExpressionByRef(BoolTypeReference typeReference, PVariable v, String target) '''BooleanElement.value(«v.canonizeName»,«target»);''' |
206 | private def dispatch hasValueExpression(IntTypeReference typeReference, PVariable v, String target) '''IntegerElement.value(«v.canonizeName»,«target»);''' | 217 | private def dispatch hasValueExpressionByRef(IntTypeReference typeReference, PVariable v, String target) '''IntegerElement.value(«v.canonizeName»,«target»);''' |
207 | private def dispatch hasValueExpression(RealTypeReference typeReference, PVariable v, String target) '''RealElement.value(«v.canonizeName»,«target»);''' | 218 | private def dispatch hasValueExpressionByRef(RealTypeReference typeReference, PVariable v, String target) '''RealElement.value(«v.canonizeName»,«target»);''' |
208 | private def dispatch hasValueExpression(StringTypeReference typeReference, PVariable v, String target) '''StringElement.value(«v.canonizeName»,«target»);''' | 219 | private def dispatch hasValueExpressionByRef(StringTypeReference typeReference, PVariable v, String target) '''StringElement.value(«v.canonizeName»,«target»);''' |
209 | private def dispatch hasValueExpression(TypeReference typeReference, PVariable v, String target) { | 220 | private def dispatch hasValueExpressionByRef(TypeReference typeReference, PVariable v, String target) { |
210 | throw new UnsupportedOperationException('''Unsupported primitive type reference: «typeReference.class»''') | 221 | throw new UnsupportedOperationException('''Unsupported primitive type reference: «typeReference.class»''') |
211 | } | 222 | } |
212 | 223 | ||