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