diff --git a/fcore/app-update.sml b/fcore/app-update.sml index 3ccee0d..7c9a552 100644 --- a/fcore/app-update.sml +++ b/fcore/app-update.sml @@ -24,7 +24,6 @@ struct val newBuffer = LineGap.goToLine (startLine, buffer) val lineIdx = TextBuilder.getLineAbsIdx (startLine, buffer) - val searchList = SearchList.goToNum (lineIdx, searchList) val drawMsg = TextBuilder.build ( startLine @@ -60,7 +59,6 @@ struct * and move searchList to idx where line starts as well *) val buffer = LineGap.goToLine (startLine, buffer) val lineIdx = TextBuilder.getLineAbsIdx (startLine, buffer) - val searchList = SearchList.goToNum (lineIdx, searchList) val drawMsg = TextBuilder.build ( startLine @@ -97,7 +95,6 @@ struct val buffer = LineGap.goToLine (startLine, buffer) val lineIdx = TextBuilder.getLineAbsIdx (startLine, buffer) - val searchList = SearchList.goToNum (lineIdx, searchList) val drawMsg = TextBuilder.build ( startLine @@ -123,7 +120,6 @@ struct val cursorIdx = 0 val startLine = 0 val buffer = LineGap.goToIdx (cursorIdx, buffer) - val searchList = SearchList.goToNum (0, searchList) val drawMsg = TextBuilder.build ( startLine @@ -164,7 +160,6 @@ struct val buffer = LineGap.goToLine (bufferLine, buffer) val lineIdx = TextBuilder.getLineAbsIdx (bufferLine, buffer) - val searchList = SearchList.goToNum (lineIdx, searchList) val drawMsg = TextBuilder.build ( bufferLine @@ -207,7 +202,6 @@ struct val buffer = LineGap.goToLine (startLine, buffer) val lineIdx = TextBuilder.getLineAbsIdx (startLine, buffer) - val searchList = SearchList.goToNum (lineIdx, searchList) val drawMsg = TextBuilder.build ( startLine @@ -244,7 +238,6 @@ struct val buffer = LineGap.goToLine (startLine, buffer) val lineIdx = TextBuilder.getLineAbsIdx (startLine, buffer) - val searchList = SearchList.goToNum (lineIdx, searchList) in if TextWindow.isCursorVisible @@ -281,7 +274,6 @@ struct val buffer = LineGap.goToLine (startLine, buffer) val lineIdx = TextBuilder.getLineAbsIdx (startLine, buffer) - val searchList = SearchList.goToNum (lineIdx, searchList) val drawMsg = TextBuilder.build ( startLine @@ -636,7 +628,6 @@ struct val cursorIdx = 0 val startLine = 0 val buffer = LineGap.goToIdx (cursorIdx, buffer) - val searchList = SearchList.goToNum (0, searchList) val drawMsg = TextBuilder.build ( startLine diff --git a/fcore/finish.sml b/fcore/finish.sml index c808d12..f952d79 100644 --- a/fcore/finish.sml +++ b/fcore/finish.sml @@ -17,7 +17,6 @@ struct (* move buffer to new startLine as required by TextBuilder.build *) val buffer = LineGap.goToLine (startLine, buffer) val lineIdx = TextBuilder.getLineAbsIdx (startLine, buffer) - val searchList = SearchList.goToNum (lineIdx, searchList) val drawMsg = TextBuilder.build ( startLine diff --git a/fcore/search-list.sml b/fcore/search-list.sml index 1e50202..20b476e 100644 --- a/fcore/search-list.sml +++ b/fcore/search-list.sml @@ -1,36 +1,12 @@ structure SearchList = struct - structure IntSet = - MakeGapSet - (struct - type key = int - val maxNodeSize = 32 + type t = int vector - fun l (a, b: int) = a < b - fun eq (a, b: int) = a = b - fun g (a, b: int) = a > b - end) - - type t = IntSet.t - - val empty = IntSet.empty - - val goToNum = IntSet.moveTo - - fun cons (num, acc) = - let - val num = Vector.fromList [num] - in - case acc of - hd :: tl => - if Vector.length hd < 32 then (Vector.concat [num, hd]) :: tl - else num :: acc - | [] => num :: acc - end + val empty = Vector.fromList [] fun searchStep (pos, hd, absIdx, tl, acc, searchPos, searchString) = if searchPos < 0 then - cons (absIdx + 1, acc) + (absIdx + 1) :: acc else if pos < 0 then case tl of hd :: tl => @@ -54,7 +30,7 @@ struct case tl of hd :: tl => loopSearch (String.size hd - 1, hd, absIdx, tl, acc, searchString) - | [] => acc + | [] => Vector.fromList acc else let val acc = searchStep @@ -65,23 +41,18 @@ struct (* Prerequisite: move buffer/LineGap to end *) fun search (buffer: LineGap.t, searchString) = - let - val acc = - if String.size searchString = 0 then - [] - else - let - val {leftStrings, idx = absIdx, ...} = buffer - in - case leftStrings of - hd :: tl => - loopSearch - (String.size hd - 1, hd, absIdx - 1, tl, [], searchString) - | [] => [] - end - in - {left = [], right = acc} - end + if String.size searchString = 0 then + empty + else + let + val {leftStrings, idx = absIdx, ...} = buffer + in + case leftStrings of + hd :: tl => + loopSearch + (String.size hd - 1, hd, absIdx - 1, tl, [], searchString) + | [] => empty + end fun build (buffer, searchString) = if String.size searchString > 0 then diff --git a/fcore/text-builder.sml b/fcore/text-builder.sml index 3034657..d77b39c 100644 --- a/fcore/text-builder.sml +++ b/fcore/text-builder.sml @@ -325,34 +325,11 @@ struct , bgAcc , env: env_data , searchHd - , searchTl , searchPos , searchLen ) = if searchPos = Vector.length searchHd then - case searchTl of - searchHd :: searchTl => - (* go to next search hd/tl *) - buildTextStringSearch - ( pos - , str - , acc - , posX - , posY - , startX - , tl - , absIdx - , cursorPos - , cursorAcc - , bgAcc - , env - , searchHd - , searchTl - , 0 - , searchLen - ) - | [] => - (* exhausted search hd/tl so call normal build function *) + (* exhausted search list so call normal build function *) buildTextString ( pos , str @@ -401,7 +378,6 @@ struct , bgAcc , env , searchHd - , searchTl , searchPos , searchLen ) @@ -421,7 +397,6 @@ struct , bgAcc , env , searchHd - , searchTl , searchPos , searchLen ) @@ -447,7 +422,6 @@ struct , bgAcc , env , searchHd - , searchTl , searchPos , searchLen ) @@ -470,7 +444,6 @@ struct , bgAcc , env , searchHd - , searchTl , searchPos , searchLen ) @@ -496,7 +469,6 @@ struct , bgAcc , env , searchHd - , searchTl , searchPos , searchLen ) @@ -547,7 +519,6 @@ struct , bgAcc , env , searchHd - , searchTl , searchPos , searchLen ) @@ -580,7 +551,6 @@ struct , bgAcc , env , searchHd - , searchTl , searchPos , searchLen ) @@ -607,7 +577,6 @@ struct , bgAcc , env , searchHd - , searchTl , searchPos , searchLen ) @@ -643,7 +612,6 @@ struct , bgAcc , env , searchHd - , searchTl , searchPos , searchLen ) @@ -679,7 +647,6 @@ struct , bgAcc , env , searchHd - , searchTl , searchPos , searchLen ) @@ -706,7 +673,6 @@ struct , bgAcc , env , searchHd - , searchTl , searchPos , searchLen ) @@ -779,12 +745,9 @@ struct } val cursorAcc = Vector.fromList [] + val searchPos = BinSearch.equalOrMore (absIdx, searchList) in - (case #right searchList of - searchHd :: searchTl => - let - val searchPos = BinSearch.equalOrMore (absIdx, searchHd) - in + if searchPos < Vector.length searchList then buildTextStringSearch ( startIdx , rStrHd @@ -798,13 +761,11 @@ struct , cursorAcc , [] , env - , searchHd - , searchTl + , searchList , searchPos , String.size searchString ) - end - | [] => + else buildTextString ( startIdx , rStrHd @@ -818,7 +779,7 @@ struct , cursorAcc , [] , env - )) + ) end | (_, _) => (* requested line goes beyond the buffer,