3 let realloc l old_size new_size dummy =
4 let l' = Array.create new_size dummy in
5 for i = 0 to (min old_size new_size) - 1 do
12 type 'a t = { mutable line : 'a array;
17 line = Array.create 0 a;
25 if a.offset == ~-1 then a.offset <- i;
26 let offset = a.offset in
27 let len = Array.length a.line in
28 if i >= offset && i < offset + len then
29 a.line.(i - offset) <- v
31 if i < offset then begin (* bottom resize *)
32 let pad = offset - i in
33 let nlen = len + pad in
34 let narray = Array.create nlen a.dummy in
35 for j = 0 to len - 1 do
36 narray.(j+pad) <- a.line.(j)
41 end else begin (* top resize *)
42 (* preventively allocate the space for the following elements *)
43 let nlen = ((i - offset + 1) lsl 1) + 1 in
44 let narray = Array.create nlen a.dummy in
45 for j = 0 to len - 1 do
46 narray.(j) <- a.line.(j);
48 narray.(i - offset + 1) <- v;
53 let offset = a.offset in
54 let len = Array.length a.line in
55 if i >= offset && i < offset + len then a.line.(i - offset)
62 if a.offset == ~-1 then () else
63 for i = 0 to Array.length line - 1 do
65 f (i+a.offset) v (v==a.dummy)
75 type 'a t = 'a Lvl1.t Lvl1.t
77 let dummy1 = Lvl1.create 0 a in
78 { Lvl1.line = Array.create n dummy1;
85 let line = Lvl1.find a i in
86 if line == a.Lvl1.dummy then
87 let nline = { line with Lvl1.offset = ~-1 } in
94 let v = Lvl1.find a i in
95 if v == a.Lvl1.dummy then a.Lvl1.dummy.Lvl1.dummy
99 let dummy c = c.Lvl1.dummy.Lvl1.dummy
102 let line = a.Lvl1.line in
103 if a.Lvl1.offset == ~-1 then () else
104 for i = 0 to Array.length line - 1 do
105 Lvl1.iteri (f i) line.(i)
113 type 'a t = 'a Lvl2.t Lvl1.t
116 let dummy1 = Lvl2.create 0 a in
117 { Lvl1.line = Array.create n dummy1;
123 let line = Lvl1.find a i in
124 if line == a.Lvl1.dummy then
125 let nline = { line with Lvl1.offset = ~-1 } in
126 Lvl2.add nline j k v;
132 let v = Lvl1.find a i in
133 if v == a.Lvl1.dummy then Lvl2.dummy a.Lvl1.dummy
137 let dummy a = Lvl2.dummy a.Lvl1.dummy
139 let line = a.Lvl1.line in
140 if a.Lvl1.offset == ~-1 then () else
141 for i = 0 to Array.length line - 1 do
142 Lvl2.iteri (f i) line.(i)