1 let realloc l old_size new_size dummy =
2 let l' = Array.create new_size dummy in
3 Array.blit l 0 l' 0 (min old_size new_size);
9 type 'a t = { mutable line : 'a array;
11 let create n a = { line = Array.create n a;
16 let len = Array.length line in
17 if i >= len then c.dummy else line.(i)
22 let len = Array.length line in
23 if i >= len then c.line <- realloc line len (i*2+1) c.dummy;
28 let to_array c = c.line
35 type 'a t = { mutable line : 'a array array;
38 dummy_line1 : 'a array
41 let dummy_line = [| |]
43 let create ?(l1_size=512) n a =
44 let dummy_line1 = Array.create l1_size a in
45 { line = Array.create n dummy_line1;
48 dummy_line1 = dummy_line1;
50 let find c i j = c.line.(i).(j)
53 let len = Array.length line in
54 if i >= len then c.line <- realloc line len (i*2 + 1) c.dummy_line1;
55 let line = c.line.(i) in
57 if line == c.dummy_line1 then
58 let nline = Array.copy line (*Array.create c.l1_size c.dummy*) in
66 let to_array c = c.line
67 let dummy_line c = c.dummy_line1
72 type 'a t = { mutable line : 'a array array array;
76 dummy_line1 : 'a array array;
77 dummy_line2 : 'a array
79 let dummy_line2 = [| |]
80 let dummy_line1 = [| |]
84 let create ?(l1_size=512) ?(l2_size=512) n a =
85 let dummy_line2 = Array.create l2_size a in
86 let dummy_line1 = Array.create l1_size dummy_line2 in
87 { line = Array.create n dummy_line1;
91 dummy_line1 = dummy_line1;
92 dummy_line2 = dummy_line2
94 let find t i j k = t.line.(i).(j).(k)
98 let line1 = line.(i) in
99 if line1 == dummy_line1 then t.dummy else
100 let line2 = line1.(j) in
101 if line2 == dummy_line2 then t.dummy else line2.(k)
108 if l1 == t.dummy_line1 then
109 let l1' = Array.copy l1 in
114 let l2 = line1.(j) in
115 if l2 == t.dummy_line2 then
116 let l2' = Array.copy l2 in
117 line1.(j) <- l2'; l2'
123 let dummy a = a.dummy
124 let to_array a = a.line