X-Git-Url: http://git.nguyen.vg/gitweb/?p=tatoo.git;a=blobdiff_plain;f=src%2Fbitvector.ml;fp=src%2Fbitvector.ml;h=73d2aeecff7c563cde85175bfbb21a694bf7f582;hp=a44a58e91a77024daa624d39ffaa756287c02e84;hb=72818d02fb469c39a3d8043300152beae3e7e162;hpb=c7229e6e3c000938a74abeb52749f62a65c3bbfd diff --git a/src/bitvector.ml b/src/bitvector.ml index a44a58e..73d2aee 100644 --- a/src/bitvector.ml +++ b/src/bitvector.ml @@ -14,7 +14,34 @@ let unsafe_get v n = and j = n mod 8 in (((Char.code (String.unsafe_get v.bits i)) lsr j) land 1) == 1 +let union v1 v2 = + assert ( v1.length == v2.length ); + let res = create v1.length in + (* Format.printf "size %d@." (String.length res.bits);*) + for i = 0 to String.length v1.bits - 1 do + res.bits.[i] <- Char.chr ((Char.code v1.bits.[i]) lor (Char.code v2.bits.[i])) + done; + res +let inter v1 v2 = + assert ( v1.length == v2.length ); + let res = create v1.length in + for i = 0 to String.length v1.bits - 1 do + res.bits.[i] <- Char.chr ((Char.code v1.bits.[i]) land (Char.code v2.bits.[i])) + done; + res + +let diff v1 v2 = + assert ( v1.length == v2.length ); + let res = create v1.length in + for i = 0 to String.length v1.bits - 1 do + res.bits.[i] <- Char.chr (if (Char.code v1.bits.[i]) != ( (Char.code v2.bits.[i])) then 1 + else 0 ) + done; + res + + + let unsafe_set v n (b:bool) = let x : int = Obj.magic b in let i = n / 8