rescript
Version:
ReScript toolchain
428 lines (402 loc) • 9.55 kB
JavaScript
import * as Curry from "./curry.js";
import * as Belt_Array from "./belt_Array.js";
function sortedLengthAuxMore(xs, _prec, _acc, len, lt) {
while(true) {
var acc = _acc;
var prec = _prec;
if (acc >= len) {
return acc;
}
var v = xs[acc];
if (!lt(v, prec)) {
return acc;
}
_acc = acc + 1 | 0;
_prec = v;
continue ;
};
}
function strictlySortedLengthU(xs, lt) {
var len = xs.length;
if (len === 0 || len === 1) {
return len;
}
var x0 = xs[0];
var x1 = xs[1];
if (lt(x0, x1)) {
var _prec = x1;
var _acc = 2;
while(true) {
var acc = _acc;
var prec = _prec;
if (acc >= len) {
return acc;
}
var v = xs[acc];
if (!lt(prec, v)) {
return acc;
}
_acc = acc + 1 | 0;
_prec = v;
continue ;
};
} else if (lt(x1, x0)) {
return -sortedLengthAuxMore(xs, x1, 2, len, lt) | 0;
} else {
return 1;
}
}
function strictlySortedLength(xs, lt) {
return strictlySortedLengthU(xs, Curry.__2(lt));
}
function isSortedU(a, cmp) {
var len = a.length;
if (len === 0) {
return true;
} else {
var _i = 0;
var last_bound = len - 1 | 0;
while(true) {
var i = _i;
if (i === last_bound) {
return true;
}
if (cmp(a[i], a[i + 1 | 0]) > 0) {
return false;
}
_i = i + 1 | 0;
continue ;
};
}
}
function isSorted(a, cmp) {
return isSortedU(a, Curry.__2(cmp));
}
function merge(src, src1ofs, src1len, src2, src2ofs, src2len, dst, dstofs, cmp) {
var src1r = src1ofs + src1len | 0;
var src2r = src2ofs + src2len | 0;
var _i1 = src1ofs;
var _s1 = src[src1ofs];
var _i2 = src2ofs;
var _s2 = src2[src2ofs];
var _d = dstofs;
while(true) {
var d = _d;
var s2 = _s2;
var i2 = _i2;
var s1 = _s1;
var i1 = _i1;
if (cmp(s1, s2) <= 0) {
dst[d] = s1;
var i1$1 = i1 + 1 | 0;
if (i1$1 >= src1r) {
return Belt_Array.blitUnsafe(src2, i2, dst, d + 1 | 0, src2r - i2 | 0);
}
_d = d + 1 | 0;
_s1 = src[i1$1];
_i1 = i1$1;
continue ;
}
dst[d] = s2;
var i2$1 = i2 + 1 | 0;
if (i2$1 >= src2r) {
return Belt_Array.blitUnsafe(src, i1, dst, d + 1 | 0, src1r - i1 | 0);
}
_d = d + 1 | 0;
_s2 = src2[i2$1];
_i2 = i2$1;
continue ;
};
}
function unionU(src, src1ofs, src1len, src2, src2ofs, src2len, dst, dstofs, cmp) {
var src1r = src1ofs + src1len | 0;
var src2r = src2ofs + src2len | 0;
var _i1 = src1ofs;
var _s1 = src[src1ofs];
var _i2 = src2ofs;
var _s2 = src2[src2ofs];
var _d = dstofs;
while(true) {
var d = _d;
var s2 = _s2;
var i2 = _i2;
var s1 = _s1;
var i1 = _i1;
var c = cmp(s1, s2);
if (c < 0) {
dst[d] = s1;
var i1$1 = i1 + 1 | 0;
var d$1 = d + 1 | 0;
if (i1$1 < src1r) {
_d = d$1;
_s1 = src[i1$1];
_i1 = i1$1;
continue ;
}
Belt_Array.blitUnsafe(src2, i2, dst, d$1, src2r - i2 | 0);
return (d$1 + src2r | 0) - i2 | 0;
}
if (c === 0) {
dst[d] = s1;
var i1$2 = i1 + 1 | 0;
var i2$1 = i2 + 1 | 0;
var d$2 = d + 1 | 0;
if (!(i1$2 < src1r && i2$1 < src2r)) {
if (i1$2 === src1r) {
Belt_Array.blitUnsafe(src2, i2$1, dst, d$2, src2r - i2$1 | 0);
return (d$2 + src2r | 0) - i2$1 | 0;
} else {
Belt_Array.blitUnsafe(src, i1$2, dst, d$2, src1r - i1$2 | 0);
return (d$2 + src1r | 0) - i1$2 | 0;
}
}
_d = d$2;
_s2 = src2[i2$1];
_i2 = i2$1;
_s1 = src[i1$2];
_i1 = i1$2;
continue ;
}
dst[d] = s2;
var i2$2 = i2 + 1 | 0;
var d$3 = d + 1 | 0;
if (i2$2 < src2r) {
_d = d$3;
_s2 = src2[i2$2];
_i2 = i2$2;
continue ;
}
Belt_Array.blitUnsafe(src, i1, dst, d$3, src1r - i1 | 0);
return (d$3 + src1r | 0) - i1 | 0;
};
}
function union(src, src1ofs, src1len, src2, src2ofs, src2len, dst, dstofs, cmp) {
return unionU(src, src1ofs, src1len, src2, src2ofs, src2len, dst, dstofs, Curry.__2(cmp));
}
function intersectU(src, src1ofs, src1len, src2, src2ofs, src2len, dst, dstofs, cmp) {
var src1r = src1ofs + src1len | 0;
var src2r = src2ofs + src2len | 0;
var _i1 = src1ofs;
var _s1 = src[src1ofs];
var _i2 = src2ofs;
var _s2 = src2[src2ofs];
var _d = dstofs;
while(true) {
var d = _d;
var s2 = _s2;
var i2 = _i2;
var s1 = _s1;
var i1 = _i1;
var c = cmp(s1, s2);
if (c < 0) {
var i1$1 = i1 + 1 | 0;
if (i1$1 >= src1r) {
return d;
}
_s1 = src[i1$1];
_i1 = i1$1;
continue ;
}
if (c === 0) {
dst[d] = s1;
var i1$2 = i1 + 1 | 0;
var i2$1 = i2 + 1 | 0;
var d$1 = d + 1 | 0;
if (!(i1$2 < src1r && i2$1 < src2r)) {
return d$1;
}
_d = d$1;
_s2 = src2[i2$1];
_i2 = i2$1;
_s1 = src[i1$2];
_i1 = i1$2;
continue ;
}
var i2$2 = i2 + 1 | 0;
if (i2$2 >= src2r) {
return d;
}
_s2 = src2[i2$2];
_i2 = i2$2;
continue ;
};
}
function intersect(src, src1ofs, src1len, src2, src2ofs, src2len, dst, dstofs, cmp) {
return intersectU(src, src1ofs, src1len, src2, src2ofs, src2len, dst, dstofs, Curry.__2(cmp));
}
function diffU(src, src1ofs, src1len, src2, src2ofs, src2len, dst, dstofs, cmp) {
var src1r = src1ofs + src1len | 0;
var src2r = src2ofs + src2len | 0;
var _i1 = src1ofs;
var _s1 = src[src1ofs];
var _i2 = src2ofs;
var _s2 = src2[src2ofs];
var _d = dstofs;
while(true) {
var d = _d;
var s2 = _s2;
var i2 = _i2;
var s1 = _s1;
var i1 = _i1;
var c = cmp(s1, s2);
if (c < 0) {
dst[d] = s1;
var d$1 = d + 1 | 0;
var i1$1 = i1 + 1 | 0;
if (i1$1 >= src1r) {
return d$1;
}
_d = d$1;
_s1 = src[i1$1];
_i1 = i1$1;
continue ;
}
if (c === 0) {
var i1$2 = i1 + 1 | 0;
var i2$1 = i2 + 1 | 0;
if (!(i1$2 < src1r && i2$1 < src2r)) {
if (i1$2 === src1r) {
return d;
} else {
Belt_Array.blitUnsafe(src, i1$2, dst, d, src1r - i1$2 | 0);
return (d + src1r | 0) - i1$2 | 0;
}
}
_s2 = src2[i2$1];
_i2 = i2$1;
_s1 = src[i1$2];
_i1 = i1$2;
continue ;
}
var i2$2 = i2 + 1 | 0;
if (i2$2 < src2r) {
_s2 = src2[i2$2];
_i2 = i2$2;
continue ;
}
Belt_Array.blitUnsafe(src, i1, dst, d, src1r - i1 | 0);
return (d + src1r | 0) - i1 | 0;
};
}
function diff(src, src1ofs, src1len, src2, src2ofs, src2len, dst, dstofs, cmp) {
return diffU(src, src1ofs, src1len, src2, src2ofs, src2len, dst, dstofs, Curry.__2(cmp));
}
function insertionSort(src, srcofs, dst, dstofs, len, cmp) {
for(var i = 0; i < len; ++i){
var e = src[srcofs + i | 0];
var j = (dstofs + i | 0) - 1 | 0;
while(j >= dstofs && cmp(dst[j], e) > 0) {
dst[j + 1 | 0] = dst[j];
j = j - 1 | 0;
};
dst[j + 1 | 0] = e;
}
}
function sortTo(src, srcofs, dst, dstofs, len, cmp) {
if (len <= 5) {
return insertionSort(src, srcofs, dst, dstofs, len, cmp);
}
var l1 = len / 2 | 0;
var l2 = len - l1 | 0;
sortTo(src, srcofs + l1 | 0, dst, dstofs + l1 | 0, l2, cmp);
sortTo(src, srcofs, src, srcofs + l2 | 0, l1, cmp);
merge(src, srcofs + l2 | 0, l1, dst, dstofs + l1 | 0, l2, dst, dstofs, cmp);
}
function stableSortInPlaceByU(a, cmp) {
var l = a.length;
if (l <= 5) {
return insertionSort(a, 0, a, 0, l, cmp);
}
var l1 = l / 2 | 0;
var l2 = l - l1 | 0;
var t = new Array(l2);
sortTo(a, l1, t, 0, l2, cmp);
sortTo(a, 0, a, l2, l1, cmp);
merge(a, l2, l1, t, 0, l2, a, 0, cmp);
}
function stableSortInPlaceBy(a, cmp) {
stableSortInPlaceByU(a, Curry.__2(cmp));
}
function stableSortByU(a, cmp) {
var b = a.slice(0);
stableSortInPlaceByU(b, cmp);
return b;
}
function stableSortBy(a, cmp) {
return stableSortByU(a, Curry.__2(cmp));
}
function binarySearchByU(sorted, key, cmp) {
var len = sorted.length;
if (len === 0) {
return -1;
}
var lo = sorted[0];
var c = cmp(key, lo);
if (c < 0) {
return -1;
}
var hi = sorted[len - 1 | 0];
var c2 = cmp(key, hi);
if (c2 > 0) {
return -(len + 1 | 0) | 0;
} else {
var _lo = 0;
var _hi = len - 1 | 0;
while(true) {
var hi$1 = _hi;
var lo$1 = _lo;
var mid = (lo$1 + hi$1 | 0) / 2 | 0;
var midVal = sorted[mid];
var c$1 = cmp(key, midVal);
if (c$1 === 0) {
return mid;
}
if (c$1 < 0) {
if (hi$1 === mid) {
if (cmp(sorted[lo$1], key) === 0) {
return lo$1;
} else {
return -(hi$1 + 1 | 0) | 0;
}
}
_hi = mid;
continue ;
}
if (lo$1 === mid) {
if (cmp(sorted[hi$1], key) === 0) {
return hi$1;
} else {
return -(hi$1 + 1 | 0) | 0;
}
}
_lo = mid;
continue ;
};
}
}
function binarySearchBy(sorted, key, cmp) {
return binarySearchByU(sorted, key, Curry.__2(cmp));
}
var Int;
var $$String;
export {
Int ,
$$String ,
strictlySortedLengthU ,
strictlySortedLength ,
isSortedU ,
isSorted ,
stableSortInPlaceByU ,
stableSortInPlaceBy ,
stableSortByU ,
stableSortBy ,
binarySearchByU ,
binarySearchBy ,
unionU ,
union ,
intersectU ,
intersect ,
diffU ,
diff ,
}
/* No side effect */