From 69fcbfc35dd06bbe2cfa2cc264c6dd759bffc352 Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Tue, 9 Dec 2025 10:07:46 +0000 Subject: [PATCH] add function to decrement indices in persistent-vector.sml --- fcore/persistent-vector.sml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/fcore/persistent-vector.sml b/fcore/persistent-vector.sml index b16c751..88926ce 100644 --- a/fcore/persistent-vector.sml +++ b/fcore/persistent-vector.sml @@ -859,4 +859,34 @@ struct end end end + + fun root tree = + case tree of + BRANCH (nodes, sizes) => + if Vector.length nodes = 1 then + Vector.sub (nodes, 0) + else + tree + | LEAF _ => tree + + fun decrement (minusBy, tree) = + case t of + BRANCH (nodes, sizes) => + let + val sizes = Vector.map (fn el => el - minusBy) sizes + val newFirstNode = decrement (minusBy, Vector.sub (nodes, 0)) + val nodes = Vector.update (0, nodes, newFirstNode) + in + BRANCH (nodes, sizes) + end + | LEAF (items, sizes) => + let + val sizes = Vector.map (fn el => el - minusBy) sizes + val items = Vector.map + (fn {start, finish} => + {start = start - minusBy, finish = finish - minusBy}) + items + in + LEAF (items, sizes) + end end