Merge branch 'handle-stdout'
[SXSI/xpathcomp.git] / src / bp.ml
1 type cbitmap
2
3 external cbitmap_create : int -> cbitmap = "caml_bitmap_create"
4 external cbitmap_setbit : cbitmap -> int -> int -> unit = "caml_bitmap_setbit"
5 external cbitmap_resize : cbitmap -> int -> cbitmap = "caml_bitmap_resize"
6
7
8 type bitmap = { mutable data : cbitmap;
9                 mutable size : int;
10                 mutable capacity : int; (* in bits *)
11               }
12 let bitmap_increment = 4096
13
14 let bitmap_create () =
15   {
16     data = cbitmap_create bitmap_increment;
17     size = 0;
18     capacity = bitmap_increment;
19   }
20
21 let bitmap_push_back b i =
22   if b.size >= b.capacity then begin
23     let ncap = b.capacity + bitmap_increment in
24     b.data <- cbitmap_resize b.data ncap;
25     b.capacity <- ncap;
26   end;
27   cbitmap_setbit b.data b.size i;
28   b.size <- b.size + 1
29
30
31 type t
32 external bp_construct : cbitmap -> int -> t = "caml_bp_construct"
33 external alloc_stats : unit -> int = "caml_bp_alloc_stats"
34 external save : t -> Unix.file_descr -> unit = "caml_bp_save"
35 external load : Unix.file_descr -> t = "caml_bp_load"
36 external first_child : t -> int -> int = "caml_bp_first_child" "noalloc"
37 external next_sibling : t -> int -> int = "caml_bp_next_sibling" "noalloc"
38 external preorder_rank : t -> int -> int = "caml_bp_preorder_rank" "noalloc"
39
40 let create bm = bp_construct bm.data bm.size