UNPKG

@rescript/std

Version:

The motiviation of this repo is that when ReScript users want to share their library with JS users, the JS users don't need have ReScript toolchain installed, this makes sharing code with JS users easier (more details on that topic can be found in our [Ex

298 lines (271 loc) 5.2 kB
'use strict'; var Curry = require("./curry.js"); var Caml_option = require("./caml_option.js"); function make(param) { return { length: 0, first: undefined, last: undefined }; } function clear(q) { q.length = 0; q.first = undefined; q.last = undefined; } function add(q, x) { var cell = { content: x, next: undefined }; var last = q.last; if (last !== undefined) { q.length = q.length + 1 | 0; last.next = cell; q.last = cell; } else { q.length = 1; q.first = cell; q.last = cell; } } function peek(q) { var v = q.first; if (v !== undefined) { return Caml_option.some(v.content); } } function peekUndefined(q) { var v = q.first; if (v !== undefined) { return v.content; } } function peekExn(q) { var v = q.first; if (v !== undefined) { return v.content; } throw { RE_EXN_ID: "Not_found", Error: new Error() }; } function pop(q) { var x = q.first; if (x === undefined) { return ; } var next = x.next; if (next === undefined) { clear(q); return Caml_option.some(x.content); } else { q.length = q.length - 1 | 0; q.first = next; return Caml_option.some(x.content); } } function popExn(q) { var x = q.first; if (x !== undefined) { var next = x.next; if (next === undefined) { clear(q); return x.content; } else { q.length = q.length - 1 | 0; q.first = next; return x.content; } } throw { RE_EXN_ID: "Not_found", Error: new Error() }; } function popUndefined(q) { var x = q.first; if (x === undefined) { return ; } var next = x.next; if (next === undefined) { clear(q); return x.content; } else { q.length = q.length - 1 | 0; q.first = next; return x.content; } } function copy(q) { var qRes = { length: q.length, first: undefined, last: undefined }; var _prev; var _cell = q.first; while(true) { var cell = _cell; var prev = _prev; if (cell !== undefined) { var content = cell.content; var res = { content: content, next: undefined }; if (prev !== undefined) { prev.next = res; } else { qRes.first = res; } _cell = cell.next; _prev = res; continue ; } qRes.last = prev; return qRes; }; } function mapU(q, f) { var qRes = { length: q.length, first: undefined, last: undefined }; var _prev; var _cell = q.first; while(true) { var cell = _cell; var prev = _prev; if (cell !== undefined) { var content = f(cell.content); var res = { content: content, next: undefined }; if (prev !== undefined) { prev.next = res; } else { qRes.first = res; } _cell = cell.next; _prev = res; continue ; } qRes.last = prev; return qRes; }; } function map(q, f) { return mapU(q, Curry.__1(f)); } function isEmpty(q) { return q.length === 0; } function size(q) { return q.length; } function forEachU(q, f) { var _cell = q.first; while(true) { var cell = _cell; if (cell === undefined) { return ; } f(cell.content); _cell = cell.next; continue ; }; } function forEach(q, f) { forEachU(q, Curry.__1(f)); } function reduceU(q, accu, f) { var _accu = accu; var _cell = q.first; while(true) { var cell = _cell; var accu$1 = _accu; if (cell === undefined) { return accu$1; } var accu$2 = f(accu$1, cell.content); _cell = cell.next; _accu = accu$2; continue ; }; } function reduce(q, accu, f) { return reduceU(q, accu, Curry.__2(f)); } function transfer(q1, q2) { if (q1.length <= 0) { return ; } var l = q2.last; if (l !== undefined) { q2.length = q2.length + q1.length | 0; l.next = q1.first; q2.last = q1.last; return clear(q1); } else { q2.length = q1.length; q2.first = q1.first; q2.last = q1.last; return clear(q1); } } function fillAux(_i, arr, _cell) { while(true) { var cell = _cell; var i = _i; if (cell === undefined) { return ; } arr[i] = cell.content; _cell = cell.next; _i = i + 1 | 0; continue ; }; } function toArray(x) { var v = new Array(x.length); fillAux(0, v, x.first); return v; } function fromArray(arr) { var q = { length: 0, first: undefined, last: undefined }; for(var i = 0 ,i_finish = arr.length; i < i_finish; ++i){ add(q, arr[i]); } return q; } exports.make = make; exports.clear = clear; exports.isEmpty = isEmpty; exports.fromArray = fromArray; exports.add = add; exports.peek = peek; exports.peekUndefined = peekUndefined; exports.peekExn = peekExn; exports.pop = pop; exports.popUndefined = popUndefined; exports.popExn = popExn; exports.copy = copy; exports.size = size; exports.mapU = mapU; exports.map = map; exports.forEachU = forEachU; exports.forEach = forEach; exports.reduceU = reduceU; exports.reduce = reduce; exports.transfer = transfer; exports.toArray = toArray; /* No side effect */