12
12
(* **********************************************************************)
13
13
14
14
(* Array operations *)
15
-
16
- external length : 'a array -> int = " %array_length"
17
- external size : 'a array -> int = " %array_length"
18
- external getUnsafe : 'a array -> int -> 'a = " %array_unsafe_get"
19
- external setUnsafe : 'a array -> int -> 'a -> unit = " %array_unsafe_set"
20
- external (.! () ): 'a array -> int -> 'a = " %array_unsafe_get"
21
- external (.! () < - ): 'a array -> int -> 'a -> unit = " %array_unsafe_set"
22
- external getUndefined : 'a array -> int -> 'a Js .undefined = " %array_unsafe_get"
23
- (* external get: 'a array -> int -> 'a = "%array_safe_get" *)
15
+ type 'a t = 'a array
16
+ external length : 'a t -> int = " %array_length"
17
+ external size : 'a t -> int = " %array_length"
18
+ external getUnsafe : 'a t -> int -> 'a = " %array_unsafe_get"
19
+ external setUnsafe : 'a t -> int -> 'a -> unit = " %array_unsafe_set"
20
+ external (.! ()): 'a t -> int -> 'a = "%array_unsafe_get"
21
+ external (.! ()< - ): 'a t -> int -> 'a -> unit = "%array_unsafe_set"
22
+ external getUndefined : 'a t -> int -> 'a Js .undefined = " %array_unsafe_get"
23
+ (* external get: 'a t -> int -> 'a = "%array_safe_get" *)
24
24
let get arr i =
25
25
if i > = 0 && i < length arr then Some arr.! (i) else None
26
26
let getExn arr i =
@@ -34,12 +34,12 @@ let setExn arr i v =
34
34
arr.! (i) < - v
35
35
36
36
37
- external truncateToLengthUnsafe : 'a array -> int -> unit = " length" [@@ bs.set]
37
+ external truncateToLengthUnsafe : 'a t -> int -> unit = " length" [@@ bs.set]
38
38
external makeUninitialized : int -> 'a Js .undefined array = " Array" [@@ bs.new ]
39
39
external makeUninitializedUnsafe : int -> 'a array = " Array" [@@ bs.new ]
40
40
41
41
42
- external copy : 'a array -> (_ [@ bs.as 0 ]) -> 'a array =
42
+ external copy : 'a t -> (_ [@ bs.as 0 ]) -> 'a t =
43
43
" slice" [@@ bs.send]
44
44
45
45
@@ -527,3 +527,12 @@ let joinWithU a sep toString =
527
527
else aux (i + 1 ) (res ^ toString a.! (i) [@ bs] ^ sep) in
528
528
aux 0 " "
529
529
let joinWith a sep toString = joinWithU a sep (fun [@bs ] x -> toString x)
530
+
531
+ let initU n f =
532
+ let v = makeUninitializedUnsafe n in
533
+ for i = 0 to n - 1 do
534
+ v.! (i) < - f i [@ bs]
535
+ done ;
536
+ v
537
+
538
+ let init n f = initU n (fun[@ bs] i -> f i )
0 commit comments