fun introduce()

in reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/ReteRuleMatcherImpl.kt [415:440]


            fun introduce(occurrence: Occurrence, headPosMask: BitSet): Generation {
                val reactivated = layers.any { it.containsOccurrence(occurrence) }

                // propagation history
                if (propagation && reactivated) {
                    // TODO: need a better way to process occurrences that are activated but ignored
                    // TODO: introduce a flag on ReteNode?
                    // TODO: same concerns "unique signatures" and "consumed signatures"
                    lastIntroduced = occurrence
                    return nextGeneration().reset()
                }

                var firstAffected = -1
                for ((idx, layer) in layers.withIndex()) {
                    if (idx > 0 && headPosMask.get(idx - 1)) {
                        if (firstAffected < 0) firstAffected = idx
                        layer.queueUpdate(IntroBlock(occurrence, headPosMask, layers[idx - 1]))
                    }
                }
                for (i in firstAffected until layers.size) {
                    layers[i].reset()
                }
                if (firstAffected >= 0) lastIntroduced = occurrence

                return nextGeneration()
            }