// -*- c++ -*- #ifndef COSMOPOLITAN_LIBC_STR_HAS_CHAR_H_ #define COSMOPOLITAN_LIBC_STR_HAS_CHAR_H_ #ifdef __cplusplus template static bool has_char(const T (*ranges)[2], size_t n, T c) { unsigned l = 0; unsigned r = n; while (l < r) { unsigned m = (l & r) + ((l ^ r) >> 1); // floor((a+b)/2) if (c < ranges[m][0]) { r = m; } else if (c > ranges[m][1]) { l = m + 1; } else { return true; } } return false; } #endif /* __cplusplus */ #endif /* COSMOPOLITAN_LIBC_STR_HAS_CHAR_H_ */