time-to-botec/squiggle/node_modules/@rescript/std/lib/es6/belt_internalBuckets.js
NunoSempere b6addc7f05 feat: add the node modules
Necessary in order to clearly see the squiggle hotwiring.
2022-12-03 12:44:49 +00:00

288 lines
5.4 KiB
JavaScript

import * as Curry from "./curry.js";
import * as Belt_Array from "./belt_Array.js";
import * as Caml_option from "./caml_option.js";
function copyBucket(c) {
if (c === undefined) {
return c;
}
var head = {
key: c.key,
value: c.value,
next: undefined
};
copyAuxCont(c.next, head);
return head;
}
function copyAuxCont(_c, _prec) {
while(true) {
var prec = _prec;
var c = _c;
if (c === undefined) {
return ;
}
var ncopy = {
key: c.key,
value: c.value,
next: undefined
};
prec.next = ncopy;
_prec = ncopy;
_c = c.next;
continue ;
};
}
function copyBuckets(buckets) {
var len = buckets.length;
var newBuckets = new Array(len);
for(var i = 0; i < len; ++i){
newBuckets[i] = copyBucket(buckets[i]);
}
return newBuckets;
}
function copy(x) {
return {
size: x.size,
buckets: copyBuckets(x.buckets),
hash: x.hash,
eq: x.eq
};
}
function bucketLength(_accu, _buckets) {
while(true) {
var buckets = _buckets;
var accu = _accu;
if (buckets === undefined) {
return accu;
}
_buckets = buckets.next;
_accu = accu + 1 | 0;
continue ;
};
}
function do_bucket_iter(f, _buckets) {
while(true) {
var buckets = _buckets;
if (buckets === undefined) {
return ;
}
f(buckets.key, buckets.value);
_buckets = buckets.next;
continue ;
};
}
function forEachU(h, f) {
var d = h.buckets;
for(var i = 0 ,i_finish = d.length; i < i_finish; ++i){
do_bucket_iter(f, d[i]);
}
}
function forEach(h, f) {
forEachU(h, Curry.__2(f));
}
function do_bucket_fold(f, _b, _accu) {
while(true) {
var accu = _accu;
var b = _b;
if (b === undefined) {
return accu;
}
_accu = f(accu, b.key, b.value);
_b = b.next;
continue ;
};
}
function reduceU(h, init, f) {
var d = h.buckets;
var accu = init;
for(var i = 0 ,i_finish = d.length; i < i_finish; ++i){
accu = do_bucket_fold(f, d[i], accu);
}
return accu;
}
function reduce(h, init, f) {
return reduceU(h, init, Curry.__3(f));
}
function getMaxBucketLength(h) {
return Belt_Array.reduceU(h.buckets, 0, (function (m, b) {
var len = bucketLength(0, b);
if (m > len) {
return m;
} else {
return len;
}
}));
}
function getBucketHistogram(h) {
var mbl = getMaxBucketLength(h);
var histo = Belt_Array.makeByU(mbl + 1 | 0, (function (param) {
return 0;
}));
Belt_Array.forEachU(h.buckets, (function (b) {
var l = bucketLength(0, b);
histo[l] = histo[l] + 1 | 0;
}));
return histo;
}
function logStats(h) {
var histogram = getBucketHistogram(h);
console.log({
bindings: h.size,
buckets: h.buckets.length,
histogram: histogram
});
}
function filterMapInplaceBucket(f, h, i, _prec, _cell) {
while(true) {
var cell = _cell;
var prec = _prec;
var n = cell.next;
var data = f(cell.key, cell.value);
if (data !== undefined) {
if (prec !== undefined) {
cell.next = cell;
} else {
h.buckets[i] = cell;
}
cell.value = Caml_option.valFromOption(data);
if (n === undefined) {
cell.next = n;
return ;
}
_cell = n;
_prec = cell;
continue ;
}
h.size = h.size - 1 | 0;
if (n === undefined) {
if (prec !== undefined) {
prec.next = n;
} else {
h.buckets[i] = prec;
}
return ;
}
_cell = n;
continue ;
};
}
function keepMapInPlaceU(h, f) {
var h_buckets = h.buckets;
for(var i = 0 ,i_finish = h_buckets.length; i < i_finish; ++i){
var v = h_buckets[i];
if (v !== undefined) {
filterMapInplaceBucket(f, h, i, undefined, v);
}
}
}
function keepMapInPlace(h, f) {
keepMapInPlaceU(h, Curry.__2(f));
}
function fillArray(_i, arr, _cell) {
while(true) {
var cell = _cell;
var i = _i;
arr[i] = [
cell.key,
cell.value
];
var v = cell.next;
if (v === undefined) {
return i + 1 | 0;
}
_cell = v;
_i = i + 1 | 0;
continue ;
};
}
function fillArrayMap(_i, arr, _cell, f) {
while(true) {
var cell = _cell;
var i = _i;
arr[i] = f(cell);
var v = cell.next;
if (v === undefined) {
return i + 1 | 0;
}
_cell = v;
_i = i + 1 | 0;
continue ;
};
}
function linear(h, f) {
var d = h.buckets;
var current = 0;
var arr = new Array(h.size);
for(var i = 0 ,i_finish = d.length; i < i_finish; ++i){
var cell = d[i];
if (cell !== undefined) {
current = fillArrayMap(current, arr, cell, f);
}
}
return arr;
}
function keysToArray(h) {
return linear(h, (function (x) {
return x.key;
}));
}
function valuesToArray(h) {
return linear(h, (function (x) {
return x.value;
}));
}
function toArray(h) {
return linear(h, (function (x) {
return [
x.key,
x.value
];
}));
}
var C;
export {
C ,
copy ,
forEachU ,
forEach ,
reduceU ,
reduce ,
logStats ,
keepMapInPlaceU ,
keepMapInPlace ,
fillArray ,
keysToArray ,
valuesToArray ,
toArray ,
getBucketHistogram ,
}
/* No side effect */