--- ray/src/common/objset.c 1997/03/07 15:45:28 2.4 +++ ray/src/common/objset.c 1998/09/11 15:26:43 2.7 @@ -18,9 +18,9 @@ static char SCCSid[] = "$SunId$ LBL"; #ifndef OSTSIZ #ifdef BIGMEM -#define OSTSIZ 56437 /* object table size (a prime!) */ +#define OSTSIZ 262139 /* object table size (a prime!) */ #else -#define OSTSIZ 12329 /* object table size (a prime!) */ +#define OSTSIZ 32749 /* object table size (a prime!) */ #endif #endif @@ -68,8 +68,15 @@ OBJECT obj; int upper, lower; register int cm, i; + if ((i = os[0]) <= 6) { /* linear search algorithm */ + cm = obj; + while (i-- > 0) + if (*++os == cm) + return(1); + return(0); + } lower = 1; - upper = cm = os[0] + 1; + upper = cm = i + 1; /* binary search algorithm */ while ((i = (lower + upper) >> 1) != cm) { cm = obj - os[i]; @@ -228,10 +235,10 @@ OCTREE ot; if (!isfull(ot)) goto noderr; - i = oseti(ot); - if ((os = ostable[i%OSTSIZ]) == NULL) + ot = oseti(ot); + if ((os = ostable[ot%OSTSIZ]) == NULL) goto noderr; - for (i /= OSTSIZ; i--; os += *os + 1) + for (i = ot/OSTSIZ; i--; os += *os + 1) if (*os <= 0) goto noderr; for (i = *os; i-- >= 0; ) /* copy set here */