done implementing 'PersistentVector.merge', which means that 'PersistentVector.delete' is now complete. (Todo: test 'PersistentVector.delete'.)

This commit is contained in:
2026-01-18 06:58:41 +00:00
parent 79a0c95a58
commit 185ef3fc12
2 changed files with 25 additions and 3 deletions

View File

@@ -671,8 +671,7 @@ struct
val difference = newChildSize - oldChildSize
val nodes = Vector.update (nodes, 0, child)
val sizes =
Vector.map (fn el => el + difference)
val sizes = Vector.map (fn el => el + difference) sizes
in
BRANCH (nodes, sizes)
end
@@ -680,6 +679,30 @@ struct
raise Fail "PersistentVector.mergeWhenRightDepthIsGreater: \
\reached LEAF before (curDepth = leftDepth)"
fun mergeWhenLeftDepthIsGreater (left, right, rightDepth, curDepth) =
if rightDepth = curDepth then
mergeSameDepth (left, right)
else
case left of
BRANCH (nodes, sizes) =>
let
val lastIdx = Vector.length sizes - 1
val child = mergeWhenLeftDepthIsGreater
(Vector.sub (nodes, lastIdx), right, rightDepth, curDepth + 1)
val oldChildSize = Vector.sub (sizes, lastIdx)
val newChildSize = getFinishIdx child
val difference = newChildSize - oldChildSize
val nodes = Vector.update (nodes, lastIdx, child)
val sizes = Vector.map (fn el => el + difference) sizes
in
BRANCH (nodes, sizes)
end
| LEAF _ =>
raise Fail "PersistentVector.mergeWhenLeftDepthIsGreater: \
\reached LEAF before (curDepth = rightDepth)"
fun merge (left, right) =
let
val leftDepth = countDepth left