aboutsummaryrefslogtreecommitdiffstats
path: root/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/FileSystemHint.xtend
blob: 8d6523b1920f369a96763e04e4b844e44d6f4583 (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
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

class FileSystemHint extends Ecore2LogicTraceBasedHint {
	static val REMAINING_CONTENTS_ROOT = "hint_root"

	new(Ecore2Logic ecore2Logic, Ecore2Logic_Trace trace) {
		super(ecore2Logic, trace)
	}

	override getAdditionalPatterns(PatternGenerator it) '''
		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))
		]
	}

}