mirror of https://github.com/lukechilds/node.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
29 lines
601 B
29 lines
601 B
10 years ago
|
'use strict';
|
||
|
|
||
|
var toPosInt = require('../../number/to-pos-integer')
|
||
|
, callable = require('../../object/valid-callable')
|
||
|
, value = require('../../object/valid-value')
|
||
|
|
||
|
, floor = Math.floor;
|
||
|
|
||
|
module.exports = function (compareFn) {
|
||
|
var length, low, high, middle;
|
||
|
|
||
|
value(this);
|
||
|
callable(compareFn);
|
||
|
|
||
|
length = toPosInt(this.length);
|
||
|
low = 0;
|
||
|
high = length - 1;
|
||
|
|
||
|
while (low <= high) {
|
||
|
middle = floor((low + high) / 2);
|
||
|
if (compareFn(this[middle]) < 0) high = middle - 1;
|
||
|
else low = middle + 1;
|
||
|
}
|
||
|
|
||
|
if (high < 0) return 0;
|
||
|
if (high >= length) return length - 1;
|
||
|
return high;
|
||
|
};
|