mirror of
https://github.com/ocaml-tracing/ocaml-trace.git
synced 2026-03-11 04:58:36 -04:00
use opaque type
This commit is contained in:
parent
290ca992cc
commit
7601c3e62d
1 changed files with 10 additions and 10 deletions
|
|
@ -48,14 +48,14 @@ module M = Map.Make (struct
|
||||||
let compare (i : int) j = Stdlib.compare i j
|
let compare (i : int) j = Stdlib.compare i j
|
||||||
end)
|
end)
|
||||||
|
|
||||||
type t = exn_pair M.t
|
type t = { m: exn_pair M.t } [@@unboxed]
|
||||||
|
|
||||||
let empty = M.empty
|
let empty = M.empty
|
||||||
let[@inline] mem k (self : t) = M.mem (Key.id k) self
|
let[@inline] mem k (self : t) = M.mem (Key.id k) self.m
|
||||||
|
|
||||||
let find_exn (type a) (k : a Key.t) (self : t) : a =
|
let find_exn (type a) (k : a Key.t) (self : t) : a =
|
||||||
let module K = (val k) in
|
let module K = (val k) in
|
||||||
let (E_pair (_, e)) = M.find K.id self in
|
let (E_pair (_, e)) = M.find K.id self.m in
|
||||||
match e with
|
match e with
|
||||||
| K.Store v -> v
|
| K.Store v -> v
|
||||||
| _ -> assert false
|
| _ -> assert false
|
||||||
|
|
@ -63,14 +63,14 @@ let find_exn (type a) (k : a Key.t) (self : t) : a =
|
||||||
let find k (self : t) = try Some (find_exn k self) with Not_found -> None
|
let find k (self : t) = try Some (find_exn k self) with Not_found -> None
|
||||||
|
|
||||||
open struct
|
open struct
|
||||||
let add_e_pair_ p t =
|
let add_e_pair_ p self =
|
||||||
let (E_pair ((module K), _)) = p in
|
let (E_pair ((module K), _)) = p in
|
||||||
M.add K.id p t
|
{ m = M.add K.id p self.m }
|
||||||
|
|
||||||
let add_pair_ p (self : t) : t =
|
let add_pair_ p (self : t) : t =
|
||||||
let (B (((module K) as k), v)) = p in
|
let (B (((module K) as k), v)) = p in
|
||||||
let p = E_pair (k, K.Store v) in
|
let p = E_pair (k, K.Store v) in
|
||||||
M.add K.id p self
|
{ m = M.add K.id p self.m }
|
||||||
end
|
end
|
||||||
|
|
||||||
let add (type a) (k : a Key.t) v (self : t) : t =
|
let add (type a) (k : a Key.t) v (self : t) : t =
|
||||||
|
|
@ -79,13 +79,13 @@ let add (type a) (k : a Key.t) v (self : t) : t =
|
||||||
|
|
||||||
let remove (type a) (k : a Key.t) (self : t) : t =
|
let remove (type a) (k : a Key.t) (self : t) : t =
|
||||||
let module K = (val k) in
|
let module K = (val k) in
|
||||||
M.remove K.id self
|
{ m = M.remove K.id self.m }
|
||||||
|
|
||||||
let cardinal : t -> int = M.cardinal
|
let[@inline] cardinal (self : t) = M.cardinal self.m
|
||||||
let length = cardinal
|
let length = cardinal
|
||||||
let iter f (self : t) = M.iter (fun _ p -> f (pair_of_e_pair p)) self
|
let iter f (self : t) = M.iter (fun _ p -> f (pair_of_e_pair p)) self.m
|
||||||
|
|
||||||
let to_list (self : t) : binding list =
|
let to_list (self : t) : binding list =
|
||||||
M.fold (fun _ p l -> pair_of_e_pair p :: l) self []
|
M.fold (fun _ p l -> pair_of_e_pair p :: l) self.m []
|
||||||
|
|
||||||
let add_list (self : t) l = List.fold_right add_pair_ l self
|
let add_list (self : t) l = List.fold_right add_pair_ l self
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue