UNPKG

bs-platform

Version:

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

627 lines (622 loc) 14.6 kB
'use strict'; var Curry = require("./curry.js"); var Caml_option = require("./caml_option.js"); var Caml_builtin_exceptions = require("./caml_builtin_exceptions.js"); function Make(funarg) { var height = function (param) { if (param) { return param[4]; } else { return 0; } }; var create = function (l, x, d, r) { var hl = height(l); var hr = height(r); return /* Node */[ l, x, d, r, hl >= hr ? hl + 1 | 0 : hr + 1 | 0 ]; }; var singleton = function (x, d) { return /* Node */[ /* Empty */0, x, d, /* Empty */0, 1 ]; }; var bal = function (l, x, d, r) { var hl = l ? l[4] : 0; var hr = r ? r[4] : 0; if (hl > (hr + 2 | 0)) { if (l) { var lr = l[3]; var ld = l[2]; var lv = l[1]; var ll = l[0]; if (height(ll) >= height(lr)) { return create(ll, lv, ld, create(lr, x, d, r)); } else if (lr) { return create(create(ll, lv, ld, lr[0]), lr[1], lr[2], create(lr[3], x, d, r)); } else { throw [ Caml_builtin_exceptions.invalid_argument, "Map.bal" ]; } } else { throw [ Caml_builtin_exceptions.invalid_argument, "Map.bal" ]; } } else if (hr > (hl + 2 | 0)) { if (r) { var rr = r[3]; var rd = r[2]; var rv = r[1]; var rl = r[0]; if (height(rr) >= height(rl)) { return create(create(l, x, d, rl), rv, rd, rr); } else if (rl) { return create(create(l, x, d, rl[0]), rl[1], rl[2], create(rl[3], rv, rd, rr)); } else { throw [ Caml_builtin_exceptions.invalid_argument, "Map.bal" ]; } } else { throw [ Caml_builtin_exceptions.invalid_argument, "Map.bal" ]; } } else { return /* Node */[ l, x, d, r, hl >= hr ? hl + 1 | 0 : hr + 1 | 0 ]; } }; var is_empty = function (param) { if (param) { return false; } else { return true; } }; var add = function (x, data, param) { if (param) { var r = param[3]; var d = param[2]; var v = param[1]; var l = param[0]; var c = Curry._2(funarg[/* compare */0], x, v); if (c === 0) { return /* Node */[ l, x, data, r, param[4] ]; } else if (c < 0) { return bal(add(x, data, l), v, d, r); } else { return bal(l, v, d, add(x, data, r)); } } else { return /* Node */[ /* Empty */0, x, data, /* Empty */0, 1 ]; } }; var find = function (x, _param) { while(true) { var param = _param; if (param) { var c = Curry._2(funarg[/* compare */0], x, param[1]); if (c === 0) { return param[2]; } else { _param = c < 0 ? param[0] : param[3]; continue ; } } else { throw Caml_builtin_exceptions.not_found; } }; }; var mem = function (x, _param) { while(true) { var param = _param; if (param) { var c = Curry._2(funarg[/* compare */0], x, param[1]); if (c === 0) { return true; } else { _param = c < 0 ? param[0] : param[3]; continue ; } } else { return false; } }; }; var min_binding = function (_param) { while(true) { var param = _param; if (param) { var l = param[0]; if (l) { _param = l; continue ; } else { return /* tuple */[ param[1], param[2] ]; } } else { throw Caml_builtin_exceptions.not_found; } }; }; var max_binding = function (_param) { while(true) { var param = _param; if (param) { var r = param[3]; if (r) { _param = r; continue ; } else { return /* tuple */[ param[1], param[2] ]; } } else { throw Caml_builtin_exceptions.not_found; } }; }; var remove_min_binding = function (param) { if (param) { var l = param[0]; if (l) { return bal(remove_min_binding(l), param[1], param[2], param[3]); } else { return param[3]; } } else { throw [ Caml_builtin_exceptions.invalid_argument, "Map.remove_min_elt" ]; } }; var remove = function (x, param) { if (param) { var r = param[3]; var d = param[2]; var v = param[1]; var l = param[0]; var c = Curry._2(funarg[/* compare */0], x, v); if (c === 0) { var t1 = l; var t2 = r; if (t1) { if (t2) { var match = min_binding(t2); return bal(t1, match[0], match[1], remove_min_binding(t2)); } else { return t1; } } else { return t2; } } else if (c < 0) { return bal(remove(x, l), v, d, r); } else { return bal(l, v, d, remove(x, r)); } } else { return /* Empty */0; } }; var iter = function (f, _param) { while(true) { var param = _param; if (param) { iter(f, param[0]); Curry._2(f, param[1], param[2]); _param = param[3]; continue ; } else { return /* () */0; } }; }; var map = function (f, param) { if (param) { var l$prime = map(f, param[0]); var d$prime = Curry._1(f, param[2]); var r$prime = map(f, param[3]); return /* Node */[ l$prime, param[1], d$prime, r$prime, param[4] ]; } else { return /* Empty */0; } }; var mapi = function (f, param) { if (param) { var v = param[1]; var l$prime = mapi(f, param[0]); var d$prime = Curry._2(f, v, param[2]); var r$prime = mapi(f, param[3]); return /* Node */[ l$prime, v, d$prime, r$prime, param[4] ]; } else { return /* Empty */0; } }; var fold = function (f, _m, _accu) { while(true) { var accu = _accu; var m = _m; if (m) { _accu = Curry._3(f, m[1], m[2], fold(f, m[0], accu)); _m = m[3]; continue ; } else { return accu; } }; }; var for_all = function (p, _param) { while(true) { var param = _param; if (param) { if (Curry._2(p, param[1], param[2]) && for_all(p, param[0])) { _param = param[3]; continue ; } else { return false; } } else { return true; } }; }; var exists = function (p, _param) { while(true) { var param = _param; if (param) { if (Curry._2(p, param[1], param[2]) || exists(p, param[0])) { return true; } else { _param = param[3]; continue ; } } else { return false; } }; }; var add_min_binding = function (k, v, param) { if (param) { return bal(add_min_binding(k, v, param[0]), param[1], param[2], param[3]); } else { return singleton(k, v); } }; var add_max_binding = function (k, v, param) { if (param) { return bal(param[0], param[1], param[2], add_max_binding(k, v, param[3])); } else { return singleton(k, v); } }; var join = function (l, v, d, r) { if (l) { if (r) { var rh = r[4]; var lh = l[4]; if (lh > (rh + 2 | 0)) { return bal(l[0], l[1], l[2], join(l[3], v, d, r)); } else if (rh > (lh + 2 | 0)) { return bal(join(l, v, d, r[0]), r[1], r[2], r[3]); } else { return create(l, v, d, r); } } else { return add_max_binding(v, d, l); } } else { return add_min_binding(v, d, r); } }; var concat = function (t1, t2) { if (t1) { if (t2) { var match = min_binding(t2); return join(t1, match[0], match[1], remove_min_binding(t2)); } else { return t1; } } else { return t2; } }; var concat_or_join = function (t1, v, d, t2) { if (d !== undefined) { return join(t1, v, Caml_option.valFromOption(d), t2); } else { return concat(t1, t2); } }; var split = function (x, param) { if (param) { var r = param[3]; var d = param[2]; var v = param[1]; var l = param[0]; var c = Curry._2(funarg[/* compare */0], x, v); if (c === 0) { return /* tuple */[ l, Caml_option.some(d), r ]; } else if (c < 0) { var match = split(x, l); return /* tuple */[ match[0], match[1], join(match[2], v, d, r) ]; } else { var match$1 = split(x, r); return /* tuple */[ join(l, v, d, match$1[0]), match$1[1], match$1[2] ]; } } else { return /* tuple */[ /* Empty */0, undefined, /* Empty */0 ]; } }; var merge = function (f, s1, s2) { var exit = 0; if (s1) { var v1 = s1[1]; if (s1[4] >= height(s2)) { var match = split(v1, s2); return concat_or_join(merge(f, s1[0], match[0]), v1, Curry._3(f, v1, Caml_option.some(s1[2]), match[1]), merge(f, s1[3], match[2])); } else { exit = 1; } } else if (s2) { exit = 1; } else { return /* Empty */0; } if (exit === 1) { if (s2) { var v2 = s2[1]; var match$1 = split(v2, s1); return concat_or_join(merge(f, match$1[0], s2[0]), v2, Curry._3(f, v2, match$1[1], Caml_option.some(s2[2])), merge(f, match$1[2], s2[3])); } else { throw [ Caml_builtin_exceptions.assert_failure, /* tuple */[ "map.ml", 270, 10 ] ]; } } }; var filter = function (p, param) { if (param) { var d = param[2]; var v = param[1]; var l$prime = filter(p, param[0]); var pvd = Curry._2(p, v, d); var r$prime = filter(p, param[3]); if (pvd) { return join(l$prime, v, d, r$prime); } else { return concat(l$prime, r$prime); } } else { return /* Empty */0; } }; var partition = function (p, param) { if (param) { var d = param[2]; var v = param[1]; var match = partition(p, param[0]); var lf = match[1]; var lt = match[0]; var pvd = Curry._2(p, v, d); var match$1 = partition(p, param[3]); var rf = match$1[1]; var rt = match$1[0]; if (pvd) { return /* tuple */[ join(lt, v, d, rt), concat(lf, rf) ]; } else { return /* tuple */[ concat(lt, rt), join(lf, v, d, rf) ]; } } else { return /* tuple */[ /* Empty */0, /* Empty */0 ]; } }; var cons_enum = function (_m, _e) { while(true) { var e = _e; var m = _m; if (m) { _e = /* More */[ m[1], m[2], m[3], e ]; _m = m[0]; continue ; } else { return e; } }; }; var compare = function (cmp, m1, m2) { var _e1 = cons_enum(m1, /* End */0); var _e2 = cons_enum(m2, /* End */0); while(true) { var e2 = _e2; var e1 = _e1; if (e1) { if (e2) { var c = Curry._2(funarg[/* compare */0], e1[0], e2[0]); if (c !== 0) { return c; } else { var c$1 = Curry._2(cmp, e1[1], e2[1]); if (c$1 !== 0) { return c$1; } else { _e2 = cons_enum(e2[2], e2[3]); _e1 = cons_enum(e1[2], e1[3]); continue ; } } } else { return 1; } } else if (e2) { return -1; } else { return 0; } }; }; var equal = function (cmp, m1, m2) { var _e1 = cons_enum(m1, /* End */0); var _e2 = cons_enum(m2, /* End */0); while(true) { var e2 = _e2; var e1 = _e1; if (e1) { if (e2 && Curry._2(funarg[/* compare */0], e1[0], e2[0]) === 0 && Curry._2(cmp, e1[1], e2[1])) { _e2 = cons_enum(e2[2], e2[3]); _e1 = cons_enum(e1[2], e1[3]); continue ; } else { return false; } } else if (e2) { return false; } else { return true; } }; }; var cardinal = function (param) { if (param) { return (cardinal(param[0]) + 1 | 0) + cardinal(param[3]) | 0; } else { return 0; } }; var bindings_aux = function (_accu, _param) { while(true) { var param = _param; var accu = _accu; if (param) { _param = param[0]; _accu = /* :: */[ /* tuple */[ param[1], param[2] ], bindings_aux(accu, param[3]) ]; continue ; } else { return accu; } }; }; var bindings = function (s) { return bindings_aux(/* [] */0, s); }; return [ /* Empty */0, is_empty, mem, add, singleton, remove, merge, compare, equal, iter, fold, for_all, exists, filter, partition, cardinal, bindings, min_binding, max_binding, min_binding, split, find, map, mapi ]; } exports.Make = Make; /* No side effect */