1 let realloc l old_size new_size dummy =
2 let l' = Array.create new_size dummy in
3 for i = 0 to (min old_size new_size) - 1 do
10 type 'a t = { mutable line : 'a array;
15 line = Array.create 0 a;
22 Format.fprintf fmt "{ offset=%i;\n dummy=_;line=%a \n}\n%!"
24 (Pretty.print_array ~sep:", " (fun fmt x ->
26 Format.fprintf fmt "%s" "D"
28 Format.fprintf fmt "%s" "E")) a.line
31 if a.offset == ~-1 then a.offset <- i;
32 let offset = a.offset in
33 let len = Array.length a.line in
34 if i >= offset && i < offset + len then
35 a.line.(i - offset) <- v
37 if i < offset then begin (* bottom resize *)
38 let pad = offset - i in
39 let nlen = len + pad in
40 let narray = Array.create nlen a.dummy in
41 for j = 0 to len - 1 do
42 narray.(j+pad) <- a.line.(j)
47 end else begin (* top resize *)
48 (* preventively allocate the space for the following elements *)
49 let nlen = ((i - offset + 1) lsl 1) + 1 in
50 let narray = Array.create nlen a.dummy in
51 for j = 0 to len - 1 do
52 narray.(j) <- a.line.(j);
54 narray.(i - offset) <- v;
59 let offset = a.offset in
60 let len = Array.length a.line in
61 if i >= offset && i < offset + len then a.line.(i - offset)
68 if a.offset == ~-1 then () else
69 for i = 0 to Array.length line - 1 do
71 f (i+a.offset) v (v==a.dummy)
81 type 'a t = 'a Lvl1.t Lvl1.t
83 let dummy1 = Lvl1.create 0 a in
84 { Lvl1.line = Array.create n dummy1;
91 let line = Lvl1.find a i in
92 if line == a.Lvl1.dummy then
93 let nline = Lvl1.create 0 line.Lvl1.dummy in
101 let v = Lvl1.find a i in
102 if v == a.Lvl1.dummy then a.Lvl1.dummy.Lvl1.dummy
106 let dummy c = c.Lvl1.dummy.Lvl1.dummy
109 let line = a.Lvl1.line in
110 if a.Lvl1.offset == ~-1 then () else
111 for i = 0 to Array.length line - 1 do
112 Lvl1.iteri (f i) line.(i)
120 type 'a t = 'a Lvl2.t Lvl1.t
123 let dummy1 = Lvl2.create 512 a in
124 { Lvl1.line = Array.create n dummy1;
130 let line = Lvl1.find a i in
131 if line == a.Lvl1.dummy then
132 let nline = Lvl1.create 0 line.Lvl1.dummy in
139 let v = Lvl1.find a i in
140 if v == a.Lvl1.dummy then Lvl2.dummy a.Lvl1.dummy
144 let dummy a = Lvl2.dummy a.Lvl1.dummy
146 let line = a.Lvl1.line in
147 if a.Lvl1.offset == ~-1 then () else
148 for i = 0 to Array.length line - 1 do
149 Lvl2.iteri (f i) line.(i)