UNPKG

bs-platform

Version:

bucklescript compiler, ocaml standard libary by bucklescript and its required runtime support

237 lines (211 loc) 5.49 kB
'use strict'; var Belt_internalSetBuckets = require("./belt_internalSetBuckets.js"); var Belt_internalBucketsType = require("./belt_internalBucketsType.js"); function copyBucket(hash, h_buckets, ndata_tail, _old_bucket) { while(true) { var old_bucket = _old_bucket; if (old_bucket !== undefined) { var nidx = hash(old_bucket.key) & (h_buckets.length - 1 | 0); var match = ndata_tail[nidx]; if (match !== undefined) { match.next = old_bucket; } else { h_buckets[nidx] = old_bucket; } ndata_tail[nidx] = old_bucket; _old_bucket = old_bucket.next; continue ; } else { return /* () */0; } }; } function remove(h, key) { var eq = h.eq; var h_buckets = h.buckets; var i = h.hash(key) & (h_buckets.length - 1 | 0); var l = h_buckets[i]; if (l !== undefined) { var next_cell = l.next; if (eq(l.key, key)) { h.size = h.size - 1 | 0; h_buckets[i] = next_cell; return /* () */0; } else if (next_cell !== undefined) { var eq$1 = eq; var h$1 = h; var key$1 = key; var _prec = l; var _cell = next_cell; while(true) { var cell = _cell; var prec = _prec; var cell_next = cell.next; if (eq$1(cell.key, key$1)) { prec.next = cell_next; h$1.size = h$1.size - 1 | 0; return /* () */0; } else if (cell_next !== undefined) { _cell = cell_next; _prec = cell; continue ; } else { return /* () */0; } }; } else { return /* () */0; } } else { return /* () */0; } } function addBucket(h, key, _cell, eq) { while(true) { var cell = _cell; if (eq(cell.key, key)) { return 0; } else { var n = cell.next; if (n !== undefined) { _cell = n; continue ; } else { h.size = h.size + 1 | 0; cell.next = { key: key, next: undefined }; return /* () */0; } } }; } function add0(h, key, hash, eq) { var h_buckets = h.buckets; var buckets_len = h_buckets.length; var i = hash(key) & (buckets_len - 1 | 0); var l = h_buckets[i]; if (l !== undefined) { addBucket(h, key, l, eq); } else { h.size = h.size + 1 | 0; h_buckets[i] = { key: key, next: undefined }; } if (h.size > (buckets_len << 1)) { var hash$1 = hash; var h$1 = h; var odata = h$1.buckets; var osize = odata.length; var nsize = (osize << 1); if (nsize >= osize) { var h_buckets$1 = new Array(nsize); var ndata_tail = new Array(nsize); h$1.buckets = h_buckets$1; for(var i$1 = 0 ,i_finish = osize - 1 | 0; i$1 <= i_finish; ++i$1){ copyBucket(hash$1, h_buckets$1, ndata_tail, odata[i$1]); } for(var i$2 = 0 ,i_finish$1 = nsize - 1 | 0; i$2 <= i_finish$1; ++i$2){ var match = ndata_tail[i$2]; if (match !== undefined) { match.next = undefined; } } return /* () */0; } else { return 0; } } else { return 0; } } function add(h, key) { return add0(h, key, h.hash, h.eq); } function has(h, key) { var eq = h.eq; var h_buckets = h.buckets; var nid = h.hash(key) & (h_buckets.length - 1 | 0); var bucket = h_buckets[nid]; if (bucket !== undefined) { var eq$1 = eq; var key$1 = key; var _cell = bucket; while(true) { var cell = _cell; if (eq$1(cell.key, key$1)) { return true; } else { var match = cell.next; if (match !== undefined) { _cell = match; continue ; } else { return false; } } }; } else { return false; } } function make(hintSize, id) { return Belt_internalBucketsType.make(id[/* hash */0], id[/* eq */1], hintSize); } function size(prim) { return prim.size; } function fromArray(arr, id) { var eq = id[/* eq */1]; var hash = id[/* hash */0]; var len = arr.length; var v = Belt_internalBucketsType.make(hash, eq, len); for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ add0(v, arr[i], hash, eq); } return v; } function mergeMany(h, arr) { var eq = h.eq; var hash = h.hash; var len = arr.length; for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ add0(h, arr[i], hash, eq); } return /* () */0; } var Int = 0; var $$String = 0; var clear = Belt_internalBucketsType.clear; var isEmpty = Belt_internalBucketsType.isEmpty; var copy = Belt_internalSetBuckets.copy; var forEachU = Belt_internalSetBuckets.forEachU; var forEach = Belt_internalSetBuckets.forEach; var reduceU = Belt_internalSetBuckets.reduceU; var reduce = Belt_internalSetBuckets.reduce; var logStats = Belt_internalSetBuckets.logStats; var toArray = Belt_internalSetBuckets.toArray; var getBucketHistogram = Belt_internalSetBuckets.getBucketHistogram; exports.Int = Int; exports.$$String = $$String; exports.make = make; exports.clear = clear; exports.isEmpty = isEmpty; exports.add = add; exports.copy = copy; exports.has = has; exports.remove = remove; exports.forEachU = forEachU; exports.forEach = forEach; exports.reduceU = reduceU; exports.reduce = reduce; exports.size = size; exports.logStats = logStats; exports.toArray = toArray; exports.fromArray = fromArray; exports.mergeMany = mergeMany; exports.getBucketHistogram = getBucketHistogram; /* No side effect */