1234567891011121314151617181920212223242526272829303132 |
- #ifndef _LINUX_BSEARCH_H
- #define _LINUX_BSEARCH_H
- #include <linux/types.h>
- static __always_inline
- void *__inline_bsearch(const void *key, const void *base, size_t num, size_t size, cmp_func_t cmp)
- {
- const char *pivot;
- int result;
- while (num > 0) {
- pivot = base + (num >> 1) * size;
- result = cmp(key, pivot);
- if (result == 0)
- return (void *)pivot;
- if (result > 0) {
- base = pivot + size;
- num--;
- }
- num >>= 1;
- }
- return NULL;
- }
- extern void *bsearch(const void *key, const void *base, size_t num, size_t size, cmp_func_t cmp);
- #endif
|