package hardcaml_verify

  1. Overview
  2. Docs

Source file is_one_hot.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
open Base
open Hardcaml

module Make (Comb : Comb.S) = struct
  open Comb

  type nonrec t =
    { no_bit_set : t
    ; one_bit_set : t
    ; many_bits_set : t
    }

  let create vec =
    let any_bit_set, many_bits_set =
      List.fold (bits_msb vec) ~init:(gnd, gnd) ~f:(fun (any_bit_set, overflow) bit ->
        any_bit_set |: bit, overflow |: (any_bit_set &: bit))
    in
    let no_bit_set = ~:any_bit_set in
    let one_bit_set = any_bit_set &: ~:many_bits_set in
    { no_bit_set; one_bit_set; many_bits_set }
  ;;
end
OCaml

Innovation. Community. Security.