| /** |
| Binary search on a sorted flat array of [start, end] pairs. |
| |
| @param {number[]} ranges - Flat array of inclusive [start, end] range pairs, e.g. [0, 5, 10, 20]. |
| @param {number} codePoint - The value to search for. |
| @returns {boolean} Whether the value falls within any of the ranges. |
| */ |
| export const isInRange = (ranges, codePoint) => { |
| let low = 0; |
| let high = Math.floor(ranges.length / 2) - 1; |
| while (low <= high) { |
| const mid = Math.floor((low + high) / 2); |
| const i = mid * 2; |
| if (codePoint < ranges[i]) { |
| high = mid - 1; |
| } else if (codePoint > ranges[i + 1]) { |
| low = mid + 1; |
| } else { |
| return true; |
| } |
| } |
| |
| return false; |
| }; |