text: #ifndef COSMOPOLITAN_LIBC_ALG_BISECT_H_
  #define COSMOPOLITAN_LIBC_ALG_BISECT_H_
  #if !(__ASSEMBLER__ + __LINKER__ + 0)
  COSMOPOLITAN_C_START_
  
  forceinline void *bisect(const void *k, const void *data, size_t n, size_t size,
                           int cmp(const void *a, const void *b, void *arg),
                           void *arg) {
    int c;
    const char *p;
    ssize_t m, l, r;
    if (n) {
      l = 0;
      r = n - 1;
      p = data;
      while (l <= r) {
        m = (l + r) >> 1;
        c = cmp(k, p + m * size, arg);
        if (c > 0) {
          l = m + 1;
        } else if (c < 0) {
          r = m - 1;
        } else {
          return (char *)p + m * size;
        }
      }
    }
    return NULL;
  }
  
  COSMOPOLITAN_C_END_
  #endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
  #endif /* COSMOPOLITAN_LIBC_ALG_BISECT_H_ */
  