Add hooks to re-initialize hconsed modules.
[SXSI/xpathcomp.git] / src / ptset.ml
index bb58049..9f9185c 100644 (file)
@@ -57,6 +57,7 @@ sig
   val make : data -> t
   val node : t -> data
   val stats : unit -> unit
+  val init : unit -> unit
 end
 
 module Make ( H : Hcons.SA ) : S with type elt = H.t =
@@ -89,6 +90,7 @@ struct
   type data = Data.t
   type t = Node.t
   let stats = Node.stats
+  let init = Node.init
   let hash = Node.hash
   let uid = Node.uid
   let make = Node.make
@@ -313,22 +315,22 @@ struct
     then empty
     else
       match (Node.node s1,Node.node s2) with
-       | Empty, _ -> empty
-       | _, Empty -> s1
-       | Leaf k1, _ -> if mem k1 s2 then empty else s1
-       | _, Leaf k2 -> remove k2 s1
-       | Branch (p1,m1,l1,r1), Branch (p2,m2,l2,r2) ->
-           if m1 == m2 && p1 == p2 then
-             merge (diff l1 l2) (diff r1 r2)
-           else if m1 > m2 && match_prefix p2 p1 m1 then
-             if zero_bit p2 m1 then
-               merge (diff l1 s2) r1
-             else
-               merge l1 (diff r1 s2)
-           else if m1 < m2 && match_prefix p1 p2 m2 then
-             if zero_bit p1 m2 then diff s1 l2 else diff s1 r2
-           else
-         s1
+      | Empty, _ -> empty
+      | _, Empty -> s1
+      | Leaf k1, _ -> if mem k1 s2 then empty else s1
+      | _, Leaf k2 -> remove k2 s1
+      | Branch (p1,m1,l1,r1), Branch (p2,m2,l2,r2) ->
+        if m1 == m2 && p1 == p2 then
+          merge (diff l1 l2) (diff r1 r2)
+        else if m1 > m2 && match_prefix p2 p1 m1 then
+          if zero_bit p2 m1 then
+            merge (diff l1 s2) r1
+          else
+            merge l1 (diff r1 s2)
+        else if m1 < m2 && match_prefix p1 p2 m2 then
+          if zero_bit p1 m2 then diff s1 l2 else diff s1 r2
+        else
+          s1
 
 
 (*s All the following operations ([cardinal], [iter], [fold], [for_all],
@@ -432,6 +434,7 @@ struct
                        external make : t -> int = "%identity"
                        external node : t -> int = "%identity"
                        external stats : unit -> unit = "%identity"
+                        external init : unit -> unit = "%identity"
                 end
               )
   let print ppf s =