blob: 300f8b51b28161ee91bd38c6a52302f21d032b6e (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
package hu.bme.mit.inf.dslreasoner.run
import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic
import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic_Trace
import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.LinearTypeExpressionBuilderFactory
import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternGenerator
import java.util.Map
import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PQuery
class FileSystemHint extends Ecore2LogicTraceBasedHint {
static val REMAINING_CONTENTS_ROOT = "hint_root"
new(Ecore2Logic ecore2Logic, Ecore2Logic_Trace trace) {
super(ecore2Logic, trace)
}
override getAdditionalPatterns(PatternGenerator it, Map<String, PQuery> fqnToPQuery) '''
pattern «REMAINING_CONTENTS_ROOT»(problem:LogicProblem, interpretation:PartialInterpretation, remainingContents:java Integer) {
find interpretation(problem, interpretation);
remainingContents == sum find remainingContents_root_reference_Dir_helper(problem, interpretation, _, #_)
}
'''
override createConstraintUpdater(LinearTypeExpressionBuilderFactory it) {
val dirCount = createBuilder.add(1, "Dir".type).build
val remainingContentsRootMatcher = createMatcher(REMAINING_CONTENTS_ROOT)
return [ p |
dirCount.tightenLowerBound(remainingContentsRootMatcher.getCount(p))
]
}
}
|