From 4126c833d1267b0ea3f31d2e2e4d5c487e3b40c2 Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Thu, 23 Oct 2025 06:41:21 +0100 Subject: [PATCH] add functions to replace start and end leaves in rrb_rope.sml --- src/rrb_rope.sml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/rrb_rope.sml b/src/rrb_rope.sml index 414c002..bfa7e33 100644 --- a/src/rrb_rope.sml +++ b/src/rrb_rope.sml @@ -150,4 +150,27 @@ struct in LEAF items end + + fun replaceStartLeaf (newStart, tree) = + case tree of + BRANCH nodes => + let + val startNode = replaceStartLeaf (newStart, Vector.sub (nodes, 0)) + val nodes = Vector.update (nodes, 0, startNode) + in + BRANCH nodes + end + | LEAF _ => LEAF newStart + + fun replaceEndLeaf (newEnd, tree) = + case tree of + BRANCH nodes => + let + val endNode = Vector.sub (nodes, Vector.length nodes - 1) + val endNode = replaceEndLeaf (newEnd, endNode) + val nodes = Vector.update (nodes, Vector.length nodes - 1, endNode) + in + BRANCH endNode + end + | LEAF _ => LEAF newEnd end