bsearch.c - scc - simple c99 compiler
(HTM) git clone git://git.simple-cc.org/scc
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) Submodules
(DIR) README
(DIR) LICENSE
---
bsearch.c (525B)
---
1 #include <stdint.h>
2 #include <stdlib.h>
3
4 void *
5 bsearch(const void *key, const void *ary, size_t n, size_t size,
6 int (*cmp)(const void *, const void *))
7 {
8 int t;
9 size_t mid, low, high;
10 char *cur, *base = (char *) ary;
11
12 low = 0;
13 high = n - 1;
14 while (low <= high) {
15 mid = low + (high - low) / 2;
16 cur = base + mid*size;
17
18 if ((t = (*cmp)(key, cur)) == 0)
19 return cur;
20 else if (t > 0 && mid < SIZE_MAX)
21 low = mid + 1;
22 else if (t < 0 && mid > 0)
23 high = mid - 1;
24 else
25 break;
26 }
27
28 return NULL;
29 }