diff options
author | Ondrej Bilka <neleai@seznam.cz> | 2013-02-11 23:18:09 +0100 |
---|---|---|
committer | Ondrej Bilka <neleai@seznam.cz> | 2013-02-11 23:18:09 +0100 |
commit | 41eda41d7489a428abb46202482136a540ec23dc (patch) | |
tree | b0adeba7c44ac543ba0085bb2f742c196e65348d /stdlib | |
parent | 8ded91fb377ad48c66e8b44929af7214f40f3557 (diff) | |
download | glibc-41eda41d7489a428abb46202482136a540ec23dc.tar.gz glibc-41eda41d7489a428abb46202482136a540ec23dc.tar.xz glibc-41eda41d7489a428abb46202482136a540ec23dc.zip |
Add inline bsearch expansion.
Diffstat (limited to 'stdlib')
-rw-r--r-- | stdlib/bsearch.c | 31 | ||||
-rw-r--r-- | stdlib/stdlib.h | 4 |
2 files changed, 7 insertions, 28 deletions
diff --git a/stdlib/bsearch.c b/stdlib/bsearch.c index 55b4f37527..4a357efeef 100644 --- a/stdlib/bsearch.c +++ b/stdlib/bsearch.c @@ -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) diff --git a/stdlib/stdlib.h b/stdlib/stdlib.h index b49a41cc5d..fa1175c028 100644 --- a/stdlib/stdlib.h +++ b/stdlib/stdlib.h @@ -756,6 +756,10 @@ extern void *bsearch (const void *__key, const void *__base, size_t __nmemb, size_t __size, __compar_fn_t __compar) __nonnull ((1, 2, 5)) __wur; +#ifdef __USE_EXTERN_INLINES +# include <bits/stdlib-bsearch.h> +#endif + /* Sort NMEMB elements of BASE, of SIZE bytes each, using COMPAR to perform the comparisons. */ extern void qsort (void *__base, size_t __nmemb, size_t __size, |