X-Git-Url: http://git.nguyen.vg/gitweb/?p=tatoo.git;a=blobdiff_plain;f=src%2Fhcons.ml;h=c95045889e6f339ecf93064a63acba92f23f74b4;hp=d421d03a30c2a5484e0bd821ebf61de75ba1e0ce;hb=aade6d9ba2e2b65e021de8a1c3a2d3874aa5742e;hpb=cba2938d929fd5119b1491686ddc224d5af618c6 diff --git a/src/hcons.ml b/src/hcons.ml index d421d03..c950458 100644 --- a/src/hcons.ml +++ b/src/hcons.ml @@ -13,45 +13,23 @@ (* *) (***********************************************************************) -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 @@ -66,9 +44,10 @@ 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 @@ -78,7 +57,7 @@ struct cell end -module Make = Builder (Utils.HashSet) +module Make = Builder (Misc.HashSet) module Weak = Builder (Weak.Make) module PosInt = @@ -88,9 +67,14 @@ struct 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