cherry pick from local- branch
[SXSI/xpathcomp.git] / finiteCofinite.ml
index 29ce60c..dc924cb 100644 (file)
@@ -40,7 +40,7 @@ sig
   val choose : t -> elt
   val hash : t -> int
   val equal : t -> t -> bool
-  val uid : t -> int
+  val uid : t -> Uid.t
   val positive : t -> set
   val negative : t -> set
   val inj_positive : set -> t
@@ -54,15 +54,15 @@ struct
   type node = Finite of E.t | CoFinite of E.t
   type set = E.t
   module Node = Hcons.Make(struct 
-                                 type t = node
-                                 let equal a b = 
-                                   match a,b with
-                                      (Finite(s1),Finite(s2))
-                                     | (CoFinite(s1),CoFinite(s2)) -> E.equal s1 s2
-                                     | _ -> false
-                                 let hash = function
-                                   Finite (s) -> HASHINT2(PRIME2,E.hash s)
-                                 | CoFinite(s) -> HASHINT2(PRIME7,E.hash s)
+                            type t = node
+                            let equal a b = 
+                              match a,b with
+                                 (Finite(s1),Finite(s2))
+                                | (CoFinite(s1),CoFinite(s2)) -> E.equal s1 s2
+                                | _ -> false
+                            let hash = function
+                              Finite (s) -> (E.hash s) lsl 1
+                            | CoFinite(s) -> ((E.hash s) lsl 1 ) lor 1
                           end)
   type t = Node.t
   let empty = Node.make (Finite E.empty)
@@ -90,9 +90,11 @@ struct
     | CoFinite s -> not (E.mem x s)
 
   let singleton x = finite (E.singleton x)
+
   let add e t = match t.Node.node with
     | Finite s -> finite (E.add e s)
     | CoFinite s -> cofinite (E.remove e s)
+
   let remove e t = match t.Node.node with
     | Finite s -> finite (E.remove e s)
     | CoFinite s -> cofinite (E.add e s)