val hash : t -> int
val uid : t -> Uid.t
val equal : t -> t -> bool
- end
+
+ val with_id : Uid.t -> t
+ end
module type S =
sig
+
type data
type t = private { id : Uid.t;
key : int;
val uid : t -> Uid.t
val equal : t -> t -> bool
+
+ val with_id : Uid.t -> t
end
module Make (H : Hashtbl.HashedType) : S with type data = H.t =
struct
+ let uid_make = Uid.make_maker()
type data = H.t
type t = { id : Uid.t;
key : int;
type _t = t
type t = _t
let hash = hash
- let equal a b = a==b || H.equal a.node b.node
+ let equal a b = a == b || H.equal a.node b.node
end)
let pool = WH.create MED_H_SIZE
let make x =
- let cell = { id = Uid.make(); key = H.hash x; node = x } in
+ let cell = { id = uid_make(); key = H.hash x; node = x } in
WH.merge pool cell
+
+ exception Found of t
+
+ let with_id id =
+ try
+ WH.iter (fun r -> if r.id == id then raise (Found r)) pool;
+ raise Not_found
+ with
+ | Found r -> r
+ | e -> raise e
+ ;;
+
end