UNPKG

@abaplint/runtime

Version:
74 lines 2.41 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.binarySearchFromRow = binarySearchFromRow; exports.binarySearchFrom = binarySearchFrom; exports.binarySearchTo = binarySearchTo; /* eslint-disable max-len */ const compare_1 = require("./compare"); const types_1 = require("./types"); /** input indexes = javascript indexes, output index = javascript index */ function binarySearchFromRow(array, left, right, keyField, keyValue, usesTableLine) { if (right <= 0) { return 0; } // console.dir("start: " + left + ", " + right); const isStructured = array[0] instanceof types_1.Structure; while (right - left > 1) { const middle = Math.floor(((right - left) / 2) + left); // console.dir(left + ", " + right + ", " + middle); const a = array[middle]; let row = undefined; if (usesTableLine === false && isStructured === true) { row = a.get(); } else { row = isStructured ? { table_line: a, ...a.get() } : { table_line: a }; } if ((0, compare_1.ge)(keyField(row), keyValue)) { right = middle; } else { left = middle; } // console.dir(left + ", " + right); } const a = array[left]; let row = undefined; if (usesTableLine === false && isStructured === true) { row = a.get(); } else { row = isStructured ? { table_line: a, ...a.get() } : { table_line: a }; } if ((0, compare_1.le)(keyValue, keyField(row))) { // console.dir("choose left"); return left; } return right; } function binarySearchFrom(array, left, right, keyField, keyValue) { while (right - left > 1) { const middle = Math.floor(((right - left) / 2) + left); if ((0, compare_1.ge)(array[middle].get()[keyField], keyValue)) { right = middle; } else { left = middle; } } return right; } function binarySearchTo(array, left, right, keyField, keyValue) { while (right - left > 1) { const middle = Math.floor(((right - left) / 2) + left); if ((0, compare_1.le)(array[middle].get()[keyField], keyValue)) { left = middle; } else { right = middle; } } return right; } //# sourceMappingURL=binary_search.js.map