diff options
-rw-r--r-- | include/__bsearch.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/include/__bsearch.h b/include/__bsearch.h index d0dbf81..36dc6f3 100644 --- a/include/__bsearch.h +++ b/include/__bsearch.h @@ -21,6 +21,25 @@ return DEFAULT; \ } +#define __MLIB_DEFINE_BSEARCH_CONTAINS(TABLE) \ + static bool mlib_lookup_contains(rune ch) \ + { \ + ptrdiff_t i, lo, hi; \ + lo = 0; \ + hi = lengthof(TABLE) - 1; \ + i = (lo + hi) / 2; \ + do { \ + if (ch < TABLE[i].lo) \ + hi = i - 1; \ + else if (ch > TABLE[i].hi) \ + lo = i + 1; \ + else \ + return true; \ + i = (lo + hi) / 2; \ + } while (lo <= hi); \ + return false; \ + } + // [[gnu::always_inline]] static TYPE // lookup(rune ch) // { |