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

Comparing ray/src/common/modobject.c (file contents):
Revision 2.18 by greg, Sat Oct 17 16:39:23 2020 UTC vs.
Revision 2.20 by greg, Mon Feb 1 17:36:45 2021 UTC

# Line 29 | Line 29 | objndx(                                /* get object number from pointer */
29          OBJREC  *op
30   )
31   {
32 <        int  i, j;
32 >        int     i;
33 >        long    j;
34  
35 <        for (i = nobjects>>OBJBLKSHFT; i >= 0; i--) {
35 >        for (i = (nobjects-1)>>OBJBLKSHFT; i >= 0; i--) {
36                  j = op - objblock[i];
37                  if ((j >= 0) & (j < OBJBLKSIZ))
38 <                        return((i<<OBJBLKSHFT) + j);
38 >                        return(((OBJECT)i<<OBJBLKSHFT) + (OBJECT)j);
39          }
40          return(OVOID);
41   }
# Line 222 | Line 223 | nexthsiz(                      /* return next hash table size */
223   )
224   {
225          static int  hsiztab[] = {
226 <                251, 509, 1021, 2039, 4093, 8191, 16381, 0
226 >                251, 509, 1021, 2039, 4093, 8191, 16381,
227 >                32749, 65521, 131071, 262139, 0
228          };
229          int  *hsp;
230  
# Line 239 | Line 241 | otndx(                         /* get object table index for name */
241          struct ohtab  *tab
242   )
243   {
244 +        char    *onm;
245          OBJECT  *oldhtab;
246          int  hval, i;
247          int  ndx;
# Line 257 | Line 260 | otndx(                         /* get object table index for name */
260   tryagain:
261          for (i = 0; i < tab->hsiz; i++) {
262                  ndx = (hval + (unsigned long)i*i) % tab->hsiz;
263 <                if (tab->htab[ndx] == OVOID ||
261 <                                !strcmp(objptr(tab->htab[ndx])->oname, name))
263 >                if (tab->htab[ndx] == OVOID)
264                          return(ndx);
265 +                onm = objptr(tab->htab[ndx])->oname;
266 +                if (onm != NULL && !strcmp(onm, name))
267 +                        return(ndx);
268          }
269                                          /* table is full, reallocate */
270          oldhtab = tab->htab;
# Line 267 | Line 272 | tryagain:
272          tab->htab = NULL;
273          while (ndx--)
274                  if (oldhtab[ndx] != OVOID) {
275 <                        i = otndx(objptr(oldhtab[ndx])->oname, tab);
275 >                        onm = objptr(oldhtab[ndx])->oname;
276 >                        if (onm == NULL)
277 >                                continue;
278 >                        i = otndx(onm, tab);
279                          tab->htab[i] = oldhtab[ndx];
280                  }
281          free((void *)oldhtab);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines