X-Git-Url: http://git.nguyen.vg/gitweb/?p=tatoo.git;a=blobdiff_plain;f=src%2Fbitvector.ml;fp=src%2Fbitvector.ml;h=6a0152a179e8f40a787c778360e48e7ca47985f7;hp=73d2aeecff7c563cde85175bfbb21a694bf7f582;hb=c5480c3711c7431e70f78871c738f2d86ecb96ac;hpb=72818d02fb469c39a3d8043300152beae3e7e162 diff --git a/src/bitvector.ml b/src/bitvector.ml index 73d2aee..6a0152a 100644 --- a/src/bitvector.ml +++ b/src/bitvector.ml @@ -7,6 +7,11 @@ let create ?(init=false) size = 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 = @@ -16,7 +21,7 @@ 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])) @@ -25,7 +30,7 @@ let union v1 v2 = 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; @@ -33,10 +38,9 @@ let inter v1 v2 = 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