fix compile errors regarding 'add' function in gap_map.sml (error was that 'joinSlices' helper function returned 'rightVals = rightKeys' instead of 'rightVals = rightVals')

This commit is contained in:
2025-02-12 13:44:34 +00:00
parent 2e03ae9828
commit 18bd71d608

View File

@@ -23,8 +23,6 @@ sig
val remove: Fn.key * t -> t
val get: Fn.key * t -> Fn.value option
val min: t -> (Fn.key * Fn.value) option
val max: t -> (Fn.key * Fn.value) option
val moveToStart: t -> t
val moveToEnd: t -> t
@@ -217,7 +215,7 @@ struct
{ leftKeys = leftKeys
, leftVals = leftVals
, rightKeys = rightKeys
, rightVals = rightKeys
, rightVals = rightVals
}
end
else
@@ -228,14 +226,14 @@ struct
{ leftKeys = leftKeys
, leftVals = leftVals
, rightKeys = rightKeys
, rightVals = rightKeys
, rightVals = rightVals
}
end
end
else
let
val leftKeys = VectorSlice.vector lkhd :: leftKeys
val leftVals = VectorSlice.vector rvhd :: leftVals
val leftVals = VectorSlice.vector lvhd :: leftVals
in
if isSliceLessThanTarget (rkhd, p_rkhd) then
let
@@ -247,7 +245,7 @@ struct
{ leftKeys = leftKeys
, leftVals = leftVals
, rightKeys = rightKeys
, rightVals = rightKeys
, rightVals = rightVals
}
end
else
@@ -258,7 +256,7 @@ struct
{ leftKeys = leftKeys
, leftVals = leftVals
, rightKeys = rightKeys
, rightVals = rightKeys
, rightVals = rightVals
}
end
end
@@ -302,7 +300,7 @@ struct
val rkhd = VectorSlice.full rkhd
val newVal = Vector.fromList [newVal]
val rvhd = VectorSlice.concat [VectorSlice.full newVal, rkhd]
val rvhd = VectorSlice.concat [VectorSlice.full newVal, rvhd]
val rvhd = VectorSlice.full rvhd
in
(* join both slices *)
@@ -492,34 +490,55 @@ struct
end
| [] => insLeft (newKey, newVal, leftKeys, leftVals, rightKeys, rightVals)
fun helpMin (leftVals, prevVals) =
case leftVals of
hd :: tl => helpMin (tl, hd)
| [] => SOME (Vector.sub (prevVals, 0))
fun min ({leftVals = lhd :: ltl, ...}: t) = helpMin (ltl, lhd)
| min ({rightVals = rhd :: _, ...}) =
SOME (Vector.sub (rhd, 0))
| min _ = NONE
fun helpMax (rightVals, prevVal) =
case rightVals of
hd :: tl => helpMax (tl, hd)
| [] =>
fun getLeft (check, leftKeys, leftVals) =
case (leftKeys, leftVals) of
(lkhd :: lktl, lvhd :: lvtl) =>
let
val lastIdx = Vector.length prevVal - 1
val last = Vector.sub (prevVal, lastIdx)
val pos = findInsPos (check, lkhd)
in
SOME last
end
fun max ({rightVals = rhd :: rtl, ...}: t) = helpMax (rtl, rhd)
| max ({leftVals = lhd :: _, ...}) =
if pos < 0 then
getLeft (check, lktl, lvtl)
else if pos = Vector.length lkhd then
NONE
else
let
val lastIdx = Vector.length lhd - 1
val last = Vector.sub (lhd, lastIdx)
val posEl = Vector.sub (lkhd, pos)
in
SOME last
if Fn.eq (check, posEl) then SOME (Vector.sub (lvhd, pos))
else NONE
end
| max _ = NONE
end
| (_, _) => NONE
fun getRight (check, rightKeys, rightVals) =
case (rightKeys, rightVals) of
(rkhd :: rktl, rvhd :: rvtl) =>
let
val pos = findInsPos (check, rkhd)
in
if pos = Vector.length rkhd then
getRight (check, rktl, rvtl)
else if pos < 0 then
NONE
else
let
val posEl = Vector.sub (rkhd, pos)
in
if Fn.eq (check, posEl) then SOME (Vector.sub (rvhd, pos))
else NONE
end
end
| (_, _) => NONE
fun get (check, {leftKeys, leftVals, rightKeys, rightVals}) =
case (rightKeys, rightVals) of
(rkhd :: _, rvhd :: _) =>
let
val first = Vector.sub (rkhd, 0)
in
if Fn.g (check, first) then getRight (check, rightKeys, rightVals)
else if Fn.eq (check, first) then SOME (Vector.sub (rvhd, 0))
else getLeft (check, leftKeys, leftVals)
end
| (_, _) => getLeft (check, leftKeys, leftVals)
end