package timedesc

  1. Overview
  2. Docs

Source file bigarray_utils.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
(* Copied from containers *)
let bsearch ~cmp k a =
  let rec aux i j =
    if i > j then `Just_after j
    else
      let middle = i + ((j - i) / 2) in
      (* avoid overflow *)
      match cmp k a.{middle} with
      | 0 -> `At middle
      | n when n < 0 -> aux i (middle - 1)
      | _ -> aux (middle + 1) j
  in
  let n = Bigarray.Array1.dim a in
  if n = 0 then `Empty
  else
    match (cmp a.{0} k, cmp a.{n - 1} k) with
    | c, _ when c > 0 -> `All_bigger
    | _, c when c < 0 -> `All_lower
    | _ -> aux 0 (n - 1)
OCaml

Innovation. Community. Security.