type bit_vector = string
external bool_of_int : int -> bool = "%identity"
+external int_of_bool : bool -> int = "%identity"
let bit_vector_unsafe_get v i =
bool_of_int
(((Char.code (String.unsafe_get v (i lsr 3))) lsr (i land 7)) land 1)
+let chr (c:int) : char = Obj.magic (c land 0xff)
+let bit_vector_unsafe_set v i b =
+ let j = i lsr 3 in
+ let c = Char.code v.[j] in
+ let bit = int_of_bool b in
+ let mask = bit lsl (i land 7) in
+ if b then v.[j] <- chr (c lor mask) else v.[j] <- (chr (c land (lnot mask)))
+
+let bit_vector_create n =
+ let len = if n <= 0 then 0 else (n - 1) / 8 + 1 in
+ String.make len '\000'
type t = {
doc : tree;