1 | /* SPDX-License-Identifier: GPL-2.0 */ |
---|---|
2 | #ifndef _LINUX_BSEARCH_H |
3 | #define _LINUX_BSEARCH_H |
4 | |
5 | #include <linux/types.h> |
6 | |
7 | static __always_inline |
8 | void *__inline_bsearch(const void *key, const void *base, size_t num, size_t size, cmp_func_t cmp) |
9 | { |
10 | const char *pivot; |
11 | int result; |
12 | |
13 | while (num > 0) { |
14 | pivot = base + (num >> 1) * size; |
15 | result = cmp(key, pivot); |
16 | |
17 | if (result == 0) |
18 | return (void *)pivot; |
19 | |
20 | if (result > 0) { |
21 | base = pivot + size; |
22 | num--; |
23 | } |
24 | num >>= 1; |
25 | } |
26 | |
27 | return NULL; |
28 | } |
29 | |
30 | extern void *bsearch(const void *key, const void *base, size_t num, size_t size, cmp_func_t cmp); |
31 | |
32 | #endif /* _LINUX_BSEARCH_H */ |
33 |