1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
type t =
{ map : Hmap.t
; id : string
}
type 'a key = 'a Hmap.key
let add key item ctx = { ctx with map = Hmap.add key item ctx.map }
let find key ctx = Hmap.find key ctx.map
let remove key ctx = { ctx with map = Hmap.rem key ctx.map }
let create_key = Hmap.Key.create
let id ctx = ctx.id
let sexp_of_t t = Sexplib.Std.sexp_of_string t.id
let create ?id () =
match id with
| Some id -> { map = Hmap.empty; id }
| None ->
let id = Random.bytes ~nr:32 |> List.to_seq |> String.of_seq in
{ map = Hmap.empty; id }
;;