(* *)
(***********************************************************************)
-module type Abstract =
- sig
- type data
- type t
- val make : data -> t
- val node : t -> data
- val hash : t -> int
- val uid : t -> Uid.t
- val equal : t -> t -> bool
- val init : unit -> unit
- end
-
-type 'a node = { id : Uid.t;
- key : int;
- node : 'a }
-module type S =
-sig
- type data
- type t = private { id : Uid.t;
- key : int;
- node : data }
- include Abstract with type data := data and type t := t
-end
+include Hcons_sig
module type TableBuilder =
functor
- (H : Sigs.HashedType) ->
- Sigs.HashSet with type data = H.t
+ (H : Common_sig.HashedType) ->
+ Common_sig.HashSet with type data = H.t
-module Builder (TB : TableBuilder) (H : Sigs.HashedType) =
+module Builder (TB : TableBuilder) (H : Common_sig.HashedType) =
struct
type data = H.t
type t = { id : Uid.t;
- key : int;
+ hash : int;
node : data }
let uid_make = ref (Uid.make_maker())
let node t = t.node
let uid t = t.id
- let hash t = t.key
+ let hash t = t.hash
let equal t1 t2 = t1 == t2
module HN =
struct
let init () =
T.clear pool;
uid_make := Uid.make_maker ()
+ let dummy x = { id = Uid.dummy; hash = H.hash x; node = x }
let make x =
- let cell = { id = Uid.dummy; key = H.hash x; node = x } in
+ let cell = dummy x in
try
T.find pool cell
with
cell
end
-module Make = Builder (Utils.HashSet)
+module Make = Builder (Misc.HashSet)
module Weak = Builder (Weak.Make)
module PosInt =
let make v =
if v < 0 then raise (Invalid_argument "Hcons.PosInt.make")
else v
+
let node v = v
+
let hash v = v
+
let uid v = Uid.of_int v
+ let dummy _ = ~-1
let equal x y = x == y
+
let init () = ()
end