diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/MatchJournal.kt b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/MatchJournal.kt index f06f7f7f..315dcdd0 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/MatchJournal.kt +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/MatchJournal.kt @@ -46,7 +46,7 @@ interface MatchJournal : MutableIterable { /** * Indicates whether journal's pos points to its end. */ - fun isFront(): Boolean = currentPos().chunk == this.last() + fun isFront(): Boolean /** diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/MatchJournalImpl.kt b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/MatchJournalImpl.kt index 952b4808..0e3059c0 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/MatchJournalImpl.kt +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/MatchJournalImpl.kt @@ -47,13 +47,13 @@ internal open class MatchJournalImpl( if (view == null) { nextChunkId = 0 val initChunk = MatchChunk(nextChunkId++, InitRuleMatch) - hist = IteratorMutableList(ArrayList().apply { add(initChunk) }) + hist = IteratorMutableList(LinkedList().apply { add(initChunk) }) } else { // assert that initial chunk is present with (view.chunks.first()) { assert(this is MatchChunk && match is InitRuleMatch) } - hist = IteratorMutableList(ArrayList(view.chunks as List)) + hist = IteratorMutableList(LinkedList(view.chunks as List)) nextChunkId = view.nextChunkId } } @@ -91,6 +91,8 @@ internal open class MatchJournalImpl( override fun currentPos(): MatchJournal.Pos = current.toPos() + override fun isFront(): Boolean = current == hist.last + override fun resetPos() { posPtr = hist.listIterator() } @@ -165,6 +167,8 @@ internal open class MatchJournalImpl( override fun iterator(): MutableIterator = l.iterator() override fun listIterator(): MutableListIterator = l.listIterator() override fun listIterator(index: Int): MutableListIterator = l.listIterator(index) + + val last: E get() = if (l is LinkedList) l.last else l.last() } private class IndexImpl(chunks: Iterable): MatchJournal.Index