From a4c60603f61dd1a9f0ce420be9067965586dd694 Mon Sep 17 00:00:00 2001 From: Vladimir Azarov Date: Mon, 4 Aug 2025 22:13:17 +0200 Subject: Object assembly --- dynarray.sml | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'dynarray.sml') diff --git a/dynarray.sml b/dynarray.sml index b052989..371362e 100644 --- a/dynarray.sml +++ b/dynarray.sml @@ -17,7 +17,8 @@ structure Dynarray: DYNARRAY = struct let val (len, arr) = !dynarr in - if len = Array.length arr then + case Int.compare (len, Array.length arr) of + EQUAL => let val arr2 = Array.array (len * 2, NONE) in @@ -25,9 +26,11 @@ structure Dynarray: DYNARRAY = struct dynarr := (len, arr2); push dynarr v end - else + | LESS => ( Array.update (arr, len, SOME v); dynarr := (len + 1, arr) + ) + | GREATER => raise Unreachable end fun get dynarr n = @@ -70,4 +73,17 @@ structure Dynarray: DYNARRAY = struct in Vector.fromList l end + + fun appi f dynarr = + let + val (len, arr) = !dynarr + + fun loop idx = + if idx = len then + () + else + f (idx, valOf $ Array.sub (arr, idx)) + in + loop 0 + end end -- cgit v1.2.3