X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=ptset.ml;h=584ea0aef5a310b010230a8fbbab79550194001b;hb=3445f7f08f15fe41e0d1bfaaabaacf60cdc10b61;hp=7a326021c6abfe5577e6bb39d8b52c36fc739170;hpb=b8aa8e7f1036cf00d0fadc75ccbe0264bae6c1b2;p=SXSI%2Fxpathcomp.git diff --git a/ptset.ml b/ptset.ml index 7a32602..584ea0a 100644 --- a/ptset.ml +++ b/ptset.ml @@ -21,7 +21,7 @@ sig val node : t -> data end -module Make ( H : Hcons.S ) : S with type elt = H.t = +module Make ( H : Hcons.SA ) : S with type elt = H.t = struct type elt = H.t type 'a node = @@ -36,7 +36,7 @@ struct let equal x y = match x,y with | Empty,Empty -> true - | Leaf k1, Leaf k2 -> H.equal k1 k2 + | Leaf k1, Leaf k2 -> k1 == k2 | Branch(b1,i1,l1,r1),Branch(b2,i2,l2,r2) -> b1 == b2 && i1 == i2 && (HNode.equal l1 l2) && @@ -44,8 +44,8 @@ struct | _ -> false let hash = function | Empty -> 0 - | Leaf i -> HASHINT2(HALF_MAX_INT,H.hash i) - | Branch (b,i,l,r) -> HASHINT4(b,i,HNode.hash l, HNode.hash r) + | Leaf i -> HASHINT2(HALF_MAX_INT,H.uid i) + | Branch (b,i,l,r) -> HASHINT4(b,i,HNode.uid l, HNode.uid r) end ;; @@ -82,7 +82,7 @@ struct let kid = H.uid k in let rec loop n = match HNode.node n with | Empty -> false - | Leaf j -> H.equal k j + | Leaf j -> k == j | Branch (p, _, l, r) -> if kid <= p then loop l else loop r in loop n @@ -145,7 +145,7 @@ END let kid = H.uid k in let rec ins n = match HNode.node n with | Empty -> leaf k - | Leaf j -> if H.equal j k then n else join kid (leaf k) (H.uid j) n + | Leaf j -> if j == k then n else join kid (leaf k) (H.uid j) n | Branch (p,m,t0,t1) -> if match_prefix kid p m then if zero_bit kid m then @@ -161,7 +161,7 @@ END let kid = H.uid k in let rec rmv n = match HNode.node n with | Empty -> empty - | Leaf j -> if H.equal k j then empty else n + | Leaf j -> if k == j then empty else n | Branch (p,m,t0,t1) -> if match_prefix kid p m then if zero_bit kid m then @@ -377,15 +377,25 @@ let from_list l = List.fold_left (fun acc e -> add e acc) empty l end -module Int : S with type elt = int - = - Make ( struct type t = int - type data = t - external hash : t -> int = "%identity" - external uid : t -> int = "%identity" - let equal : t -> t -> bool = (==) - external make : t -> int = "%identity" - external node : t -> int = "%identity" - - end - ) +module Int : sig + include S with type elt = int + val print : Format.formatter -> t -> unit +end + = +struct + include Make ( struct type t = int + type data = t + external hash : t -> int = "%identity" + external uid : t -> int = "%identity" + let equal : t -> t -> bool = (==) + external make : t -> int = "%identity" + external node : t -> int = "%identity" + + end + ) + let print ppf s = + Format.pp_print_string ppf "{ "; + iter (fun i -> Format.fprintf ppf "%i " i) s; + Format.pp_print_string ppf "}"; + Format.pp_print_flush ppf () + end