From 6932e997744fe7ac8fbaa589211f6bb1a1901f08 Mon Sep 17 00:00:00 2001 From: Grigorii Kirgizov Date: Wed, 22 May 2019 19:19:34 +0300 Subject: [PATCH] Enable tracking justification in Controller for principal constraints' occ-s --- .../jetbrains/mps/logic/reactor/core/Occurrence.kt | 2 ++ .../logic/reactor/core/internal/ControllerImpl.kt | 14 +++++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/core/Occurrence.kt b/reactor/Core/src/jetbrains/mps/logic/reactor/core/Occurrence.kt index 1e060e46..b1745dd9 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/core/Occurrence.kt +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/core/Occurrence.kt @@ -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) = TIntHashSet(collection) diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/ControllerImpl.kt b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/ControllerImpl.kt index cfa00c39..3ceea3d1 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/ControllerImpl.kt +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/ControllerImpl.kt @@ -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) } }