-
Notifications
You must be signed in to change notification settings - Fork 26
/
Copy pathsearch-bounds.js
68 lines (60 loc) · 1.79 KB
/
search-bounds.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
"use strict"
// (a, y, c, l, h) = (array, y[, cmp, lo, hi])
function ge(a, y, c, l, h) {
var i = h + 1;
while (l <= h) {
var m = (l + h) >>> 1, x = a[m];
var p = (c !== undefined) ? c(x, y) : (x - y);
if (p >= 0) { i = m; h = m - 1 } else { l = m + 1 }
}
return i;
};
function gt(a, y, c, l, h) {
var i = h + 1;
while (l <= h) {
var m = (l + h) >>> 1, x = a[m];
var p = (c !== undefined) ? c(x, y) : (x - y);
if (p > 0) { i = m; h = m - 1 } else { l = m + 1 }
}
return i;
};
function lt(a, y, c, l, h) {
var i = l - 1;
while (l <= h) {
var m = (l + h) >>> 1, x = a[m];
var p = (c !== undefined) ? c(x, y) : (x - y);
if (p < 0) { i = m; l = m + 1 } else { h = m - 1 }
}
return i;
};
function le(a, y, c, l, h) {
var i = l - 1;
while (l <= h) {
var m = (l + h) >>> 1, x = a[m];
var p = (c !== undefined) ? c(x, y) : (x - y);
if (p <= 0) { i = m; l = m + 1 } else { h = m - 1 }
}
return i;
};
function eq(a, y, c, l, h) {
while (l <= h) {
var m = (l + h) >>> 1, x = a[m];
var p = (c !== undefined) ? c(x, y) : (x - y);
if (p === 0) { return m }
if (p <= 0) { l = m + 1 } else { h = m - 1 }
}
return -1;
};
function norm(a, y, c, l, h, f) {
if (typeof c === 'function') {
return f(a, y, c, (l === undefined) ? 0 : l | 0, (h === undefined) ? a.length - 1 : h | 0);
}
return f(a, y, undefined, (c === undefined) ? 0 : c | 0, (l === undefined) ? a.length - 1 : l | 0);
}
module.exports = {
ge: function(a, y, c, l, h) { return norm(a, y, c, l, h, ge)},
gt: function(a, y, c, l, h) { return norm(a, y, c, l, h, gt)},
lt: function(a, y, c, l, h) { return norm(a, y, c, l, h, lt)},
le: function(a, y, c, l, h) { return norm(a, y, c, l, h, le)},
eq: function(a, y, c, l, h) { return norm(a, y, c, l, h, eq)}
}