xref: /plan9-contrib/sys/src/libc/port/runebsearch.c (revision eaba85aa6b158bdf68fdb77f770e3ba0899a8b5e)
1*eaba85aaSDavid du Colombier #include <u.h>
2*eaba85aaSDavid du Colombier #include <libc.h>
3*eaba85aaSDavid du Colombier 
4*eaba85aaSDavid du Colombier Rune*
_runebsearch(Rune c,Rune * t,int n,int ne)5*eaba85aaSDavid du Colombier _runebsearch(Rune c, Rune *t, int n, int ne)
6*eaba85aaSDavid du Colombier {
7*eaba85aaSDavid du Colombier 	Rune *p;
8*eaba85aaSDavid du Colombier 	int m;
9*eaba85aaSDavid du Colombier 
10*eaba85aaSDavid du Colombier 	while(n > 1) {
11*eaba85aaSDavid du Colombier 		m = n/2;
12*eaba85aaSDavid du Colombier 		p = t + m*ne;
13*eaba85aaSDavid du Colombier 		if(c >= p[0]) {
14*eaba85aaSDavid du Colombier 			t = p;
15*eaba85aaSDavid du Colombier 			n = n-m;
16*eaba85aaSDavid du Colombier 		} else
17*eaba85aaSDavid du Colombier 			n = m;
18*eaba85aaSDavid du Colombier 	}
19*eaba85aaSDavid du Colombier 	if(n && c >= t[0])
20*eaba85aaSDavid du Colombier 		return t;
21*eaba85aaSDavid du Colombier 	return 0;
22*eaba85aaSDavid du Colombier }
23