aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/Alloy-Solver/hu.bme.mit.inf.dlsreasoner.alloy.reasoner/src/hu/bme/mit/inf/dlsreasoner/alloy/reasoner/builder/RunCommandMapper.xtend
diff options
context:
space:
mode:
Diffstat (limited to 'Solvers/Alloy-Solver/hu.bme.mit.inf.dlsreasoner.alloy.reasoner/src/hu/bme/mit/inf/dlsreasoner/alloy/reasoner/builder/RunCommandMapper.xtend')
-rw-r--r--Solvers/Alloy-Solver/hu.bme.mit.inf.dlsreasoner.alloy.reasoner/src/hu/bme/mit/inf/dlsreasoner/alloy/reasoner/builder/RunCommandMapper.xtend19
1 files changed, 15 insertions, 4 deletions
diff --git a/Solvers/Alloy-Solver/hu.bme.mit.inf.dlsreasoner.alloy.reasoner/src/hu/bme/mit/inf/dlsreasoner/alloy/reasoner/builder/RunCommandMapper.xtend b/Solvers/Alloy-Solver/hu.bme.mit.inf.dlsreasoner.alloy.reasoner/src/hu/bme/mit/inf/dlsreasoner/alloy/reasoner/builder/RunCommandMapper.xtend
index 494197bc..b74017d8 100644
--- a/Solvers/Alloy-Solver/hu.bme.mit.inf.dlsreasoner.alloy.reasoner/src/hu/bme/mit/inf/dlsreasoner/alloy/reasoner/builder/RunCommandMapper.xtend
+++ b/Solvers/Alloy-Solver/hu.bme.mit.inf.dlsreasoner.alloy.reasoner/src/hu/bme/mit/inf/dlsreasoner/alloy/reasoner/builder/RunCommandMapper.xtend
@@ -9,8 +9,12 @@ import hu.bme.mit.inf.dslreasoner.alloyLanguage.ALSString
9import hu.bme.mit.inf.dslreasoner.alloyLanguage.ALSTerm 9import hu.bme.mit.inf.dslreasoner.alloyLanguage.ALSTerm
10import hu.bme.mit.inf.dslreasoner.alloyLanguage.AlloyLanguageFactory 10import hu.bme.mit.inf.dslreasoner.alloyLanguage.AlloyLanguageFactory
11import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicSolverConfiguration 11import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicSolverConfiguration
12import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type
13import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TypeDefinition
12import java.util.List 14import java.util.List
13 15
16import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.*
17
14class RunCommandMapper { 18class RunCommandMapper {
15 val extension AlloyLanguageFactory factory = AlloyLanguageFactory.eINSTANCE 19 val extension AlloyLanguageFactory factory = AlloyLanguageFactory.eINSTANCE
16 val Logic2AlloyLanguageMapper_Support support = new Logic2AlloyLanguageMapper_Support; 20 val Logic2AlloyLanguageMapper_Support support = new Logic2AlloyLanguageMapper_Support;
@@ -89,16 +93,18 @@ class RunCommandMapper {
89 ] 93 ]
90 94
91 for(upperLimit : config.typeScopes.maxNewElementsByType.entrySet) { 95 for(upperLimit : config.typeScopes.maxNewElementsByType.entrySet) {
92 val limit = upperLimit.value 96 val type = upperLimit.key
97 val limit = upperLimit.value + getExistingCount(type)
93 if(limit != LogicSolverConfiguration::Unlimited) { 98 if(limit != LogicSolverConfiguration::Unlimited) {
94 this.typeScopeMapping.addUpperMultiplicity(specification,upperLimit.key,limit,mapper,trace) 99 this.typeScopeMapping.addUpperMultiplicity(specification,type,limit,mapper,trace)
95 } 100 }
96 } 101 }
97 102
98 for(lowerLimit : config.typeScopes.minNewElementsByType.entrySet) { 103 for(lowerLimit : config.typeScopes.minNewElementsByType.entrySet) {
99 val limit = lowerLimit.value 104 val type = lowerLimit.key
105 val limit = lowerLimit.value + getExistingCount(type)
100 if(limit != 0) { 106 if(limit != 0) {
101 this.typeScopeMapping.addLowerMultiplicity(specification,lowerLimit.key,limit,mapper,trace) 107 this.typeScopeMapping.addLowerMultiplicity(specification,type,limit,mapper,trace)
102 } 108 }
103 } 109 }
104 110
@@ -106,6 +112,11 @@ class RunCommandMapper {
106 setStringScope(specification,config,specification.runCommand) 112 setStringScope(specification,config,specification.runCommand)
107 } 113 }
108 114
115 private def getExistingCount(Type type) {
116 val existing = type.transitiveClosureStar[it.subtypes].filter(TypeDefinition).map[elements].flatten.toSet
117 existing.size
118 }
119
109 protected def Boolean setStringScope(ALSDocument specification, AlloySolverConfiguration config, ALSRunCommand it) { 120 protected def Boolean setStringScope(ALSDocument specification, AlloySolverConfiguration config, ALSRunCommand it) {
110 if(config.typeScopes.maxNewStrings === LogicSolverConfiguration::Unlimited) { 121 if(config.typeScopes.maxNewStrings === LogicSolverConfiguration::Unlimited) {
111 throw new UnsupportedOperationException('''A string scope have to be specified for Alloy!''') 122 throw new UnsupportedOperationException('''A string scope have to be specified for Alloy!''')