@react-native-firebase/app
Version:
A well tested, feature rich Firebase implementation for React Native, supporting iOS & Android. Individual module support for Admob, Analytics, Auth, Crash Reporting, Cloud Firestore, Database, Dynamic Links, Functions, Messaging (FCM), Remote Config, Sto
86 lines (80 loc) • 2.41 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getByKey = getByKey;
exports.getByKeyRange = getByKeyRange;
exports.getIndexByKey = getIndexByKey;
exports.getIndexByKeyGTE = getIndexByKeyGTE;
exports.getIndexByKeyRange = getIndexByKeyRange;
var _cmp = _interopRequireDefault(require("./cmp.js"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
/**
* Classic binary search implementation. Returns the index where the key
* should be inserted, assuming the records list is ordered.
*/
function binarySearch(records, key) {
let low = 0;
let high = records.length;
let mid;
while (low < high) {
mid = low + high >>> 1; // like Math.floor((low + high) / 2) but fast
if ((0, _cmp.default)(records[mid].key, key) < 0) {
low = mid + 1;
} else {
high = mid;
}
}
return low;
}
/**
* Equivalent to `records.findIndex(record => cmp(record.key, key) === 0)`
*/
function getIndexByKey(records, key) {
const idx = binarySearch(records, key);
const record = records[idx];
if (record && (0, _cmp.default)(record.key, key) === 0) {
return idx;
}
return -1;
}
/**
* Equivalent to `records.find(record => cmp(record.key, key) === 0)`
*/
function getByKey(records, key) {
const idx = getIndexByKey(records, key);
return records[idx];
}
/**
* Equivalent to `records.findIndex(record => key.includes(record.key))`
*/
function getIndexByKeyRange(records, keyRange) {
const lowerIdx = typeof keyRange.lower === 'undefined' ? 0 : binarySearch(records, keyRange.lower);
const upperIdx = typeof keyRange.upper === 'undefined' ? records.length - 1 : binarySearch(records, keyRange.upper);
for (let i = lowerIdx; i <= upperIdx; i++) {
const record = records[i];
if (record && keyRange.includes(record.key)) {
return i;
}
}
return -1;
}
/**
* Equivalent to `records.find(record => key.includes(record.key))`
*/
function getByKeyRange(records, keyRange) {
const idx = getIndexByKeyRange(records, keyRange);
return records[idx];
}
/**
* Equivalent to `records.findIndex(record => cmp(record.key, key) >= 0)`
*/
function getIndexByKeyGTE(records, key) {
const idx = binarySearch(records, key);
const record = records[idx];
if (record && (0, _cmp.default)(record.key, key) >= 0) {
return idx;
}
return -1;
}
//# sourceMappingURL=binarySearch.js.map