progress in changing functions to use 'PersistentVector.delete' so that search list is incremental and not rebuilt from scratch after each deletion

This commit is contained in:
2026-02-06 08:52:11 +00:00
parent c856f49a6c
commit df7669b065
2 changed files with 13 additions and 9 deletions

View File

@@ -19,9 +19,12 @@ struct
fun deleteAndFinish (app: app_type, low, length, buffer, time) = fun deleteAndFinish (app: app_type, low, length, buffer, time) =
let let
val {searchList, dfa, ...} = app
val buffer = LineGap.goToIdx (low + length, buffer) val buffer = LineGap.goToIdx (low + length, buffer)
val initialMsg = Fn.initMsgs (low, length, buffer) val msgs = Fn.initMsgs (low, length, buffer)
val buffer = LineGap.delete (low, length, buffer) val (buffer, searchList) = SearchList.deleteBufferAndSearchList
(low, length, buffer, searchList, dfa)
val low = val low =
if low >= #textLength buffer - 1 then if low >= #textLength buffer - 1 then
@@ -36,8 +39,9 @@ struct
val buffer = val buffer =
if #textLength buffer = 0 then LineGap.fromString "\n" else buffer if #textLength buffer = 0 then LineGap.fromString "\n" else buffer
val buffer = LineGap.goToIdx (low, buffer)
in in
finishAfterDeletingBuffer (app, low, buffer, time, initialMsg) NormalFinish.buildTextAndClear (app, buffer, low, searchList, msgs, time)
end end
fun moveCursorAfterDeletingLines (app, buffer, time, initialMsg, startIdx) = fun moveCursorAfterDeletingLines (app, buffer, time, initialMsg, startIdx) =

View File

@@ -144,6 +144,8 @@ struct
in in
(buffer, searchList) (buffer, searchList)
end end
else if PersistentVector.isInRange (idx, searchList) then
(buffer, searchList)
else else
let let
val buffer = LineGap.goToIdx (idx, buffer) val buffer = LineGap.goToIdx (idx, buffer)
@@ -157,9 +159,6 @@ struct
(* no match found: restart search from `startPos + 1` *) (* no match found: restart search from `startPos + 1` *)
insertUntilMatch insertUntilMatch
(startPos + 1, buffer, searchList, dfa, 0, startPos + 1, ~1) (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 else
(* new match. Insert and continue *) (* new match. Insert and continue *)
let let
@@ -182,10 +181,11 @@ struct
val buffer = LineGap.delete (start, length, buffer) val buffer = LineGap.delete (start, length, buffer)
val searchList = PersistentVector.delete (start, length, searchList) val searchList = PersistentVector.delete (start, length, searchList)
val {start = prevStart, ...} = val {finish = searchStart, ...} =
PersistentVector.helpPrevMatch (start, searchList, 0) PersistentVector.helpPrevMatch (start, searchList, 0)
val prevStart = prevStart + 1 val searchStart = searchStart + 1
in in
insertUntilMatch (prevStart, buffer, searchList, dfa, 0, prevStart, ~1) insertUntilMatch
(searchStart, buffer, searchList, dfa, 0, searchStart, ~1)
end end
end end