|
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 | } |