|
70 | void * bsearch
( register
const void *key, const
void *base0,
|
71 | size_t nmemb,
register size_t
size, |
72 | register int
(*compar)( const void
*, const void
*)) |
73 | { |
74 | register const
char *base = ( const char
*) base0; |
75 | register int
lim, cmp; |
76 | register const
void *p; |
77 | |
78 | for (lim = nmemb; lim != 0; lim >>= 1) {
|
79 | p = base + (lim >> 1) * size; |
80 | cmp = (*compar)(key, p); |
81 | if (cmp == 0)
|
82 | return ( void
*)p; |
83 | if (cmp > 0) {
/** key > p: move right */ |
84 | base = ( const char
*)p + size; |
85 | lim--; |
86 | } /** else move left */ |
87 | }
|
88 | return (NULL);
|
89 | } |