type ('a, 'b) t
val create : max_size:int -> init_size:int -> timeout_ms:int64 option -> ('a, 'b) t
val add : ('a, 'b) t -> 'a -> 'b -> unit
val remove : ('a, 'b) t -> 'a -> unit
val evict_timed_out : ('a, 'b) t -> unit
val find_opt : ('a, 'b) t -> 'a -> 'b option
val find_opt2 : ('a, 'b) t -> ('b, 'c) t -> 'a -> ('b * 'c) option
val find_opt3 : ('a, 'b) t -> ('b, 'c) t -> ('c, 'd) t -> 'a -> ('b * 'c * 'd) option
val find : ('a, 'b) t -> 'a -> 'b
val update_timestamp : ('a, 'b) t -> 'a -> unit
val of_alist : timeout_ms:int64 option -> max_size:int -> ('a * 'b) list -> ('a, 'b) t
val add_bidirectional_mapping : ('a, 'b) t -> ('b, 'a) t -> 'a -> 'b -> unit