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)
66 type 'a t = 'a Lvl1.t Lvl1.t
68 let dummy1 = Lvl1.create 0 a in
69 { Lvl1.line = Array.create n dummy1;
76 let line = Lvl1.find a i in
77 if line == a.Lvl1.dummy then
78 let nline = { line with Lvl1.offset = ~-1 } in
85 let v = Lvl1.find a i in
86 if v == a.Lvl1.dummy then a.Lvl1.dummy.Lvl1.dummy
90 let dummy c = c.Lvl1.dummy.Lvl1.dummy
96 type 'a t = 'a Lvl2.t Lvl1.t
99 let dummy1 = Lvl2.create 0 a in
100 { Lvl1.line = Array.create n dummy1;
106 let line = Lvl1.find a i in
107 if line == a.Lvl1.dummy then
108 let nline = { line with Lvl1.offset = ~-1 } in
109 Lvl2.add nline j k v;
115 let v = Lvl1.find a i in
116 if v == a.Lvl1.dummy then Lvl2.dummy a.Lvl1.dummy
120 let dummy a = Lvl2.dummy a.Lvl1.dummy