move sortedIndex out of observable as other code will want to use it too

This commit is contained in:
Bruno Windels 2019-03-08 20:04:28 +01:00
parent 95bef00054
commit 6940e14b18
2 changed files with 27 additions and 30 deletions

View File

@ -1,5 +1,5 @@
import BaseObservableList from "./BaseObservableList.js";
import sortedIndex from "../../utils/sortedIndex";
/*
@ -25,35 +25,6 @@ so key -> Map<key,value> -> value -> node -> *parentNode -> rootNode
with a node containing {value, leftCount, rightCount, leftNode, rightNode, parentNode}
*/
/**
* @license
* Based off baseSortedIndex function in Lodash <https://lodash.com/>
* Copyright JS Foundation and other contributors <https://js.foundation/>
* Released under MIT license <https://lodash.com/license>
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
*/
function sortedIndex(array, value, comparator) {
let low = 0;
let high = array.length;
while (low < high) {
let mid = (low + high) >>> 1;
let cmpResult = comparator(value, array[mid]);
if (cmpResult > 0) {
low = mid + 1;
} else if (cmpResult < 0) {
high = mid;
} else {
low = high = mid;
}
}
return high;
}
// does not assume whether or not the values are reference
// types modified outside of the collection (and affecting sort order) or not

26
src/utils/sortedIndex.js Normal file
View File

@ -0,0 +1,26 @@
/**
* @license
* Based off baseSortedIndex function in Lodash <https://lodash.com/>
* Copyright JS Foundation and other contributors <https://js.foundation/>
* Released under MIT license <https://lodash.com/license>
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
*/
export default function sortedIndex(array, value, comparator) {
let low = 0;
let high = array.length;
while (low < high) {
let mid = (low + high) >>> 1;
let cmpResult = comparator(value, array[mid]);
if (cmpResult > 0) {
low = mid + 1;
} else if (cmpResult < 0) {
high = mid;
} else {
low = high = mid;
}
}
return high;
}