Temporary commit
[SXSI/xpathcomp.git] / src / tree.ml
index 9c6eff3..9b3d4bc 100644 (file)
@@ -170,10 +170,22 @@ end
 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;