X-Git-Url: http://git.nguyen.vg/gitweb/?p=tatoo.git;a=blobdiff_plain;f=src%2Fptset.ml;h=9d415f81ca0396b37ca05d2a4f2380f24fd5c13a;hp=ee0370a12390e7c42e6c63e3571b51e524e5ecab;hb=9a127b83fbb1171ebd36e6f42780093412a5e91a;hpb=6b66008811639324be623a42037b60e02056772c diff --git a/src/ptset.ml b/src/ptset.ml index ee0370a..9d415f8 100644 --- a/src/ptset.ml +++ b/src/ptset.ml @@ -14,10 +14,6 @@ (* *) (***********************************************************************) -(* - Time-stamp: -*) - (* Modified by Kim Nguyen *) (* The Patricia trees are themselves deeply hash-consed. The module provides a Make (and Weak) functor to build hash-consed patricia @@ -26,10 +22,10 @@ INCLUDE "utils.ml" -include Sigs.PTSET +include Ptset_sig module type HConsBuilder = - functor (H : Sigs.AUX.HashedType) -> Hcons.S with type data = H.t + functor (H : Common_sig.HashedType) -> Hcons.S with type data = H.t module Builder (HCB : HConsBuilder) (H : Hcons.Abstract) : S with type elt = H.t = @@ -42,7 +38,7 @@ struct | Branch of int * int * 'a * 'a module rec Node : Hcons.S with type data = Data.t = HCB(Data) - and Data : Sigs.AUX.HashedType with type t = Node.t set = + and Data : Common_sig.HashedType with type t = Node.t set = struct type t = Node.t set let equal x y = @@ -52,7 +48,7 @@ struct | Branch(b1,i1,l1,r1), Branch(b2,i2,l2,r2) -> b1 == b2 && i1 == i2 && (Node.equal l1 l2) && (Node.equal r1 r2) - | _ -> false + | (Empty|Leaf _|Branch _), _ -> false let hash = function | Empty -> 0 @@ -84,8 +80,9 @@ struct let singleton k = leaf k let is_singleton n = - match Node.node n with Leaf _ -> true - | _ -> false + match Node.node n with + | Leaf _ -> true + | Branch _ | Empty -> false let mem (k:elt) n = let kid = Uid.to_int (H.uid k) in @@ -352,9 +349,9 @@ struct | Branch (p1,m1,l1,r1), Branch (p2,m2,l2,r2) -> if m1 == m2 && p1 == p2 then intersect l1 l2 || intersect r1 r2 - else if m1 < m2 && match_prefix p2 p1 m1 then + else if m1 > m2 && match_prefix p2 p1 m1 then intersect (if zero_bit p2 m1 then l1 else r1) s2 - else if m1 > m2 && match_prefix p1 p2 m2 then + else if m1 < m2 && match_prefix p1 p2 m2 then intersect s1 (if zero_bit p1 m2 then l2 else r2) else false