From df7669b065fc3a429c81e0147832f2c416d7e0d7 Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Fri, 6 Feb 2026 08:52:11 +0000 Subject: [PATCH] progress in changing functions to use 'PersistentVector.delete' so that search list is incremental and not rebuilt from scratch after each deletion --- fcore/normal-mode/make-normal-delete.sml | 10 +++++++--- fcore/search-list/search-list.sml | 12 ++++++------ 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/fcore/normal-mode/make-normal-delete.sml b/fcore/normal-mode/make-normal-delete.sml index 81ef747..e0bac64 100644 --- a/fcore/normal-mode/make-normal-delete.sml +++ b/fcore/normal-mode/make-normal-delete.sml @@ -19,9 +19,12 @@ struct fun deleteAndFinish (app: app_type, low, length, buffer, time) = let + val {searchList, dfa, ...} = app + val buffer = LineGap.goToIdx (low + length, buffer) - val initialMsg = Fn.initMsgs (low, length, buffer) - val buffer = LineGap.delete (low, length, buffer) + val msgs = Fn.initMsgs (low, length, buffer) + val (buffer, searchList) = SearchList.deleteBufferAndSearchList + (low, length, buffer, searchList, dfa) val low = if low >= #textLength buffer - 1 then @@ -36,8 +39,9 @@ struct val buffer = if #textLength buffer = 0 then LineGap.fromString "\n" else buffer + val buffer = LineGap.goToIdx (low, buffer) in - finishAfterDeletingBuffer (app, low, buffer, time, initialMsg) + NormalFinish.buildTextAndClear (app, buffer, low, searchList, msgs, time) end fun moveCursorAfterDeletingLines (app, buffer, time, initialMsg, startIdx) = diff --git a/fcore/search-list/search-list.sml b/fcore/search-list/search-list.sml index 1c849e2..42f4c1c 100644 --- a/fcore/search-list/search-list.sml +++ b/fcore/search-list/search-list.sml @@ -144,6 +144,8 @@ struct in (buffer, searchList) end + else if PersistentVector.isInRange (idx, searchList) then + (buffer, searchList) else let val buffer = LineGap.goToIdx (idx, buffer) @@ -157,9 +159,6 @@ struct (* no match found: restart search from `startPos + 1` *) insertUntilMatch (startPos + 1, buffer, searchList, dfa, 0, startPos + 1, ~1) - else if PersistentVector.isInRange (prevFinalPos, searchList) then - (* already have this match so don't insert it *) - (buffer, searchList) else (* new match. Insert and continue *) let @@ -182,10 +181,11 @@ struct val buffer = LineGap.delete (start, length, buffer) val searchList = PersistentVector.delete (start, length, searchList) - val {start = prevStart, ...} = + val {finish = searchStart, ...} = PersistentVector.helpPrevMatch (start, searchList, 0) - val prevStart = prevStart + 1 + val searchStart = searchStart + 1 in - insertUntilMatch (prevStart, buffer, searchList, dfa, 0, prevStart, ~1) + insertUntilMatch + (searchStart, buffer, searchList, dfa, 0, searchStart, ~1) end end