2 let realloc l old_size new_size dummy =
3 let l' = Array.create new_size dummy in
4 for i = 0 to (min old_size new_size) - 1 do
11 type 'a t = { mutable line : 'a array;
16 line = Array.create 0 a;
23 Format.fprintf fmt "{ offset=%i;\n dummy=_;line=%a \n}\n%!"
25 (Pretty.print_array ~sep:", " (fun fmt x ->
27 Format.fprintf fmt "%s" "D"
29 Format.fprintf fmt "%s" "E")) a.line
32 if a.offset == ~-1 then a.offset <- i;
33 let offset = a.offset in
34 let len = Array.length a.line in
35 if i >= offset && i < offset + len then
36 a.line.(i - offset) <- v
38 if i < offset then begin (* bottom resize *)
39 let pad = offset - i in
40 let nlen = len + pad in
41 let narray = Array.create nlen a.dummy in
42 for j = 0 to len - 1 do
43 narray.(j+pad) <- a.line.(j)
48 end else begin (* top resize *)
49 (* preventively allocate the space for the following elements *)
50 let nlen = ((i - offset + 1) lsl 1) + 1 in
51 let narray = Array.create nlen a.dummy in
52 for j = 0 to len - 1 do
53 narray.(j) <- a.line.(j);
55 narray.(i - offset) <- v;
60 let offset = a.offset in
61 let len = Array.length a.line in
62 if i >= offset && i < offset + len then a.line.(i - offset)
69 if a.offset == ~-1 then () else
70 for i = 0 to Array.length line - 1 do
72 f (i+a.offset) v (v==a.dummy)
82 type 'a t = 'a Lvl1.t Lvl1.t
84 let dummy1 = Lvl1.create 0 a in
85 { Lvl1.line = Array.create n dummy1;
92 let line = Lvl1.find a i in
93 if line == a.Lvl1.dummy then
94 let nline = Lvl1.create 0 line.Lvl1.dummy in
102 let v = Lvl1.find a i in
103 if v == a.Lvl1.dummy then a.Lvl1.dummy.Lvl1.dummy
107 let dummy c = c.Lvl1.dummy.Lvl1.dummy
110 let line = a.Lvl1.line in
111 if a.Lvl1.offset == ~-1 then () else
112 for i = 0 to Array.length line - 1 do
113 Lvl1.iteri (f i) line.(i)
121 type 'a t = 'a Lvl2.t Lvl1.t
124 let dummy1 = Lvl2.create 512 a in
125 { Lvl1.line = Array.create n dummy1;
131 let line = Lvl1.find a i in
132 if line == a.Lvl1.dummy then
133 let nline = { line with Lvl1.offset = ~-1 } in
134 Lvl2.add nline j k v;
140 let v = Lvl1.find a i in
141 if v == a.Lvl1.dummy then Lvl2.dummy a.Lvl1.dummy
145 let dummy a = Lvl2.dummy a.Lvl1.dummy
147 let line = a.Lvl1.line in
148 if a.Lvl1.offset == ~-1 then () else
149 for i = 0 to Array.length line - 1 do
150 Lvl2.iteri (f i) line.(i)