Created
April 16, 2016 20:59
-
-
Save bobzhang/644ec90fe2d5e77abdc4717313f6eda5 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Generated CODE, PLEASE EDIT WITH CARE | |
'use strict'; | |
var invalid_argument = /* tuple */[ | |
248, | |
"Invalid_argument", | |
-3 | |
]; | |
var not_found = /* tuple */[ | |
248, | |
"Not_found", | |
-6 | |
]; | |
function height(param) { | |
if (param) { | |
return param[4]; | |
} | |
else { | |
return 0; | |
} | |
} | |
function create(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 | |
]; | |
} | |
function bal(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 [ | |
invalid_argument, | |
"Map.bal" | |
]; | |
} | |
} | |
else { | |
throw [ | |
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 [ | |
invalid_argument, | |
"Map.bal" | |
]; | |
} | |
} | |
else { | |
throw [ | |
invalid_argument, | |
"Map.bal" | |
]; | |
} | |
} | |
else { | |
return /* Node */[ | |
l, | |
x, | |
d, | |
r, | |
hl >= hr ? hl + 1 | 0 : hr + 1 | 0 | |
]; | |
} | |
} | |
function add(x, data, param) { | |
if (param) { | |
var r = param[3]; | |
var d = param[2]; | |
var v = param[1]; | |
var l = param[0]; | |
var c = x - v | 0; | |
if (c) { | |
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 */[ | |
l, | |
x, | |
data, | |
r, | |
param[4] | |
]; | |
} | |
} | |
else { | |
return /* Node */[ | |
/* Empty */0, | |
x, | |
data, | |
/* Empty */0, | |
1 | |
]; | |
} | |
} | |
function find(x, _param) { | |
while(true) { | |
var param = _param; | |
if (param) { | |
var c = x - param[1] | 0; | |
if (c) { | |
_param = c < 0 ? param[0] : param[3]; | |
continue ; | |
} | |
else { | |
return param[2]; | |
} | |
} | |
else { | |
throw not_found; | |
} | |
}; | |
} | |
function test() { | |
var m = /* Empty */0; | |
for(var i = 0; i<= 1000000; ++i){ | |
m = add(i, i, m); | |
} | |
for(var i$1 = 0; i$1<= 1000000; ++i$1){ | |
find(i$1, m); | |
} | |
return /* () */0; | |
} | |
test(/* () */0); | |
/* Not a pure module */ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment