From 91663a6caec9a0fa327427a84a98a061d10491da Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Wed, 13 Nov 2024 12:54:47 +0000 Subject: [PATCH] done implementing search list --- fcore/search-list.sml | 63 +++++++++++++++++++++++++++++++++++++++++- shf | Bin 1246232 -> 1246232 bytes 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/fcore/search-list.sml b/fcore/search-list.sml index 43f4eb0..c74a1cf 100644 --- a/fcore/search-list.sml +++ b/fcore/search-list.sml @@ -1,3 +1,12 @@ +signature SEARCH_LIST = +sig + type t = {left: int vector list, right: int vector list} + val empty: t + val insert: int * t -> t + val delete: int * int * t -> t + val mapFromNum: int * int * t -> t +end + structure SearchList = struct type t = {left: int vector list, right: int vector list} @@ -166,9 +175,11 @@ struct fun goToNum (num, {left, right}: t) = case right of hd :: tl => - if num > Vector.sub (hd, Vector.length hd - 1) then + if num >= Vector.sub (hd, 0) then + (* num is greater or equal to first el on right so go right *) helpGoToNumRight (num, left, right) else + (* num is less than first el on right so go left *) helpGoToNumLeft (num, left, right) | [] => helpGoToNumLeft (num, left, right) @@ -428,4 +439,54 @@ struct fun delete (start, length, {left, right}: t) = if length > 0 then del (start, start + length, left, right) else {left = left, right = right} + + (* go all the way to the end of the list, mapping each hd, + * joining the hd to the left, + * and return when we have reached the end *) + fun mapRight (mapBy, left, right) = + case right of + hd :: tl => + let val newHd = Vector.map (fn el => el + mapBy) hd + in mapRight (mapBy, joinEndOfLeft (newHd, left), tl) + end + | [] => {left = left, right = right} + + fun moveRightAndMap (num, mapBy, left, right) = + case right of + hd :: tl => + let + val lastIdx = Vector.length hd - 1 + val last = Vector.sub (hd, lastIdx) + in + if num > last then + moveRightAndMap (num, mapBy, joinEndOfLeft (hd, left), tl) + else if num < last then + (* need to map in middle *) + let + val startIdx = BinSearch.equalOrMore (num, hd) + val mapEl = Vector.sub (hd, startIdx) + val newHd = + Vector.map (fn el => if el < mapEl then el else mapEl + mapBy) + hd + in + mapRight (mapBy, joinEndOfLeft (newHd, left), tl) + end + else + (* num = last *) + let + val newHd = + Vector.map (fn el => if el < num then num else num + mapBy) hd + in + mapRight (mapBy, joinEndOfLeft (newHd, left), tl) + end + end + | [] => {left = left, right = right} + + fun mapFromNum (num, mapBy, lst) = + let + (* goToNum always places vector where num was found to the right list *) + val {left, right} = goToNum (num, lst) + in + moveRightAndMap (num, mapBy, left, right) + end end diff --git a/shf b/shf index ef3f89e9bdc2b743f202fcd2d01d74b2491602cf..af61303c2d4ef9184f539b67f9585982e48e4145 100755 GIT binary patch delta 10713 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 delta 10649 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