Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Page
Library
Module
Module type
Parameter
Class
Class type
Source
table.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
open Js type nonrec 'a t = < > t let obj = Unsafe.global##._Object let create () : 'a t = new%js obj let add (t : 'a t) (k : string) (v : 'a) = Unsafe.set t (string k) v let add_list (t : 'a t) (l : (string * 'a) list) = List.iter (fun (k, v) -> add t k v) l let add_listf (t : 'b t) (f : ('a -> 'b)) (l : (string * 'a) list) = List.iter (fun (k, v) -> add t k (f v)) l let make (l : (string * 'a) list) : 'a t = let t = create () in add_list t l; t let makef (f : ('a -> 'b)) (l : (string * 'a) list) : 'b t = let t = create () in add_listf t f l; t let remove (t : 'a t) (k : string) = Unsafe.delete t (string k) let find (t : 'a t) (k : string) : 'a option = Optdef.to_option (Unsafe.get t (string k)) let keys (t : 'a t) : string list = to_listf to_string @@ obj##keys t let items (t : 'a t) : (string * 'a) list = to_listf (fun k -> to_string k, Unsafe.get t k) @@ obj##keys t let itemsf (f : ('a -> 'b)) (t : 'a t) : (string * 'b) list = to_listf (fun k -> to_string k, f @@ Unsafe.get t k) @@ obj##keys t let length (t : 'a t) = (obj##keys t)##.length let merge (l : 'a t list) : 'a t = let t = create () in List.iter (fun x -> List.iter (fun (k, v) -> add t k v) (items x)) l; t