]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - include/linux/bsearch.h
Move c_src dirs back to toplevel
[bcachefs-tools-debian] / include / linux / bsearch.h
diff --git a/include/linux/bsearch.h b/include/linux/bsearch.h
new file mode 100644 (file)
index 0000000..e66b711
--- /dev/null
@@ -0,0 +1,32 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#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 /* _LINUX_BSEARCH_H */