@abaplint/runtime
Version:
Transpiler - Runtime
74 lines • 2.41 kB
JavaScript
;
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