Skip to content

Commit 408ee47

Browse files
committed
feat(array): add init
1 parent 683df35 commit 408ee47

File tree

3 files changed

+26
-2
lines changed

3 files changed

+26
-2
lines changed

src/Core__Array.mjs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,17 @@ import * as Js_math from "rescript/lib/es6/js_math.js";
55
import * as Caml_option from "rescript/lib/es6/caml_option.js";
66
import * as Caml_splice_call from "rescript/lib/es6/caml_splice_call.js";
77

8+
function init(len, f) {
9+
if (len <= 0) {
10+
return [];
11+
}
12+
var arr = new Array(len);
13+
for(var i = 0; i < len; ++i){
14+
arr[i] = Curry._1(f, i);
15+
}
16+
return arr;
17+
}
18+
819
function indexOfOpt(arr, item) {
920
var index = arr.indexOf(item);
1021
if (index !== -1) {
@@ -123,6 +134,7 @@ function findMap(arr, f) {
123134
}
124135

125136
export {
137+
init ,
126138
indexOfOpt ,
127139
lastIndexOfOpt ,
128140
reduce ,

src/Core__Array.res

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
@new external makeUninitializedUnsafe: int => array<'a> = "Array"
2+
@set external truncateToLengthUnsafe: (array<'a>, int) => unit = "length"
13
external getUnsafe: (array<'a>, int) => 'a = "%array_unsafe_get"
24
external setUnsafe: (array<'a>, int, 'a) => unit = "%array_unsafe_set"
35

@@ -11,6 +13,17 @@ external fromArrayLikeWithMap: (Js.Array2.array_like<'a>, 'a => 'b) => array<'a>
1113
@val external fromIterator: Core__Iterator.t<'a> => array<'a> = "Array.from"
1214
@val external fromIteratorWithMap: (Core__Iterator.t<'a>, 'a => 'c) => array<'a> = "Array.from"
1315

16+
let init = (len, f) =>
17+
if len <= 0 {
18+
[]
19+
} else {
20+
let arr = makeUninitializedUnsafe(len)
21+
for i in 0 to len - 1 {
22+
arr->setUnsafe(i, f(i))
23+
}
24+
arr
25+
}
26+
1427
@val external isArray: 'a => bool = "Array.isArray"
1528

1629
@get external length: array<'a> => int = "length"
@@ -145,8 +158,6 @@ let findIndexOpt = (array: array<'a>, finder: 'a => bool): option<int> =>
145158
| index => Some(index)
146159
}
147160

148-
@new external makeUninitializedUnsafe: int => array<'a> = "Array"
149-
@set external truncateToLengthUnsafe: (array<'a>, int) => unit = "length"
150161
let swapUnsafe = (xs, i, j) => {
151162
let tmp = getUnsafe(xs, i)
152163
setUnsafe(xs, i, getUnsafe(xs, j))

src/Core__Array.resi

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
external fromArrayLikeWithMap: (Js.Array2.array_like<'a>, 'a => 'b) => array<'a> = "Array.from"
66
@val external fromIterator: Core__Iterator.t<'a> => array<'a> = "Array.from"
77
@val external fromIteratorWithMap: (Core__Iterator.t<'a>, 'a => 'c) => array<'a> = "Array.from"
8+
let init: (int, int => 'a) => array<'a>
89
@val external isArray: 'a => bool = "Array.isArray"
910
@get external length: array<'a> => int = "length"
1011
@send external copyAllWithin: (array<'a>, ~target: int) => array<'a> = "copyWithin"

0 commit comments

Comments
 (0)