d3-jsnext
Version:
d3, but futuristic
50 lines (45 loc) • 1.1 kB
JavaScript
import { d3_ascending } from './ascending';
var d3$bisector;
var d3$bisect;
var d3$bisectRight;
var d3$bisectLeft;
function d3_bisector(compare) {
return {
left: function(a, x, lo, hi) {
if (arguments.length < 3) lo = 0;
if (arguments.length < 4) hi = a.length;
while (lo < hi) {
var mid = lo + hi >>> 1;
if (compare(a[mid], x) < 0) lo = mid + 1;
else hi = mid;
}
return lo;
},
right: function(a, x, lo, hi) {
if (arguments.length < 3) lo = 0;
if (arguments.length < 4) hi = a.length;
while (lo < hi) {
var mid = lo + hi >>> 1;
if (compare(a[mid], x) > 0) hi = mid;
else lo = mid + 1;
}
return lo;
}
};
}
var d3_bisect = d3_bisector(d3_ascending);
d3$bisectLeft = d3_bisect.left;
d3$bisect = d3$bisectRight = d3_bisect.right;
d3$bisector = function(f) {
return d3_bisector(f.length === 1
? function(d, x) { return d3_ascending(f(d), x); }
: f);
};
export {
d3$bisector,
d3$bisect,
d3$bisectRight,
d3$bisectLeft,
d3_bisect,
d3_bisector
};