bits = String.make (1 + size / 8) i
}
+let alloc size =
+ { length = size;
+ bits = String.create (1 + size / 8);
+ }
+
let length v = v.length
let unsafe_get v n =
let union v1 v2 =
assert ( v1.length == v2.length );
- let res = create v1.length in
+ let res = alloc 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]))
let inter v1 v2 =
assert ( v1.length == v2.length );
- let res = create v1.length in
+ let res = alloc 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;
let diff v1 v2 =
assert ( v1.length == v2.length );
- let res = create v1.length in
+ let res = alloc 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 )
+ res.bits.[i] <- Char.chr ((Char.code v1.bits.[i]) land (lnot (Char.code v2.bits.[i])))
done;
res