303 |
|
register struct fragment *f = hdfrag[hp->fd]; |
304 |
|
register int j, k; |
305 |
|
/* relinquish old fragment */ |
306 |
< |
if ((j = ++f->nfrags) >= MAXFRAG) |
307 |
< |
f->nfrags--; |
308 |
< |
for ( ; ; ) { /* stick it in our descending list */ |
309 |
< |
if (!--j || hp->bi[i].fo < f->fi[j-1].fo) { |
310 |
< |
f->fi[j].fo = hp->bi[i].fo; |
311 |
< |
f->fi[j].nrd = hp->bi[i].nrd; |
312 |
< |
break; |
306 |
> |
if (hp->bi[i].nrd) { |
307 |
> |
if ((j = ++f->nfrags) >= MAXFRAG) |
308 |
> |
f->nfrags--; |
309 |
> |
for ( ; ; ) { /* stick it in our descending list */ |
310 |
> |
if (!--j || hp->bi[i].fo < f->fi[j-1].fo) { |
311 |
> |
f->fi[j].fo = hp->bi[i].fo; |
312 |
> |
f->fi[j].nrd = hp->bi[i].nrd; |
313 |
> |
break; |
314 |
> |
} |
315 |
> |
copystruct(f->fi+j, f->fi+j-1); |
316 |
|
} |
314 |
– |
copystruct(f->fi+j, f->fi+j-1); |
315 |
– |
} |
317 |
|
/* coalesce adjacent fragments */ |
318 |
< |
for (j = k = 0; k < f->nfrags; j++, k++) { |
319 |
< |
if (j != k) |
320 |
< |
copystruct(f->fi+j, f->fi+k); |
321 |
< |
while (k+1 < f->nfrags && |
322 |
< |
f->fi[k+1].fo + f->fi[k+1].nrd*sizeof(RAYVAL) == |
323 |
< |
f->fi[j].fo) |
324 |
< |
f->fi[j].fo -= f->fi[++k].nrd*sizeof(RAYVAL); |
318 |
> |
for (j = k = 0; k < f->nfrags; j++, k++) { |
319 |
> |
if (j != k) |
320 |
> |
copystruct(f->fi+j, f->fi+k); |
321 |
> |
while (k+1 < f->nfrags && |
322 |
> |
f->fi[k+1].fo + f->fi[k+1].nrd*sizeof(RAYVAL) |
323 |
> |
== f->fi[j].fo) |
324 |
> |
f->fi[j].fo -= |
325 |
> |
f->fi[++k].nrd*sizeof(RAYVAL); |
326 |
> |
} |
327 |
> |
f->nfrags = j; |
328 |
|
} |
325 |
– |
f->nfrags = j; |
329 |
|
k = -1; /* find closest-sized fragment */ |
330 |
|
for (j = f->nfrags; j-- > 0; ) |
331 |
|
if (f->fi[j].nrd >= nrays && |