1 | import id from './_id';
|
2 | import cmp from './_cmp';
|
3 | import type {compareFn, mapFn} from './_types';
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 | function bsearchAny<T, U=T>(x: T[], v: T, fc: compareFn<T|U>=null, fm: mapFn<T, T|U>=null): number {
|
14 | var fc = fc||cmp, fm = fm||id;
|
15 | var v1 = fm(v, 0, null);
|
16 | for(var i=0, I=x.length; i<I;) {
|
17 | var m = i+I >>> 1;
|
18 | var u1 = fm(x[m], m, x);
|
19 | var c = fc(u1, v1);
|
20 | if(c<0) i = m+1;
|
21 | else if(c>0) I = m;
|
22 | else return m;
|
23 | }
|
24 | return ~i;
|
25 | }
|
26 | export default bsearchAny;
|