bs-platform
Version:
bucklescript compiler, ocaml standard libary by bucklescript and its required runtime support
1,159 lines (1,117 loc) • 30.5 kB
JavaScript
'use strict';
var $$Array = require("./array.js");
var Curry = require("./curry.js");
var Random = require("./random.js");
var Caml_obj = require("./caml_obj.js");
var Caml_hash = require("./caml_hash.js");
var Caml_array = require("./caml_array.js");
var Pervasives = require("./pervasives.js");
var Caml_option = require("./caml_option.js");
var Caml_primitive = require("./caml_primitive.js");
var CamlinternalLazy = require("./camlinternalLazy.js");
var Caml_external_polyfill = require("./caml_external_polyfill.js");
var Caml_builtin_exceptions = require("./caml_builtin_exceptions.js");
function hash(x) {
return Caml_hash.caml_hash(10, 100, 0, x);
}
function hash_param(n1, n2, x) {
return Caml_hash.caml_hash(n1, n2, 0, x);
}
function seeded_hash(seed, x) {
return Caml_hash.caml_hash(10, 100, seed, x);
}
function ongoing_traversal(h) {
if (h.length < 4) {
return true;
} else {
return h[/* initial_size */3] < 0;
}
}
function flip_ongoing_traversal(h) {
h[/* initial_size */3] = -h[/* initial_size */3] | 0;
return /* () */0;
}
var randomized = /* record */[/* contents */false];
function randomize(param) {
randomized[0] = true;
return /* () */0;
}
function is_randomized(param) {
return randomized[0];
}
var prng = Caml_obj.caml_lazy_make((function (param) {
return Random.State.make_self_init(/* () */0);
}));
function power_2_above(_x, n) {
while(true) {
var x = _x;
if (x >= n || (x << 1) < x) {
return x;
} else {
_x = (x << 1);
continue ;
}
};
}
function create($staropt$star, initial_size) {
var random = $staropt$star !== undefined ? $staropt$star : randomized[0];
var s = power_2_above(16, initial_size);
var seed = random ? Random.State.bits(CamlinternalLazy.force(prng)) : 0;
return /* record */[
/* size */0,
/* data */Caml_array.caml_make_vect(s, /* Empty */0),
/* seed */seed,
/* initial_size */s
];
}
function clear(h) {
h[/* size */0] = 0;
var len = h[/* data */1].length;
for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){
Caml_array.caml_array_set(h[/* data */1], i, /* Empty */0);
}
return /* () */0;
}
function reset(h) {
var len = h[/* data */1].length;
if (h.length < 4 || len === Pervasives.abs(h[/* initial_size */3])) {
return clear(h);
} else {
h[/* size */0] = 0;
h[/* data */1] = Caml_array.caml_make_vect(Pervasives.abs(h[/* initial_size */3]), /* Empty */0);
return /* () */0;
}
}
function copy_bucketlist(param) {
if (param) {
var key = param[/* key */0];
var data = param[/* data */1];
var next = param[/* next */2];
var loop = function (_prec, _param) {
while(true) {
var param = _param;
var prec = _prec;
if (param) {
var key = param[/* key */0];
var data = param[/* data */1];
var next = param[/* next */2];
var r = /* Cons */[
/* key */key,
/* data */data,
/* next */next
];
if (prec) {
prec[/* next */2] = r;
} else {
throw [
Caml_builtin_exceptions.assert_failure,
/* tuple */[
"hashtbl.ml",
115,
23
]
];
}
_param = next;
_prec = r;
continue ;
} else {
return /* () */0;
}
};
};
var r = /* Cons */[
/* key */key,
/* data */data,
/* next */next
];
loop(r, next);
return r;
} else {
return /* Empty */0;
}
}
function copy(h) {
return /* record */[
/* size */h[/* size */0],
/* data */$$Array.map(copy_bucketlist, h[/* data */1]),
/* seed */h[/* seed */2],
/* initial_size */h[/* initial_size */3]
];
}
function length(h) {
return h[/* size */0];
}
function resize(indexfun, h) {
var odata = h[/* data */1];
var osize = odata.length;
var nsize = (osize << 1);
if (nsize >= osize) {
var ndata = Caml_array.caml_make_vect(nsize, /* Empty */0);
var ndata_tail = Caml_array.caml_make_vect(nsize, /* Empty */0);
var inplace = !ongoing_traversal(h);
h[/* data */1] = ndata;
var insert_bucket = function (_cell) {
while(true) {
var cell = _cell;
if (cell) {
var key = cell[/* key */0];
var data = cell[/* data */1];
var next = cell[/* next */2];
var cell$1 = inplace ? cell : /* Cons */[
/* key */key,
/* data */data,
/* next : Empty */0
];
var nidx = Curry._2(indexfun, h, key);
var match = Caml_array.caml_array_get(ndata_tail, nidx);
if (match) {
match[/* next */2] = cell$1;
} else {
Caml_array.caml_array_set(ndata, nidx, cell$1);
}
Caml_array.caml_array_set(ndata_tail, nidx, cell$1);
_cell = next;
continue ;
} else {
return /* () */0;
}
};
};
for(var i = 0 ,i_finish = osize - 1 | 0; i <= i_finish; ++i){
insert_bucket(Caml_array.caml_array_get(odata, i));
}
if (inplace) {
for(var i$1 = 0 ,i_finish$1 = nsize - 1 | 0; i$1 <= i_finish$1; ++i$1){
var match = Caml_array.caml_array_get(ndata_tail, i$1);
if (match) {
match[/* next */2] = /* Empty */0;
}
}
return /* () */0;
} else {
return 0;
}
} else {
return 0;
}
}
function key_index(h, key) {
if (h.length >= 3) {
return Caml_hash.caml_hash(10, 100, h[/* seed */2], key) & (h[/* data */1].length - 1 | 0);
} else {
return Caml_external_polyfill.resolve("caml_hash_univ_param")(10, 100, key) % h[/* data */1].length;
}
}
function add(h, key, data) {
var i = key_index(h, key);
var bucket = /* Cons */[
/* key */key,
/* data */data,
/* next */Caml_array.caml_array_get(h[/* data */1], i)
];
Caml_array.caml_array_set(h[/* data */1], i, bucket);
h[/* size */0] = h[/* size */0] + 1 | 0;
if (h[/* size */0] > (h[/* data */1].length << 1)) {
return resize(key_index, h);
} else {
return 0;
}
}
function remove(h, key) {
var i = key_index(h, key);
var h$1 = h;
var i$1 = i;
var key$1 = key;
var _prec = /* Empty */0;
var _c = Caml_array.caml_array_get(h[/* data */1], i);
while(true) {
var c = _c;
var prec = _prec;
if (c) {
var k = c[/* key */0];
var next = c[/* next */2];
if (Caml_obj.caml_equal(k, key$1)) {
h$1[/* size */0] = h$1[/* size */0] - 1 | 0;
if (prec) {
prec[/* next */2] = next;
return /* () */0;
} else {
return Caml_array.caml_array_set(h$1[/* data */1], i$1, next);
}
} else {
_c = next;
_prec = c;
continue ;
}
} else {
return /* () */0;
}
};
}
function find(h, key) {
var match = Caml_array.caml_array_get(h[/* data */1], key_index(h, key));
if (match) {
var k1 = match[/* key */0];
var d1 = match[/* data */1];
var next1 = match[/* next */2];
if (Caml_obj.caml_equal(key, k1)) {
return d1;
} else if (next1) {
var k2 = next1[/* key */0];
var d2 = next1[/* data */1];
var next2 = next1[/* next */2];
if (Caml_obj.caml_equal(key, k2)) {
return d2;
} else if (next2) {
var k3 = next2[/* key */0];
var d3 = next2[/* data */1];
var next3 = next2[/* next */2];
if (Caml_obj.caml_equal(key, k3)) {
return d3;
} else {
var key$1 = key;
var _param = next3;
while(true) {
var param = _param;
if (param) {
var k = param[/* key */0];
var data = param[/* data */1];
var next = param[/* next */2];
if (Caml_obj.caml_equal(key$1, k)) {
return data;
} else {
_param = next;
continue ;
}
} else {
throw Caml_builtin_exceptions.not_found;
}
};
}
} else {
throw Caml_builtin_exceptions.not_found;
}
} else {
throw Caml_builtin_exceptions.not_found;
}
} else {
throw Caml_builtin_exceptions.not_found;
}
}
function find_opt(h, key) {
var match = Caml_array.caml_array_get(h[/* data */1], key_index(h, key));
if (match) {
var k1 = match[/* key */0];
var d1 = match[/* data */1];
var next1 = match[/* next */2];
if (Caml_obj.caml_equal(key, k1)) {
return Caml_option.some(d1);
} else if (next1) {
var k2 = next1[/* key */0];
var d2 = next1[/* data */1];
var next2 = next1[/* next */2];
if (Caml_obj.caml_equal(key, k2)) {
return Caml_option.some(d2);
} else if (next2) {
var k3 = next2[/* key */0];
var d3 = next2[/* data */1];
var next3 = next2[/* next */2];
if (Caml_obj.caml_equal(key, k3)) {
return Caml_option.some(d3);
} else {
var key$1 = key;
var _param = next3;
while(true) {
var param = _param;
if (param) {
var k = param[/* key */0];
var data = param[/* data */1];
var next = param[/* next */2];
if (Caml_obj.caml_equal(key$1, k)) {
return Caml_option.some(data);
} else {
_param = next;
continue ;
}
} else {
return ;
}
};
}
} else {
return ;
}
} else {
return ;
}
}
}
function find_all(h, key) {
var find_in_bucket = function (_param) {
while(true) {
var param = _param;
if (param) {
var k = param[/* key */0];
var data = param[/* data */1];
var next = param[/* next */2];
if (Caml_obj.caml_equal(k, key)) {
return /* :: */[
data,
find_in_bucket(next)
];
} else {
_param = next;
continue ;
}
} else {
return /* [] */0;
}
};
};
return find_in_bucket(Caml_array.caml_array_get(h[/* data */1], key_index(h, key)));
}
function replace_bucket(key, data, _param) {
while(true) {
var param = _param;
if (param) {
var k = param[/* key */0];
var next = param[/* next */2];
if (Caml_obj.caml_equal(k, key)) {
param[/* key */0] = key;
param[/* data */1] = data;
return false;
} else {
_param = next;
continue ;
}
} else {
return true;
}
};
}
function replace(h, key, data) {
var i = key_index(h, key);
var l = Caml_array.caml_array_get(h[/* data */1], i);
if (replace_bucket(key, data, l)) {
Caml_array.caml_array_set(h[/* data */1], i, /* Cons */[
/* key */key,
/* data */data,
/* next */l
]);
h[/* size */0] = h[/* size */0] + 1 | 0;
if (h[/* size */0] > (h[/* data */1].length << 1)) {
return resize(key_index, h);
} else {
return 0;
}
} else {
return 0;
}
}
function mem(h, key) {
var _param = Caml_array.caml_array_get(h[/* data */1], key_index(h, key));
while(true) {
var param = _param;
if (param) {
var k = param[/* key */0];
var next = param[/* next */2];
if (Caml_obj.caml_equal(k, key)) {
return true;
} else {
_param = next;
continue ;
}
} else {
return false;
}
};
}
function iter(f, h) {
var do_bucket = function (_param) {
while(true) {
var param = _param;
if (param) {
var key = param[/* key */0];
var data = param[/* data */1];
var next = param[/* next */2];
Curry._2(f, key, data);
_param = next;
continue ;
} else {
return /* () */0;
}
};
};
var old_trav = ongoing_traversal(h);
if (!old_trav) {
flip_ongoing_traversal(h);
}
try {
var d = h[/* data */1];
for(var i = 0 ,i_finish = d.length - 1 | 0; i <= i_finish; ++i){
do_bucket(Caml_array.caml_array_get(d, i));
}
if (old_trav) {
return 0;
} else {
return flip_ongoing_traversal(h);
}
}
catch (exn){
if (old_trav) {
throw exn;
} else {
flip_ongoing_traversal(h);
throw exn;
}
}
}
function filter_map_inplace_bucket(f, h, i, _prec, _slot) {
while(true) {
var slot = _slot;
var prec = _prec;
if (slot) {
var key = slot[/* key */0];
var data = slot[/* data */1];
var next = slot[/* next */2];
var match = Curry._2(f, key, data);
if (match !== undefined) {
if (prec) {
prec[/* next */2] = slot;
} else {
Caml_array.caml_array_set(h[/* data */1], i, slot);
}
slot[/* data */1] = Caml_option.valFromOption(match);
_slot = next;
_prec = slot;
continue ;
} else {
h[/* size */0] = h[/* size */0] - 1 | 0;
_slot = next;
continue ;
}
} else if (prec) {
prec[/* next */2] = /* Empty */0;
return /* () */0;
} else {
return Caml_array.caml_array_set(h[/* data */1], i, /* Empty */0);
}
};
}
function filter_map_inplace(f, h) {
var d = h[/* data */1];
var old_trav = ongoing_traversal(h);
if (!old_trav) {
flip_ongoing_traversal(h);
}
try {
for(var i = 0 ,i_finish = d.length - 1 | 0; i <= i_finish; ++i){
filter_map_inplace_bucket(f, h, i, /* Empty */0, Caml_array.caml_array_get(h[/* data */1], i));
}
return /* () */0;
}
catch (exn){
if (old_trav) {
throw exn;
} else {
flip_ongoing_traversal(h);
throw exn;
}
}
}
function fold(f, h, init) {
var do_bucket = function (_b, _accu) {
while(true) {
var accu = _accu;
var b = _b;
if (b) {
var key = b[/* key */0];
var data = b[/* data */1];
var next = b[/* next */2];
_accu = Curry._3(f, key, data, accu);
_b = next;
continue ;
} else {
return accu;
}
};
};
var old_trav = ongoing_traversal(h);
if (!old_trav) {
flip_ongoing_traversal(h);
}
try {
var d = h[/* data */1];
var accu = init;
for(var i = 0 ,i_finish = d.length - 1 | 0; i <= i_finish; ++i){
accu = do_bucket(Caml_array.caml_array_get(d, i), accu);
}
if (!old_trav) {
flip_ongoing_traversal(h);
}
return accu;
}
catch (exn){
if (old_trav) {
throw exn;
} else {
flip_ongoing_traversal(h);
throw exn;
}
}
}
function bucket_length(_accu, _param) {
while(true) {
var param = _param;
var accu = _accu;
if (param) {
var next = param[/* next */2];
_param = next;
_accu = accu + 1 | 0;
continue ;
} else {
return accu;
}
};
}
function stats(h) {
var mbl = $$Array.fold_left((function (m, b) {
return Caml_primitive.caml_int_max(m, bucket_length(0, b));
}), 0, h[/* data */1]);
var histo = Caml_array.caml_make_vect(mbl + 1 | 0, 0);
$$Array.iter((function (b) {
var l = bucket_length(0, b);
return Caml_array.caml_array_set(histo, l, Caml_array.caml_array_get(histo, l) + 1 | 0);
}), h[/* data */1]);
return /* record */[
/* num_bindings */h[/* size */0],
/* num_buckets */h[/* data */1].length,
/* max_bucket_length */mbl,
/* bucket_histogram */histo
];
}
function MakeSeeded(H) {
var key_index = function (h, key) {
return Curry._2(H.hash, h[/* seed */2], key) & (h[/* data */1].length - 1 | 0);
};
var add = function (h, key, data) {
var i = key_index(h, key);
var bucket = /* Cons */[
/* key */key,
/* data */data,
/* next */Caml_array.caml_array_get(h[/* data */1], i)
];
Caml_array.caml_array_set(h[/* data */1], i, bucket);
h[/* size */0] = h[/* size */0] + 1 | 0;
if (h[/* size */0] > (h[/* data */1].length << 1)) {
return resize(key_index, h);
} else {
return 0;
}
};
var remove = function (h, key) {
var i = key_index(h, key);
var h$1 = h;
var i$1 = i;
var key$1 = key;
var _prec = /* Empty */0;
var _c = Caml_array.caml_array_get(h[/* data */1], i);
while(true) {
var c = _c;
var prec = _prec;
if (c) {
var k = c[/* key */0];
var next = c[/* next */2];
if (Curry._2(H.equal, k, key$1)) {
h$1[/* size */0] = h$1[/* size */0] - 1 | 0;
if (prec) {
prec[/* next */2] = next;
return /* () */0;
} else {
return Caml_array.caml_array_set(h$1[/* data */1], i$1, next);
}
} else {
_c = next;
_prec = c;
continue ;
}
} else {
return /* () */0;
}
};
};
var find = function (h, key) {
var match = Caml_array.caml_array_get(h[/* data */1], key_index(h, key));
if (match) {
var k1 = match[/* key */0];
var d1 = match[/* data */1];
var next1 = match[/* next */2];
if (Curry._2(H.equal, key, k1)) {
return d1;
} else if (next1) {
var k2 = next1[/* key */0];
var d2 = next1[/* data */1];
var next2 = next1[/* next */2];
if (Curry._2(H.equal, key, k2)) {
return d2;
} else if (next2) {
var k3 = next2[/* key */0];
var d3 = next2[/* data */1];
var next3 = next2[/* next */2];
if (Curry._2(H.equal, key, k3)) {
return d3;
} else {
var key$1 = key;
var _param = next3;
while(true) {
var param = _param;
if (param) {
var k = param[/* key */0];
var data = param[/* data */1];
var next = param[/* next */2];
if (Curry._2(H.equal, key$1, k)) {
return data;
} else {
_param = next;
continue ;
}
} else {
throw Caml_builtin_exceptions.not_found;
}
};
}
} else {
throw Caml_builtin_exceptions.not_found;
}
} else {
throw Caml_builtin_exceptions.not_found;
}
} else {
throw Caml_builtin_exceptions.not_found;
}
};
var find_opt = function (h, key) {
var match = Caml_array.caml_array_get(h[/* data */1], key_index(h, key));
if (match) {
var k1 = match[/* key */0];
var d1 = match[/* data */1];
var next1 = match[/* next */2];
if (Curry._2(H.equal, key, k1)) {
return Caml_option.some(d1);
} else if (next1) {
var k2 = next1[/* key */0];
var d2 = next1[/* data */1];
var next2 = next1[/* next */2];
if (Curry._2(H.equal, key, k2)) {
return Caml_option.some(d2);
} else if (next2) {
var k3 = next2[/* key */0];
var d3 = next2[/* data */1];
var next3 = next2[/* next */2];
if (Curry._2(H.equal, key, k3)) {
return Caml_option.some(d3);
} else {
var key$1 = key;
var _param = next3;
while(true) {
var param = _param;
if (param) {
var k = param[/* key */0];
var data = param[/* data */1];
var next = param[/* next */2];
if (Curry._2(H.equal, key$1, k)) {
return Caml_option.some(data);
} else {
_param = next;
continue ;
}
} else {
return ;
}
};
}
} else {
return ;
}
} else {
return ;
}
}
};
var find_all = function (h, key) {
var find_in_bucket = function (_param) {
while(true) {
var param = _param;
if (param) {
var k = param[/* key */0];
var d = param[/* data */1];
var next = param[/* next */2];
if (Curry._2(H.equal, k, key)) {
return /* :: */[
d,
find_in_bucket(next)
];
} else {
_param = next;
continue ;
}
} else {
return /* [] */0;
}
};
};
return find_in_bucket(Caml_array.caml_array_get(h[/* data */1], key_index(h, key)));
};
var replace_bucket = function (key, data, _param) {
while(true) {
var param = _param;
if (param) {
var k = param[/* key */0];
var next = param[/* next */2];
if (Curry._2(H.equal, k, key)) {
param[/* key */0] = key;
param[/* data */1] = data;
return false;
} else {
_param = next;
continue ;
}
} else {
return true;
}
};
};
var replace = function (h, key, data) {
var i = key_index(h, key);
var l = Caml_array.caml_array_get(h[/* data */1], i);
if (replace_bucket(key, data, l)) {
Caml_array.caml_array_set(h[/* data */1], i, /* Cons */[
/* key */key,
/* data */data,
/* next */l
]);
h[/* size */0] = h[/* size */0] + 1 | 0;
if (h[/* size */0] > (h[/* data */1].length << 1)) {
return resize(key_index, h);
} else {
return 0;
}
} else {
return 0;
}
};
var mem = function (h, key) {
var _param = Caml_array.caml_array_get(h[/* data */1], key_index(h, key));
while(true) {
var param = _param;
if (param) {
var k = param[/* key */0];
var next = param[/* next */2];
if (Curry._2(H.equal, k, key)) {
return true;
} else {
_param = next;
continue ;
}
} else {
return false;
}
};
};
return {
create: create,
clear: clear,
reset: reset,
copy: copy,
add: add,
remove: remove,
find: find,
find_opt: find_opt,
find_all: find_all,
replace: replace,
mem: mem,
iter: iter,
filter_map_inplace: filter_map_inplace,
fold: fold,
length: length,
stats: stats
};
}
function Make(H) {
var equal = H.equal;
var key_index = function (h, key) {
return Curry._1(H.hash, key) & (h[/* data */1].length - 1 | 0);
};
var add = function (h, key, data) {
var i = key_index(h, key);
var bucket = /* Cons */[
/* key */key,
/* data */data,
/* next */Caml_array.caml_array_get(h[/* data */1], i)
];
Caml_array.caml_array_set(h[/* data */1], i, bucket);
h[/* size */0] = h[/* size */0] + 1 | 0;
if (h[/* size */0] > (h[/* data */1].length << 1)) {
return resize(key_index, h);
} else {
return 0;
}
};
var remove = function (h, key) {
var i = key_index(h, key);
var h$1 = h;
var i$1 = i;
var key$1 = key;
var _prec = /* Empty */0;
var _c = Caml_array.caml_array_get(h[/* data */1], i);
while(true) {
var c = _c;
var prec = _prec;
if (c) {
var k = c[/* key */0];
var next = c[/* next */2];
if (Curry._2(equal, k, key$1)) {
h$1[/* size */0] = h$1[/* size */0] - 1 | 0;
if (prec) {
prec[/* next */2] = next;
return /* () */0;
} else {
return Caml_array.caml_array_set(h$1[/* data */1], i$1, next);
}
} else {
_c = next;
_prec = c;
continue ;
}
} else {
return /* () */0;
}
};
};
var find = function (h, key) {
var match = Caml_array.caml_array_get(h[/* data */1], key_index(h, key));
if (match) {
var k1 = match[/* key */0];
var d1 = match[/* data */1];
var next1 = match[/* next */2];
if (Curry._2(equal, key, k1)) {
return d1;
} else if (next1) {
var k2 = next1[/* key */0];
var d2 = next1[/* data */1];
var next2 = next1[/* next */2];
if (Curry._2(equal, key, k2)) {
return d2;
} else if (next2) {
var k3 = next2[/* key */0];
var d3 = next2[/* data */1];
var next3 = next2[/* next */2];
if (Curry._2(equal, key, k3)) {
return d3;
} else {
var key$1 = key;
var _param = next3;
while(true) {
var param = _param;
if (param) {
var k = param[/* key */0];
var data = param[/* data */1];
var next = param[/* next */2];
if (Curry._2(equal, key$1, k)) {
return data;
} else {
_param = next;
continue ;
}
} else {
throw Caml_builtin_exceptions.not_found;
}
};
}
} else {
throw Caml_builtin_exceptions.not_found;
}
} else {
throw Caml_builtin_exceptions.not_found;
}
} else {
throw Caml_builtin_exceptions.not_found;
}
};
var find_opt = function (h, key) {
var match = Caml_array.caml_array_get(h[/* data */1], key_index(h, key));
if (match) {
var k1 = match[/* key */0];
var d1 = match[/* data */1];
var next1 = match[/* next */2];
if (Curry._2(equal, key, k1)) {
return Caml_option.some(d1);
} else if (next1) {
var k2 = next1[/* key */0];
var d2 = next1[/* data */1];
var next2 = next1[/* next */2];
if (Curry._2(equal, key, k2)) {
return Caml_option.some(d2);
} else if (next2) {
var k3 = next2[/* key */0];
var d3 = next2[/* data */1];
var next3 = next2[/* next */2];
if (Curry._2(equal, key, k3)) {
return Caml_option.some(d3);
} else {
var key$1 = key;
var _param = next3;
while(true) {
var param = _param;
if (param) {
var k = param[/* key */0];
var data = param[/* data */1];
var next = param[/* next */2];
if (Curry._2(equal, key$1, k)) {
return Caml_option.some(data);
} else {
_param = next;
continue ;
}
} else {
return ;
}
};
}
} else {
return ;
}
} else {
return ;
}
}
};
var find_all = function (h, key) {
var find_in_bucket = function (_param) {
while(true) {
var param = _param;
if (param) {
var k = param[/* key */0];
var d = param[/* data */1];
var next = param[/* next */2];
if (Curry._2(equal, k, key)) {
return /* :: */[
d,
find_in_bucket(next)
];
} else {
_param = next;
continue ;
}
} else {
return /* [] */0;
}
};
};
return find_in_bucket(Caml_array.caml_array_get(h[/* data */1], key_index(h, key)));
};
var replace_bucket = function (key, data, _param) {
while(true) {
var param = _param;
if (param) {
var k = param[/* key */0];
var next = param[/* next */2];
if (Curry._2(equal, k, key)) {
param[/* key */0] = key;
param[/* data */1] = data;
return false;
} else {
_param = next;
continue ;
}
} else {
return true;
}
};
};
var replace = function (h, key, data) {
var i = key_index(h, key);
var l = Caml_array.caml_array_get(h[/* data */1], i);
if (replace_bucket(key, data, l)) {
Caml_array.caml_array_set(h[/* data */1], i, /* Cons */[
/* key */key,
/* data */data,
/* next */l
]);
h[/* size */0] = h[/* size */0] + 1 | 0;
if (h[/* size */0] > (h[/* data */1].length << 1)) {
return resize(key_index, h);
} else {
return 0;
}
} else {
return 0;
}
};
var mem = function (h, key) {
var _param = Caml_array.caml_array_get(h[/* data */1], key_index(h, key));
while(true) {
var param = _param;
if (param) {
var k = param[/* key */0];
var next = param[/* next */2];
if (Curry._2(equal, k, key)) {
return true;
} else {
_param = next;
continue ;
}
} else {
return false;
}
};
};
var create$1 = function (sz) {
return create(false, sz);
};
return {
create: create$1,
clear: clear,
reset: reset,
copy: copy,
add: add,
remove: remove,
find: find,
find_opt: find_opt,
find_all: find_all,
replace: replace,
mem: mem,
iter: iter,
filter_map_inplace: filter_map_inplace,
fold: fold,
length: length,
stats: stats
};
}
var seeded_hash_param = Caml_hash.caml_hash;
exports.create = create;
exports.clear = clear;
exports.reset = reset;
exports.copy = copy;
exports.add = add;
exports.find = find;
exports.find_opt = find_opt;
exports.find_all = find_all;
exports.mem = mem;
exports.remove = remove;
exports.replace = replace;
exports.iter = iter;
exports.filter_map_inplace = filter_map_inplace;
exports.fold = fold;
exports.length = length;
exports.randomize = randomize;
exports.is_randomized = is_randomized;
exports.stats = stats;
exports.Make = Make;
exports.MakeSeeded = MakeSeeded;
exports.hash = hash;
exports.seeded_hash = seeded_hash;
exports.hash_param = hash_param;
exports.seeded_hash_param = seeded_hash_param;
/* No side effect */