12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.translateOffset = translateOffset;
- let warned = false;
- function translateOffset(start, fromOffsets, toOffsets, fromLengths, toLengths = fromLengths) {
- const isSorted = fromOffsets.every((value, index) => index === 0 || fromOffsets[index - 1] <= value);
- if (!isSorted) {
- for (let i = 0; i < fromOffsets.length; i++) {
- const fromOffset = fromOffsets[i];
- const fromLength = fromLengths[i];
- if (start >= fromOffset && start <= fromOffset + fromLength) {
- const toLength = toLengths[i];
- const toOffset = toOffsets[i];
- let rangeOffset = Math.min(start - fromOffset, toLength);
- return toOffset + rangeOffset;
- }
- }
- if (!warned) {
- warned = true;
- console.warn('fromOffsets should be sorted in ascending order');
- }
- }
- let low = 0;
- let high = fromOffsets.length - 1;
- while (low <= high) {
- const mid = Math.floor((low + high) / 2);
- const fromOffset = fromOffsets[mid];
- const fromLength = fromLengths[mid];
- if (start >= fromOffset && start <= fromOffset + fromLength) {
- const toLength = toLengths[mid];
- const toOffset = toOffsets[mid];
- let rangeOffset = Math.min(start - fromOffset, toLength);
- return toOffset + rangeOffset;
- }
- else if (start < fromOffset) {
- high = mid - 1;
- }
- else {
- low = mid + 1;
- }
- }
- }
- //# sourceMappingURL=translateOffset.js.map
|