@jbrowse/core
Version:
JBrowse 2 core libraries used by plugins
64 lines (63 loc) • 1.54 kB
JavaScript
export function isRangeClear(intervals, left, right) {
const len = intervals.length;
if (len === 0) {
return true;
}
if (len < 40) {
for (let i = 0; i < len; i += 2) {
if (intervals[i + 1] > left && intervals[i] < right) {
return false;
}
}
return true;
}
let low = 0;
let high = len >> 1;
while (low < high) {
const mid = (low + high) >>> 1;
const midIdx = mid << 1;
if (intervals[midIdx + 1] <= left) {
low = mid + 1;
}
else {
high = mid;
}
}
const idx = low << 1;
if (idx >= len) {
return true;
}
return intervals[idx] >= right;
}
export function findInsertionPoint(intervals, left) {
const len = intervals.length;
if (len < 40) {
for (let i = 0; i < len; i += 2) {
if (left < intervals[i]) {
return i;
}
}
return len;
}
let low = 0;
let high = len >> 1;
while (low < high) {
const mid = (low + high) >>> 1;
if (intervals[mid << 1] < left) {
low = mid + 1;
}
else {
high = mid;
}
}
return low << 1;
}
export function insertInterval(intervals, idx, left, right) {
const len = intervals.length;
intervals.push(0, 0);
for (let i = len + 1; i > idx + 1; i--) {
intervals[i] = intervals[i - 2];
}
intervals[idx] = left;
intervals[idx + 1] = right;
}