765 lines
13 KiB
JavaScript
765 lines
13 KiB
JavaScript
|
|
|
|
import * as Caml from "./caml.js";
|
|
import * as Curry from "./curry.js";
|
|
import * as Js_math from "./js_math.js";
|
|
import * as Caml_option from "./caml_option.js";
|
|
|
|
function get(arr, i) {
|
|
if (i >= 0 && i < arr.length) {
|
|
return Caml_option.some(arr[i]);
|
|
}
|
|
|
|
}
|
|
|
|
function getExn(arr, i) {
|
|
if (!(i >= 0 && i < arr.length)) {
|
|
throw {
|
|
RE_EXN_ID: "Assert_failure",
|
|
_1: [
|
|
"belt_Array.ml",
|
|
35,
|
|
2
|
|
],
|
|
Error: new Error()
|
|
};
|
|
}
|
|
return arr[i];
|
|
}
|
|
|
|
function set(arr, i, v) {
|
|
if (i >= 0 && i < arr.length) {
|
|
arr[i] = v;
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function setExn(arr, i, v) {
|
|
if (!(i >= 0 && i < arr.length)) {
|
|
throw {
|
|
RE_EXN_ID: "Assert_failure",
|
|
_1: [
|
|
"belt_Array.ml",
|
|
45,
|
|
2
|
|
],
|
|
Error: new Error()
|
|
};
|
|
}
|
|
arr[i] = v;
|
|
}
|
|
|
|
function swapUnsafe(xs, i, j) {
|
|
var tmp = xs[i];
|
|
xs[i] = xs[j];
|
|
xs[j] = tmp;
|
|
}
|
|
|
|
function shuffleInPlace(xs) {
|
|
var len = xs.length;
|
|
for(var i = 0; i < len; ++i){
|
|
swapUnsafe(xs, i, Js_math.random_int(i, len));
|
|
}
|
|
}
|
|
|
|
function shuffle(xs) {
|
|
var result = xs.slice(0);
|
|
shuffleInPlace(result);
|
|
return result;
|
|
}
|
|
|
|
function reverseInPlace(xs) {
|
|
var len = xs.length;
|
|
var ofs = 0;
|
|
for(var i = 0 ,i_finish = len / 2 | 0; i < i_finish; ++i){
|
|
swapUnsafe(xs, ofs + i | 0, ((ofs + len | 0) - i | 0) - 1 | 0);
|
|
}
|
|
}
|
|
|
|
function reverse(xs) {
|
|
var len = xs.length;
|
|
var result = new Array(len);
|
|
for(var i = 0; i < len; ++i){
|
|
result[i] = xs[(len - 1 | 0) - i | 0];
|
|
}
|
|
return result;
|
|
}
|
|
|
|
function make(l, f) {
|
|
if (l <= 0) {
|
|
return [];
|
|
}
|
|
var res = new Array(l);
|
|
for(var i = 0; i < l; ++i){
|
|
res[i] = f;
|
|
}
|
|
return res;
|
|
}
|
|
|
|
function makeByU(l, f) {
|
|
if (l <= 0) {
|
|
return [];
|
|
}
|
|
var res = new Array(l);
|
|
for(var i = 0; i < l; ++i){
|
|
res[i] = f(i);
|
|
}
|
|
return res;
|
|
}
|
|
|
|
function makeBy(l, f) {
|
|
return makeByU(l, Curry.__1(f));
|
|
}
|
|
|
|
function makeByAndShuffleU(l, f) {
|
|
var u = makeByU(l, f);
|
|
shuffleInPlace(u);
|
|
return u;
|
|
}
|
|
|
|
function makeByAndShuffle(l, f) {
|
|
return makeByAndShuffleU(l, Curry.__1(f));
|
|
}
|
|
|
|
function range(start, finish) {
|
|
var cut = finish - start | 0;
|
|
if (cut < 0) {
|
|
return [];
|
|
}
|
|
var arr = new Array(cut + 1 | 0);
|
|
for(var i = 0; i <= cut; ++i){
|
|
arr[i] = start + i | 0;
|
|
}
|
|
return arr;
|
|
}
|
|
|
|
function rangeBy(start, finish, step) {
|
|
var cut = finish - start | 0;
|
|
if (cut < 0 || step <= 0) {
|
|
return [];
|
|
}
|
|
var nb = (cut / step | 0) + 1 | 0;
|
|
var arr = new Array(nb);
|
|
var cur = start;
|
|
for(var i = 0; i < nb; ++i){
|
|
arr[i] = cur;
|
|
cur = cur + step | 0;
|
|
}
|
|
return arr;
|
|
}
|
|
|
|
function zip(xs, ys) {
|
|
var lenx = xs.length;
|
|
var leny = ys.length;
|
|
var len = lenx < leny ? lenx : leny;
|
|
var s = new Array(len);
|
|
for(var i = 0; i < len; ++i){
|
|
s[i] = [
|
|
xs[i],
|
|
ys[i]
|
|
];
|
|
}
|
|
return s;
|
|
}
|
|
|
|
function zipByU(xs, ys, f) {
|
|
var lenx = xs.length;
|
|
var leny = ys.length;
|
|
var len = lenx < leny ? lenx : leny;
|
|
var s = new Array(len);
|
|
for(var i = 0; i < len; ++i){
|
|
s[i] = f(xs[i], ys[i]);
|
|
}
|
|
return s;
|
|
}
|
|
|
|
function zipBy(xs, ys, f) {
|
|
return zipByU(xs, ys, Curry.__2(f));
|
|
}
|
|
|
|
function concat(a1, a2) {
|
|
var l1 = a1.length;
|
|
var l2 = a2.length;
|
|
var a1a2 = new Array(l1 + l2 | 0);
|
|
for(var i = 0; i < l1; ++i){
|
|
a1a2[i] = a1[i];
|
|
}
|
|
for(var i$1 = 0; i$1 < l2; ++i$1){
|
|
a1a2[l1 + i$1 | 0] = a2[i$1];
|
|
}
|
|
return a1a2;
|
|
}
|
|
|
|
function concatMany(arrs) {
|
|
var lenArrs = arrs.length;
|
|
var totalLen = 0;
|
|
for(var i = 0; i < lenArrs; ++i){
|
|
totalLen = totalLen + arrs[i].length | 0;
|
|
}
|
|
var result = new Array(totalLen);
|
|
totalLen = 0;
|
|
for(var j = 0; j < lenArrs; ++j){
|
|
var cur = arrs[j];
|
|
for(var k = 0 ,k_finish = cur.length; k < k_finish; ++k){
|
|
result[totalLen] = cur[k];
|
|
totalLen = totalLen + 1 | 0;
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
function slice(a, offset, len) {
|
|
if (len <= 0) {
|
|
return [];
|
|
}
|
|
var lena = a.length;
|
|
var ofs = offset < 0 ? Caml.int_max(lena + offset | 0, 0) : offset;
|
|
var hasLen = lena - ofs | 0;
|
|
var copyLength = hasLen < len ? hasLen : len;
|
|
if (copyLength <= 0) {
|
|
return [];
|
|
}
|
|
var result = new Array(copyLength);
|
|
for(var i = 0; i < copyLength; ++i){
|
|
result[i] = a[ofs + i | 0];
|
|
}
|
|
return result;
|
|
}
|
|
|
|
function sliceToEnd(a, offset) {
|
|
var lena = a.length;
|
|
var ofs = offset < 0 ? Caml.int_max(lena + offset | 0, 0) : offset;
|
|
var len = lena > ofs ? lena - ofs | 0 : 0;
|
|
var result = new Array(len);
|
|
for(var i = 0; i < len; ++i){
|
|
result[i] = a[ofs + i | 0];
|
|
}
|
|
return result;
|
|
}
|
|
|
|
function fill(a, offset, len, v) {
|
|
if (len <= 0) {
|
|
return ;
|
|
}
|
|
var lena = a.length;
|
|
var ofs = offset < 0 ? Caml.int_max(lena + offset | 0, 0) : offset;
|
|
var hasLen = lena - ofs | 0;
|
|
var fillLength = hasLen < len ? hasLen : len;
|
|
if (fillLength <= 0) {
|
|
return ;
|
|
}
|
|
for(var i = ofs ,i_finish = ofs + fillLength | 0; i < i_finish; ++i){
|
|
a[i] = v;
|
|
}
|
|
}
|
|
|
|
function blitUnsafe(a1, srcofs1, a2, srcofs2, blitLength) {
|
|
if (srcofs2 <= srcofs1) {
|
|
for(var j = 0; j < blitLength; ++j){
|
|
a2[j + srcofs2 | 0] = a1[j + srcofs1 | 0];
|
|
}
|
|
return ;
|
|
}
|
|
for(var j$1 = blitLength - 1 | 0; j$1 >= 0; --j$1){
|
|
a2[j$1 + srcofs2 | 0] = a1[j$1 + srcofs1 | 0];
|
|
}
|
|
}
|
|
|
|
function blit(a1, ofs1, a2, ofs2, len) {
|
|
var lena1 = a1.length;
|
|
var lena2 = a2.length;
|
|
var srcofs1 = ofs1 < 0 ? Caml.int_max(lena1 + ofs1 | 0, 0) : ofs1;
|
|
var srcofs2 = ofs2 < 0 ? Caml.int_max(lena2 + ofs2 | 0, 0) : ofs2;
|
|
var blitLength = Caml.int_min(len, Caml.int_min(lena1 - srcofs1 | 0, lena2 - srcofs2 | 0));
|
|
if (srcofs2 <= srcofs1) {
|
|
for(var j = 0; j < blitLength; ++j){
|
|
a2[j + srcofs2 | 0] = a1[j + srcofs1 | 0];
|
|
}
|
|
return ;
|
|
}
|
|
for(var j$1 = blitLength - 1 | 0; j$1 >= 0; --j$1){
|
|
a2[j$1 + srcofs2 | 0] = a1[j$1 + srcofs1 | 0];
|
|
}
|
|
}
|
|
|
|
function forEachU(a, f) {
|
|
for(var i = 0 ,i_finish = a.length; i < i_finish; ++i){
|
|
f(a[i]);
|
|
}
|
|
}
|
|
|
|
function forEach(a, f) {
|
|
forEachU(a, Curry.__1(f));
|
|
}
|
|
|
|
function mapU(a, f) {
|
|
var l = a.length;
|
|
var r = new Array(l);
|
|
for(var i = 0; i < l; ++i){
|
|
r[i] = f(a[i]);
|
|
}
|
|
return r;
|
|
}
|
|
|
|
function map(a, f) {
|
|
return mapU(a, Curry.__1(f));
|
|
}
|
|
|
|
function flatMapU(a, f) {
|
|
return concatMany(mapU(a, f));
|
|
}
|
|
|
|
function flatMap(a, f) {
|
|
return concatMany(mapU(a, Curry.__1(f)));
|
|
}
|
|
|
|
function getByU(a, p) {
|
|
var l = a.length;
|
|
var i = 0;
|
|
var r;
|
|
while(r === undefined && i < l) {
|
|
var v = a[i];
|
|
if (p(v)) {
|
|
r = Caml_option.some(v);
|
|
}
|
|
i = i + 1 | 0;
|
|
};
|
|
return r;
|
|
}
|
|
|
|
function getBy(a, p) {
|
|
return getByU(a, Curry.__1(p));
|
|
}
|
|
|
|
function getIndexByU(a, p) {
|
|
var l = a.length;
|
|
var i = 0;
|
|
var r;
|
|
while(r === undefined && i < l) {
|
|
var v = a[i];
|
|
if (p(v)) {
|
|
r = i;
|
|
}
|
|
i = i + 1 | 0;
|
|
};
|
|
return r;
|
|
}
|
|
|
|
function getIndexBy(a, p) {
|
|
return getIndexByU(a, Curry.__1(p));
|
|
}
|
|
|
|
function keepU(a, f) {
|
|
var l = a.length;
|
|
var r = new Array(l);
|
|
var j = 0;
|
|
for(var i = 0; i < l; ++i){
|
|
var v = a[i];
|
|
if (f(v)) {
|
|
r[j] = v;
|
|
j = j + 1 | 0;
|
|
}
|
|
|
|
}
|
|
r.length = j;
|
|
return r;
|
|
}
|
|
|
|
function keep(a, f) {
|
|
return keepU(a, Curry.__1(f));
|
|
}
|
|
|
|
function keepWithIndexU(a, f) {
|
|
var l = a.length;
|
|
var r = new Array(l);
|
|
var j = 0;
|
|
for(var i = 0; i < l; ++i){
|
|
var v = a[i];
|
|
if (f(v, i)) {
|
|
r[j] = v;
|
|
j = j + 1 | 0;
|
|
}
|
|
|
|
}
|
|
r.length = j;
|
|
return r;
|
|
}
|
|
|
|
function keepWithIndex(a, f) {
|
|
return keepWithIndexU(a, Curry.__2(f));
|
|
}
|
|
|
|
function keepMapU(a, f) {
|
|
var l = a.length;
|
|
var r = new Array(l);
|
|
var j = 0;
|
|
for(var i = 0; i < l; ++i){
|
|
var v = a[i];
|
|
var v$1 = f(v);
|
|
if (v$1 !== undefined) {
|
|
r[j] = Caml_option.valFromOption(v$1);
|
|
j = j + 1 | 0;
|
|
}
|
|
|
|
}
|
|
r.length = j;
|
|
return r;
|
|
}
|
|
|
|
function keepMap(a, f) {
|
|
return keepMapU(a, Curry.__1(f));
|
|
}
|
|
|
|
function forEachWithIndexU(a, f) {
|
|
for(var i = 0 ,i_finish = a.length; i < i_finish; ++i){
|
|
f(i, a[i]);
|
|
}
|
|
}
|
|
|
|
function forEachWithIndex(a, f) {
|
|
forEachWithIndexU(a, Curry.__2(f));
|
|
}
|
|
|
|
function mapWithIndexU(a, f) {
|
|
var l = a.length;
|
|
var r = new Array(l);
|
|
for(var i = 0; i < l; ++i){
|
|
r[i] = f(i, a[i]);
|
|
}
|
|
return r;
|
|
}
|
|
|
|
function mapWithIndex(a, f) {
|
|
return mapWithIndexU(a, Curry.__2(f));
|
|
}
|
|
|
|
function reduceU(a, x, f) {
|
|
var r = x;
|
|
for(var i = 0 ,i_finish = a.length; i < i_finish; ++i){
|
|
r = f(r, a[i]);
|
|
}
|
|
return r;
|
|
}
|
|
|
|
function reduce(a, x, f) {
|
|
return reduceU(a, x, Curry.__2(f));
|
|
}
|
|
|
|
function reduceReverseU(a, x, f) {
|
|
var r = x;
|
|
for(var i = a.length - 1 | 0; i >= 0; --i){
|
|
r = f(r, a[i]);
|
|
}
|
|
return r;
|
|
}
|
|
|
|
function reduceReverse(a, x, f) {
|
|
return reduceReverseU(a, x, Curry.__2(f));
|
|
}
|
|
|
|
function reduceReverse2U(a, b, x, f) {
|
|
var r = x;
|
|
var len = Caml.int_min(a.length, b.length);
|
|
for(var i = len - 1 | 0; i >= 0; --i){
|
|
r = f(r, a[i], b[i]);
|
|
}
|
|
return r;
|
|
}
|
|
|
|
function reduceReverse2(a, b, x, f) {
|
|
return reduceReverse2U(a, b, x, Curry.__3(f));
|
|
}
|
|
|
|
function reduceWithIndexU(a, x, f) {
|
|
var r = x;
|
|
for(var i = 0 ,i_finish = a.length; i < i_finish; ++i){
|
|
r = f(r, a[i], i);
|
|
}
|
|
return r;
|
|
}
|
|
|
|
function reduceWithIndex(a, x, f) {
|
|
return reduceWithIndexU(a, x, Curry.__3(f));
|
|
}
|
|
|
|
function everyU(arr, b) {
|
|
var len = arr.length;
|
|
var _i = 0;
|
|
while(true) {
|
|
var i = _i;
|
|
if (i === len) {
|
|
return true;
|
|
}
|
|
if (!b(arr[i])) {
|
|
return false;
|
|
}
|
|
_i = i + 1 | 0;
|
|
continue ;
|
|
};
|
|
}
|
|
|
|
function every(arr, f) {
|
|
return everyU(arr, Curry.__1(f));
|
|
}
|
|
|
|
function someU(arr, b) {
|
|
var len = arr.length;
|
|
var _i = 0;
|
|
while(true) {
|
|
var i = _i;
|
|
if (i === len) {
|
|
return false;
|
|
}
|
|
if (b(arr[i])) {
|
|
return true;
|
|
}
|
|
_i = i + 1 | 0;
|
|
continue ;
|
|
};
|
|
}
|
|
|
|
function some(arr, f) {
|
|
return someU(arr, Curry.__1(f));
|
|
}
|
|
|
|
function everyAux2(arr1, arr2, _i, b, len) {
|
|
while(true) {
|
|
var i = _i;
|
|
if (i === len) {
|
|
return true;
|
|
}
|
|
if (!b(arr1[i], arr2[i])) {
|
|
return false;
|
|
}
|
|
_i = i + 1 | 0;
|
|
continue ;
|
|
};
|
|
}
|
|
|
|
function every2U(a, b, p) {
|
|
return everyAux2(a, b, 0, p, Caml.int_min(a.length, b.length));
|
|
}
|
|
|
|
function every2(a, b, p) {
|
|
return every2U(a, b, Curry.__2(p));
|
|
}
|
|
|
|
function some2U(a, b, p) {
|
|
var _i = 0;
|
|
var len = Caml.int_min(a.length, b.length);
|
|
while(true) {
|
|
var i = _i;
|
|
if (i === len) {
|
|
return false;
|
|
}
|
|
if (p(a[i], b[i])) {
|
|
return true;
|
|
}
|
|
_i = i + 1 | 0;
|
|
continue ;
|
|
};
|
|
}
|
|
|
|
function some2(a, b, p) {
|
|
return some2U(a, b, Curry.__2(p));
|
|
}
|
|
|
|
function eqU(a, b, p) {
|
|
var lena = a.length;
|
|
var lenb = b.length;
|
|
if (lena === lenb) {
|
|
return everyAux2(a, b, 0, p, lena);
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function eq(a, b, p) {
|
|
return eqU(a, b, Curry.__2(p));
|
|
}
|
|
|
|
function cmpU(a, b, p) {
|
|
var lena = a.length;
|
|
var lenb = b.length;
|
|
if (lena > lenb) {
|
|
return 1;
|
|
} else if (lena < lenb) {
|
|
return -1;
|
|
} else {
|
|
var _i = 0;
|
|
while(true) {
|
|
var i = _i;
|
|
if (i === lena) {
|
|
return 0;
|
|
}
|
|
var c = p(a[i], b[i]);
|
|
if (c !== 0) {
|
|
return c;
|
|
}
|
|
_i = i + 1 | 0;
|
|
continue ;
|
|
};
|
|
}
|
|
}
|
|
|
|
function cmp(a, b, p) {
|
|
return cmpU(a, b, Curry.__2(p));
|
|
}
|
|
|
|
function partitionU(a, f) {
|
|
var l = a.length;
|
|
var i = 0;
|
|
var j = 0;
|
|
var a1 = new Array(l);
|
|
var a2 = new Array(l);
|
|
for(var ii = 0; ii < l; ++ii){
|
|
var v = a[ii];
|
|
if (f(v)) {
|
|
a1[i] = v;
|
|
i = i + 1 | 0;
|
|
} else {
|
|
a2[j] = v;
|
|
j = j + 1 | 0;
|
|
}
|
|
}
|
|
a1.length = i;
|
|
a2.length = j;
|
|
return [
|
|
a1,
|
|
a2
|
|
];
|
|
}
|
|
|
|
function partition(a, f) {
|
|
return partitionU(a, Curry.__1(f));
|
|
}
|
|
|
|
function unzip(a) {
|
|
var l = a.length;
|
|
var a1 = new Array(l);
|
|
var a2 = new Array(l);
|
|
for(var i = 0; i < l; ++i){
|
|
var match = a[i];
|
|
a1[i] = match[0];
|
|
a2[i] = match[1];
|
|
}
|
|
return [
|
|
a1,
|
|
a2
|
|
];
|
|
}
|
|
|
|
function joinWithU(a, sep, toString) {
|
|
var l = a.length;
|
|
if (l === 0) {
|
|
return "";
|
|
}
|
|
var lastIndex = l - 1 | 0;
|
|
var _i = 0;
|
|
var _res = "";
|
|
while(true) {
|
|
var res = _res;
|
|
var i = _i;
|
|
if (i === lastIndex) {
|
|
return res + toString(a[i]);
|
|
}
|
|
_res = res + (toString(a[i]) + sep);
|
|
_i = i + 1 | 0;
|
|
continue ;
|
|
};
|
|
}
|
|
|
|
function joinWith(a, sep, toString) {
|
|
return joinWithU(a, sep, Curry.__1(toString));
|
|
}
|
|
|
|
function initU(n, f) {
|
|
var v = new Array(n);
|
|
for(var i = 0; i < n; ++i){
|
|
v[i] = f(i);
|
|
}
|
|
return v;
|
|
}
|
|
|
|
function init(n, f) {
|
|
return initU(n, Curry.__1(f));
|
|
}
|
|
|
|
export {
|
|
get ,
|
|
getExn ,
|
|
set ,
|
|
setExn ,
|
|
shuffleInPlace ,
|
|
shuffle ,
|
|
reverseInPlace ,
|
|
reverse ,
|
|
make ,
|
|
range ,
|
|
rangeBy ,
|
|
makeByU ,
|
|
makeBy ,
|
|
makeByAndShuffleU ,
|
|
makeByAndShuffle ,
|
|
zip ,
|
|
zipByU ,
|
|
zipBy ,
|
|
unzip ,
|
|
concat ,
|
|
concatMany ,
|
|
slice ,
|
|
sliceToEnd ,
|
|
fill ,
|
|
blit ,
|
|
blitUnsafe ,
|
|
forEachU ,
|
|
forEach ,
|
|
mapU ,
|
|
map ,
|
|
flatMapU ,
|
|
flatMap ,
|
|
getByU ,
|
|
getBy ,
|
|
getIndexByU ,
|
|
getIndexBy ,
|
|
keepU ,
|
|
keep ,
|
|
keepWithIndexU ,
|
|
keepWithIndex ,
|
|
keepMapU ,
|
|
keepMap ,
|
|
forEachWithIndexU ,
|
|
forEachWithIndex ,
|
|
mapWithIndexU ,
|
|
mapWithIndex ,
|
|
partitionU ,
|
|
partition ,
|
|
reduceU ,
|
|
reduce ,
|
|
reduceReverseU ,
|
|
reduceReverse ,
|
|
reduceReverse2U ,
|
|
reduceReverse2 ,
|
|
reduceWithIndexU ,
|
|
reduceWithIndex ,
|
|
joinWithU ,
|
|
joinWith ,
|
|
someU ,
|
|
some ,
|
|
everyU ,
|
|
every ,
|
|
every2U ,
|
|
every2 ,
|
|
some2U ,
|
|
some2 ,
|
|
cmpU ,
|
|
cmp ,
|
|
eqU ,
|
|
eq ,
|
|
initU ,
|
|
init ,
|
|
}
|
|
/* No side effect */
|