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 1.2 by greg, Mon Jul 29 15:47:46 1991 UTC vs.
Revision 2.6 by gwlarson, Thu Nov 5 16:51:26 1998 UTC

# Line 1 | Line 1
1 < /* Copyright (c) 1986 Regents of the University of California */
1 > /* Copyright (c) 1992 Regents of the University of California */
2  
3   #ifndef lint
4   static char SCCSid[] = "$SunId$ LBL";
# Line 22 | Line 22 | static struct ohtab {
22          OBJECT  *htab;                  /* table, if allocated */
23   }  modtab = {100, NULL}, objtab = {1000, NULL}; /* modifiers and objects */
24  
25 + static int  otndx();
26  
27 < #ifdef  GETOBJ
27 >
28   int
29 < object(oname)                   /* get an object number from its name */
30 < char  *oname;
29 > objndx(op)                      /* get object number from pointer */
30 > register OBJREC  *op;
31   {
32 <        register int  ndx;
32 >        register int  i, j;
33  
34 <        ndx = otndx(oname, &objtab);
35 <        return(objtab.htab[ndx]);
34 >        for (i = nobjects>>OBJBLKSHFT; i >= 0; i--) {
35 >                j = op - objblock[i];
36 >                if (j >= 0 && j < OBJBLKSIZ)
37 >                        return((i<<OBJBLKSHFT) + j);
38 >        }
39 >        return(OVOID);
40   }
36 #endif
41  
42  
43   int
44 + lastmod(obj, mname)             /* find modifier definition before obj */
45 + OBJECT  obj;
46 + char  *mname;
47 + {
48 +        register OBJREC  *op;
49 +        register int  i;
50 +
51 +        i = modifier(mname);            /* try hash table first */
52 +        if (i < obj)
53 +                return(i);
54 +        for (i = obj; i-- > 0; ) {      /* need to search */
55 +                op = objptr(i);
56 +                if (ismodifier(op->otype) && !strcmp(op->oname, mname))
57 +                        return(i);
58 +        }
59 +        return(OVOID);
60 + }
61 +
62 +
63 + int
64   modifier(mname)                 /* get a modifier number from its name */
65   char  *mname;
66   {
# Line 47 | Line 71 | char  *mname;
71   }
72  
73  
74 + #ifdef  GETOBJ
75 + int
76 + object(oname)                   /* get an object number from its name */
77 + char  *oname;
78 + {
79 +        register int  ndx;
80 +
81 +        ndx = otndx(oname, &objtab);
82 +        return(objtab.htab[ndx]);
83 + }
84 + #endif
85 +
86 +
87   insertobject(obj)               /* insert new object into our list */
88   register OBJECT  obj;
89   {
90          register int  i;
91  
55 #ifdef  GETOBJ
56        i = otndx(objptr(obj)->oname, &objtab);
57        objtab.htab[i] = obj;
58 #endif
92          if (ismodifier(objptr(obj)->otype)) {
93                  i = otndx(objptr(obj)->oname, &modtab);
94                  modtab.htab[i] = obj;
95          }
96 + #ifdef  GETOBJ
97 +        else {
98 +                i = otndx(objptr(obj)->oname, &objtab);
99 +                objtab.htab[i] = obj;
100 +        }
101 + #endif
102          for (i = 0; addobjnotify[i] != NULL; i++)
103                  (*addobjnotify[i])(obj);
104   }
# Line 78 | Line 117 | int  oldsiz;
117                  if (*hsp > oldsiz)
118                          return(*hsp);
119          return(oldsiz*2 + 1);           /* not always prime */
81 }
82
83
84 static int
85 shash(s)                        /* hash a string */
86 register char  *s;
87 {
88        register int  h = 0;
89
90        while (*s)
91                h = (h<<1 & 0x7fff) ^ *s++;
92        return(h);
120   }
121  
122  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines