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

Comparing ray/src/hd/sm_sets.c (file contents):
Revision 3.2 by gwlarson, Fri Sep 11 11:52:27 1998 UTC vs.
Revision 3.3 by gwlarson, Wed Sep 16 18:16:29 1998 UTC

# Line 15 | Line 15 | static char SCCSid[] = "$SunId$ SGI";
15  
16   #define QTSETIBLK       2048            /* set index allocation block size */
17   #define QTELEMBLK       8               /* set element allocation block */
18 + #define QTELEMMOD(ne)   ((ne)&7)        /* (ne) % QTELEMBLK */
19  
20 < #define QTNODESIZ(ne)   ((ne) + QTELEMBLK - ((ne) % QTELEMBLK))
20 > #define QTONTHRESH(ne)  (!QTELEMMOD((ne)+1))
21 > #define QTNODESIZ(ne)   ((ne) + QTELEMBLK - QTELEMMOD(ne))
22  
23 < OBJECT  **qtsettab= NULL;                       /* quadtree leaf node table */
23 > OBJECT  **qtsettab= NULL;               /* quadtree leaf node table */
24   QUADTREE  qtnumsets;                    /* number of used set indices */
25   static int  qtfreesets = EMPTY;         /* free set index list */
26  
# Line 28 | Line 30 | qtnewleaf(oset)                        /* return new leaf node for object s
30   OBJECT  *oset;
31   {
32          register QUADTREE  osi;
31        int     nalc;
33  
34          if (*oset <= 0)
35                  return(EMPTY);          /* should be error? */
# Line 41 | Line 42 | OBJECT  *oset;
42                  if (qtsettab == NULL)
43                          goto memerr;
44          }
45 <        nalc = QTNODESIZ(*oset);
46 <        if ((qtsettab[osi] = (OBJECT *)malloc(nalc*sizeof(OBJECT))) == NULL)
45 >        qtsettab[osi] = (OBJECT *)malloc(QTNODESIZ(*oset)*sizeof(OBJECT));
46 >        if (qtsettab[osi] == NULL)
47                  goto memerr;
48          setcopy(qtsettab[osi], oset);
49          return(QT_INDEX(osi));
# Line 52 | Line 53 | memerr:
53  
54  
55   QUADTREE
56 < qtdelelem(qt, id)               /* delete element from leaf node, no quest. */
56 > qtdelelem(qt, id)               /* delete element from leaf node */
57   QUADTREE  qt;
58   OBJECT  id;
59   {
60          register QUADTREE  lf;
60        int  oalc, nalc;
61  
62   #ifdef DEBUG
63          if(id < 0)
# Line 74 | Line 74 | OBJECT  id;
74                  qtsettab[lf] = (OBJECT *)qtfreesets;
75                  qtfreesets = lf;
76                  return(EMPTY);
77 <        }                                       /* else delete element */
78 <        oalc = QTNODESIZ(qtsettab[lf][0]);
79 <        nalc = QTNODESIZ(qtsettab[lf][0] - 1);
77 >        }
78          deletelem(qtsettab[lf], id);
79 <        if (nalc != oalc)
79 >        if (QTONTHRESH(qtsettab[lf][0]))
80                  qtsettab[lf] = (OBJECT *)realloc((char *)qtsettab[lf],
81 <                                nalc*sizeof(OBJECT));
81 >                                QTNODESIZ(qtsettab[lf][0])*sizeof(OBJECT));
82          return(qt);
83   }
84  
85  
86   QUADTREE
87 < qtaddelem(qt, id)               /* add element to leaf node, no quest. */
87 > qtaddelem(qt, id)               /* add element to leaf node */
88   QUADTREE  qt;
89   OBJECT  id;
90   {
91          OBJECT  newset[2];
92          register QUADTREE  lf;
95        int  oalc, nalc;
93  
94   #ifdef DEBUG
95          if(id < 0)
# Line 110 | Line 107 | OBJECT  id;
107   #else
108          lf = QT_SET_INDEX(qt);
109   #endif
110 <        oalc = QTNODESIZ(qtsettab[lf][0]);
114 <        nalc = QTNODESIZ(qtsettab[lf][0] + 1);
115 <        if (nalc != oalc) {
110 >        if (QTONTHRESH(qtsettab[lf][0])) {
111                  qtsettab[lf] = (OBJECT *)realloc((char *)qtsettab[lf],
112 <                                nalc*sizeof(OBJECT));
112 >                                QTNODESIZ(qtsettab[lf][0]+1)*sizeof(OBJECT));
113                  if (qtsettab[lf] == NULL)
114                          error(SYSTEM, "out of memory in qtaddelem");
115          }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines