mirror of
https://sourceware.org/git/glibc.git
synced 2025-12-24 17:51:17 +03:00
Add inline bsearch expansion.
This commit is contained in:
@@ -17,32 +17,7 @@
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
|
||||
/* Perform a binary search for KEY in BASE which has NMEMB elements
|
||||
of SIZE bytes each. The comparisons are done by (*COMPAR)(). */
|
||||
void *
|
||||
bsearch (const void *key, const void *base, size_t nmemb, size_t size,
|
||||
int (*compar) (const void *, const void *))
|
||||
{
|
||||
size_t l, u, idx;
|
||||
const void *p;
|
||||
int comparison;
|
||||
|
||||
l = 0;
|
||||
u = nmemb;
|
||||
while (l < u)
|
||||
{
|
||||
idx = (l + u) / 2;
|
||||
p = (void *) (((const char *) base) + (idx * size));
|
||||
comparison = (*compar) (key, p);
|
||||
if (comparison < 0)
|
||||
u = idx;
|
||||
else if (comparison > 0)
|
||||
l = idx + 1;
|
||||
else
|
||||
return (void *) p;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#undef __extern_inline
|
||||
#define __extern_inline /* Empty, so we get a normal definition. */
|
||||
#include <bits/stdlib-bsearch.h>
|
||||
libc_hidden_def (bsearch)
|
||||
|
||||
Reference in New Issue
Block a user