Module Hash_gen

type bucket('a, 'b) =
  1. | Empty
  2. | Cons of {
    1. mutable key: 'a,
    2. mutable data: 'b,
    3. mutable next: bucket('a, 'b),
    }
;
type t('a, 'b) = {
  1. mutable size: int,
  2. mutable data: array(bucket('a, 'b)),
  3. initial_size: int,
};
let power_2_above: int => int => int;
(power_2_above 16 63 = 64)
  (power_2_above 16 76 = 128)
let create: int => t('a, 'b);
let clear: t('a, 'b) => unit;
let reset: t('a, 'b) => unit;
let length: t('a, 'b) => int;
let resize: (t('a, 'b) => 'c => int) => t('a, 'b) => unit;
let iter: t('a, 'b) => ('c => 'd => 'e) => unit;
let fold: t('a, 'b) => 'c => ('d => 'e => 'f => 'g) => 'h;
let to_list: t('a, 'b) => ('c => 'd => 'e) => list('f);
let small_bucket_mem: bucket('a, 'b) => ('c => 'd => bool) => 'e => bool;
let small_bucket_opt: ('a => 'b => bool) => 'c => bucket('d, 'e) => option('f);
let small_bucket_key_opt: ('a => 'b => bool) => 'c => bucket('d, 'e) => option('f);
let small_bucket_default: ('a => 'b => bool) => 'c => 'd => bucket('e, 'f) => 'g;
let remove_bucket: t('a, 'b) => int => 'c => prec:bucket('d, 'e) => bucket('f, 'g) => ('h => 'i => bool) => unit;
let replace_bucket: 'a => 'b => bucket('c, 'd) => ('e => 'f => bool) => bool;
module type S = { ... };