在移植glib到wince環(huán)境時(shí),發(fā)現(xiàn)wince的c runtime library不包含很多庫(kù)函數(shù),諸如 bsearch() 半則搜索法,其用法有點(diǎn)像 std::bind2nd(),
費(fèi)了點(diǎn)時(shí)間將其刨了出來(lái),相信對(duì)有些人有用
1 void * bsearch(
2 const void *key,
3 const void *base0,
4 size_t nmemb,
5 size_t size,
6 int (*compar)(const void *, const void *)) {
7
8 const char *base = base0;
9 size_t lim;
10 int cmp;
11 const void *p;
12
13 for (lim = nmemb; lim != 0; lim >>= 1) {
14 p = base + (lim >> 1) * size;
15 cmp = (*compar)(key, p);
16 if (cmp == 0)
17 return ((void *)p);
18 if (cmp > 0) { /* key > p: move right */
19 base = (char *)p + size;
20 lim--;
21 } /* else move left */
22 }
23 return (NULL);
24 }