From 7b113d5a21cc63eb58893e2bca50a1964c49b423 Mon Sep 17 00:00:00 2001 From: Fedor Isakov Date: Thu, 9 Nov 2017 12:02:27 +0100 Subject: [PATCH] Roll back an optimisation discriminating non-primary constraint symbols. Doing so would change the semantics too much without apparent gains. --- .../mps/logic/reactor/core/RuleIndex.kt | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/core/RuleIndex.kt b/reactor/Core/src/jetbrains/mps/logic/reactor/core/RuleIndex.kt index a3b5edf9..cdb01fbf 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/core/RuleIndex.kt +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/core/RuleIndex.kt @@ -32,10 +32,10 @@ import java.util.* class RuleIndex : Iterable { - private val allSymbol2valueIndex = HashMap() - private val primarySymbol2valueIndex = HashMap() + private val auxSymbol2valueIndex = HashMap() + private val tag2rule = LinkedHashMap() constructor(handlers: Iterable) { @@ -51,7 +51,7 @@ class RuleIndex : Iterable { fun forOccurrence(occ: ConstraintOccurrence): Iterable = primarySymbol2valueIndex.get(occ.constraint().symbol())?.select(occ) ?: - (allSymbol2valueIndex.get(occ.constraint().symbol())?.select(occ) ?: emptyList()) + (auxSymbol2valueIndex.get(occ.constraint().symbol())?.select(occ) ?: emptyList()) override fun iterator(): Iterator = tag2rule.values.iterator() @@ -62,17 +62,16 @@ class RuleIndex : Iterable { .forEach { symbol -> primarySymbol2valueIndex.getOrPut(symbol) { ValueIndex(symbol) } } for (h in handlers) { - val hPrimSyms = h.primarySymbols().toSet() + val primSymbols = h.primarySymbols().toSet() for (r in h.rules()) { for (c in (r.headKept() + r.headReplaced())) { val symbol = c.symbol() - if (symbol in hPrimSyms) { + if (symbol in primSymbols) { primarySymbol2valueIndex[symbol]?.update(r, c) + + } else { + auxSymbol2valueIndex.getOrPut(symbol) { ValueIndex(symbol) }.update(r, c) } - else if (hPrimSyms.isEmpty()) { - allSymbol2valueIndex.getOrPut(symbol) { ValueIndex(symbol) }.update(r, c) - } - // else ignore the constraint -- it's not meant to be processed by this handler, as it is not a primary } } }