Merge branch 'handle-stdout'
[SXSI/xpathcomp.git] / src / IntArray.ml
1 type t = {
2   mutable data : int array;
3   mutable length : int;
4   mutable capacity : int;
5 }
6
7
8 let length a = a.length
9
10 let create () =
11   { data = Array.create 512 0;
12     length = 0;
13     capacity = 512
14   }
15
16 let resize a =
17   let ncap = a.capacity lsl 1 in
18   let b = Array.create ncap 0 in
19   for i = 0 to a.capacity - 1 do
20     b.(i) <- a.data.(i)
21   done;
22   a.data <- b;
23   a.capacity <- ncap
24
25 let get a i =
26   if i >= 0 && i < a.length then a.data.(i)
27   else failwith "Invalid array access"
28
29 let set a i v =
30   if i >= 0 && i < a.length then a.data.(i) <- v
31   else failwith "Invalid array access"
32
33 let unsafe_get a i = a.data.(i)
34 let unsafe_set a i v = a.data.(i) <- v
35
36
37 let push_back a v =
38   if a.length >= a.capacity then resize a;
39   a.data.(a.length) <- v;
40   a.length <- a.length + 1
41
42 let pack a =
43   let b = Array.create a.length 0 in
44   Array.blit a.data 0 b 0 a.length;
45   b