UNPKG

@jbrowse/core

Version:

JBrowse 2 core libraries used by plugins

64 lines (63 loc) 1.54 kB
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; }