MCPcopy Create free account
hub / github.com/GJDuck/e9patch / bsearch

Function bsearch

examples/stdlib.c:5077–5096  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5075/****************************************************************************/
5076
5077static void *bsearch(const void *key, const void *base0, size_t nmemb,
5078 size_t size, int (*compare)(const void *, const void *))
5079{
5080 if (nmemb == 0)
5081 return NULL;
5082 const uint8_t *base = (uint8_t *)base0;
5083 ssize_t lo = 0, hi = (ssize_t)nmemb-1;
5084 while (lo <= hi)
5085 {
5086 ssize_t mid = lo + (hi - lo) / 2;
5087 int cmp = compare(key, base + mid * size);
5088 if (cmp < 0)
5089 hi = mid - 1;
5090 else if (cmp > 0)
5091 lo = mid + 1;
5092 else
5093 return (void *)(base + mid * size);
5094 }
5095 return NULL;
5096}
5097
5098/*
5099 * This is an implementation of the POSIX tree-search (tsearch) family of

Callers 2

test_qsortFunction · 0.85
getTokenInfoFunction · 0.85

Calls 1

compareFunction · 0.70

Tested by 1

test_qsortFunction · 0.68