ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/hd/holofile.c
(Generate patch)

Comparing ray/src/hd/holofile.c (file contents):
Revision 3.32 by gwlarson, Thu Jan 7 22:04:49 1999 UTC vs.
Revision 3.33 by gwlarson, Sat Jan 9 09:16:14 1999 UTC

# Line 483 | Line 483 | int    (*bf)();                /* callback function (optional) */
483   }
484  
485  
486 + int
487   hdfreefrag(hp, i)                       /* free a file fragment */
488   HOLO    *hp;
489   int     i;
# Line 492 | Line 493 | int    i;
493          register int    j, k;
494  
495          if (bi->nrd <= 0)
496 <                return;
496 >                return(0);
497          DCHECK(hp->fd < 0 | hp->fd >= nhdfragls || !hdfragl[hp->fd].nlinks,
498                          CONSISTENCY, "bad file descriptor in hdfreefrag");
499          f = &hdfragl[hp->fd];
# Line 512 | Line 513 | int    i;
513          if (j >= MAXFRAGB*FRAGBLK) {
514                  f->nfrags = j--;        /* stop list growth */
515                  if (bi->nrd <= f->fi[j].nrd)
516 <                        return;         /* new one no better than discard */
516 >                        return(0);      /* new one no better than discard */
517          }
518   #endif
519          if (j % FRAGBLK == 0) {         /* more (or less) free list space */
# Line 524 | Line 525 | int    i;
525                                          (j+FRAGBLK)*sizeof(BEAMI));
526                  if (newp == NULL) {
527                          f->nfrags--;    /* graceful failure */
528 <                        return;
528 >                        return(0);
529                  }
530                  f->fi = newp;
531          }
# Line 554 | Line 555 | int    i;
555          biglob(hp)->nrd -= bi->nrd;             /* tell fragment it's free */
556          bi->nrd = 0;
557          bi->fo = 0;
558 +        return(1);
559   }
560  
561  
# Line 587 | Line 589 | int    fd;
589   unsigned int4   nrays;
590   {
591          register struct fraglist        *f;
592 <        register int    j, k;
592 >        register int    j;
593          long    nfo;
594  
595          if (nrays == 0)
# Line 595 | Line 597 | unsigned int4  nrays;
597          DCHECK(fd < 0 | fd >= nhdfragls || !hdfragl[fd].nlinks,
598                          CONSISTENCY, "bad file descriptor in hdallocfrag");
599          f = &hdfragl[fd];
600 <        k = -1;                         /* find closest-sized fragment */
601 <        for (j = f->nfrags; j-- > 0; )
602 <                if (f->fi[j].nrd >= nrays &&
603 <                                (k < 0 || f->fi[j].nrd < f->fi[k].nrd))
602 <                        if (f->fi[k=j].nrd == nrays)
603 <                                break;
604 <        if (k < 0) {                    /* no fragment -- extend file */
600 >        for (j = f->nfrags; j-- > 0; )  /* first fit algorithm */
601 >                if (f->fi[j].nrd >= nrays)
602 >                        break;
603 >        if (j < 0) {                    /* no fragment -- extend file */
604                  nfo = f->flen;
605                  f->flen += nrays*sizeof(RAYVAL);
606          } else {                        /* else use fragment */
607 <                nfo = f->fi[k].fo;
608 <                f->fi[k].fo += nrays*sizeof(RAYVAL);
609 <                f->fi[k].nrd -= nrays;
607 >                nfo = f->fi[j].fo;
608 >                f->fi[j].fo += nrays*sizeof(RAYVAL);
609 >                f->fi[j].nrd -= nrays;
610          }
611          return(nfo);
612   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines