--- ray/src/common/objset.c 1990/09/06 23:32:41 1.2 +++ ray/src/common/objset.c 1990/12/14 10:06:33 1.6 @@ -18,7 +18,9 @@ static char SCCSid[] = "$SunId$ LBL"; #include "otypes.h" -#define OSTSIZ 3037 /* object table size (a prime!) */ +#ifndef OSTSIZ +#define OSTSIZ 12329 /* object table size (a prime!) */ +#endif static OBJECT *ostable[OSTSIZ]; /* the object set table */ @@ -44,8 +46,12 @@ OBJECT obj; { register int i; - for (i = (*os++)--; i > 0 && *os < obj; i--, os++) - ; + i = (*os)--; + os++; + while (i > 0 && *os < obj) { + i--; + os++; + } while (--i > 0) { os[0] = os[1]; os++; @@ -182,39 +188,19 @@ nonsurfinset(orig, nobjs) /* check sets for non-surfa int orig, nobjs; { int n; - OBJECT *nonset; register OBJECT *os; register OBJECT i; - /* count non-surfaces */ - n = 0; - for (i = orig; i < orig+nobjs; i++) - if (!issurface(objptr(i)->otype)) - n++; - if (n <= 0) - return(0); - /* allocate set */ - if ((nonset = (OBJECT *)malloc((n+1)*sizeof(OBJECT))) == NULL) - return(0); /* give up if we haven't enough mem */ - /* fill set */ - os = nonset; - *os = n; - for (i = orig; i < orig+nobjs; i++) - if (!issurface(objptr(i)->otype)) - *++os = i; - /* now check all sets */ + for (n = 0; n < OSTSIZ; n++) { if ((os = ostable[n]) == NULL) continue; while ((i = *os++) > 0) while (i--) { - if (*os >= nonset[1] - && *os <= nonset[nonset[0]] - && inset(nonset, *os)) - goto done; + if (*os >= orig && *os < orig+nobjs && + !issurface(objptr(*os)->otype)) + return(1); os++; } } -done: - free((char *)nonset); - return(n < OSTSIZ); + return(0); }