146 } |
146 } |
147 |
147 |
148 static int longest_match(struct line *a, struct line *b, struct pos *pos, |
148 static int longest_match(struct line *a, struct line *b, struct pos *pos, |
149 int a1, int a2, int b1, int b2, int *omi, int *omj) |
149 int a1, int a2, int b1, int b2, int *omi, int *omj) |
150 { |
150 { |
151 int mi = a1, mj = b1, mk = 0, mb = 0, i, j, k, half = (a1 + a2) / 2; |
151 int mi = a1, mj = b1, mk = 0, mb = 0, i, j, k, half; |
|
152 |
|
153 /* window our search on large regions to better bound |
|
154 worst-case performance. by choosing a window at the end, we |
|
155 reduce skipping overhead on the b chains. */ |
|
156 if (a2 - a1 > 30000) |
|
157 a1 = a2 - 30000; |
|
158 |
|
159 half = (a1 + a2) / 2; |
152 |
160 |
153 for (i = a1; i < a2; i++) { |
161 for (i = a1; i < a2; i++) { |
154 /* skip all lines in b after the current block */ |
162 /* skip all lines in b after the current block */ |
155 for (j = a[i].n; j >= b2; j = b[j].n) |
163 for (j = a[i].n; j >= b2; j = b[j].n) |
156 ; |
164 ; |