done implementing 'PersistentVector.merge', which means that 'PersistentVector.delete' is now complete. (Todo: test 'PersistentVector.delete'.)
This commit is contained in:
@@ -671,8 +671,7 @@ struct
|
|||||||
val difference = newChildSize - oldChildSize
|
val difference = newChildSize - oldChildSize
|
||||||
|
|
||||||
val nodes = Vector.update (nodes, 0, child)
|
val nodes = Vector.update (nodes, 0, child)
|
||||||
val sizes =
|
val sizes = Vector.map (fn el => el + difference) sizes
|
||||||
Vector.map (fn el => el + difference)
|
|
||||||
in
|
in
|
||||||
BRANCH (nodes, sizes)
|
BRANCH (nodes, sizes)
|
||||||
end
|
end
|
||||||
@@ -680,6 +679,30 @@ struct
|
|||||||
raise Fail "PersistentVector.mergeWhenRightDepthIsGreater: \
|
raise Fail "PersistentVector.mergeWhenRightDepthIsGreater: \
|
||||||
\reached LEAF before (curDepth = leftDepth)"
|
\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) =
|
fun merge (left, right) =
|
||||||
let
|
let
|
||||||
val leftDepth = countDepth left
|
val leftDepth = countDepth left
|
||||||
|
|||||||
1
todo.md
1
todo.md
@@ -1,4 +1,3 @@
|
|||||||
# To-do list
|
# To-do list
|
||||||
- Implement function to merge left and right subtrees for `PersistentVector.delete` function
|
|
||||||
- Test `PersistentVector.delete` function
|
- Test `PersistentVector.delete` function
|
||||||
- Implement 'yj' motion and add tests for it
|
- Implement 'yj' motion and add tests for it
|
||||||
|
|||||||
Reference in New Issue
Block a user