Enable tracking justification in Controller for principal constraints' occ-s

This commit is contained in:
Grigorii Kirgizov 2019-05-22 19:19:34 +03:00
parent 76194a62ae
commit 6932e99774
2 changed files with 11 additions and 5 deletions

View File

@ -27,6 +27,8 @@ import jetbrains.mps.logic.reactor.program.Constraint
typealias Justs = TIntSet
//fun emptyJusts() = object : TIntSet {}
fun emptyJusts() = TIntHashSet(1)
fun justsOf(vararg elements: Int) = TIntHashSet(elements)
fun justsFromCollection(collection: Collection<Int>) = TIntHashSet(collection)

View File

@ -56,7 +56,7 @@ internal class ControllerImpl (
// FIXME noLogicalContext
val context = Context(NORMAL(), noLogicalContext)
activateConstraint(constraint, context)
activateConstraint(constraint, emptyJusts(), context)
return context.currentStatus()
}
@ -133,9 +133,15 @@ internal class ControllerImpl (
val savedPos = state.currentPos()
val currentJusts = state.justs()
for (item in body) {
val itemOk = when (item) {
is Constraint -> activateConstraint(item, context)
is Constraint -> {
// track justifications only for principal constraints
val justs = if (item.isPrincipal) currentJusts else emptyJusts()
activateConstraint(item, justs, context)
}
is Predicate -> tellPredicate(item, context)
else -> throw IllegalArgumentException("unknown item ${item}")
}
@ -188,12 +194,10 @@ internal class ControllerImpl (
return context.currentStatus()
}
private fun activateConstraint(constraint: Constraint, context: Context) : Boolean {
private fun activateConstraint(constraint: Constraint, justs: Justs, context: Context) : Boolean {
val args = supervisor.instantiateArguments(constraint.arguments(), context.logicalContext, context)
return context.eval { status ->
// val justs = if (constraint.isPrincipal) journal.justs() else justsOf()
val justs = justsOf()
state.processActivated(constraint.occurrence(this, args, justs, context.logicalContext), status)
}
}