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

Comparing ray/src/hd/sm_usets.c (file contents):
Revision 3.1 by gwlarson, Mon Dec 28 17:53:06 1998 UTC vs.
Revision 3.2 by greg, Sat Feb 22 02:07:25 2003 UTC

# Line 1 | Line 1
1 /* Copyright (c) 1998 Silicon Graphics, Inc. */
2
1   #ifndef lint
2 < static char SCCSid[] = "$SunId$ SGI";
2 > static const char       RCSid[] = "$Id$";
3   #endif
6
4   /*
5   * Quadtree-specific set operations with unsorted sets.
6   */
7  
8   #include "standard.h"
9   #include "sm_flag.h"
10 + #include "object.h"
11   #include "sm_qtree.h"
12  
13  
# Line 74 | Line 72 | memerr:
72   }
73  
74  
75 + deletuelem(os, obj)             /* delete obj from unsorted os, no questions */
76 + register OBJECT  *os;
77 + OBJECT  obj;
78 + {
79 +        register int  i,j;
80 +        OBJECT *optr;
81 +        /* Take 2nd to last and put in position of obj: move last down:
82 +           want to preserve last added
83 +         */
84 +        i = (*os)--;
85 + #ifdef DEBUG
86 +        if( i <= 0)
87 +          error(CONSISTENCY,"deleteuelem():empty set\n");
88 + #endif
89 +        if(i < 3)
90 +        {
91 +          if((i == 2) && (*(++os) == obj))
92 +            *os = *(os+1);
93 +          return;
94 +        }
95 +        optr = os + i;
96 +        os++;
97 +        while (i-- > 1 && *os != obj)
98 +           os++;
99 + #ifdef DEBUG
100 +        if( *os != obj)
101 +          error(CONSISTENCY,"deleteuelem():id not found\n");
102 + #endif
103 +        *os = *(optr-1);
104 +        *(optr-1) = *optr;
105 + }
106  
107   QUADTREE
108 + qtdeletuelem(qt, id)            /* delete element from unsorted leaf node */
109 + QUADTREE  qt;
110 + OBJECT  id;
111 + {
112 +        register QUADTREE  lf;
113 + #ifdef DEBUG
114 +        if(id < 0)
115 +                eputs("qtdeletuelem():Invalid triangle id\n");
116 +        if (!QT_IS_LEAF(qt) || (lf = QT_SET_INDEX(qt)) >= qtnumsets)
117 +                error(CONSISTENCY, "empty/bad node in qtdelelem");
118 + #else
119 +        lf = QT_SET_INDEX(qt);
120 + #endif
121 +        if (qtsettab[lf][0] <= 1) {             /* blow leaf away */
122 +                free((void *)qtsettab[lf]);
123 +                qtsettab[lf] = (OBJECT *)qtfreesets;
124 +                qtfreesets = lf;
125 +                return(EMPTY);
126 +        }
127 +        deletuelem(qtsettab[lf], id);
128 +        if (QTONTHRESH(qtsettab[lf][0]))
129 +                qtsettab[lf] = (OBJECT *)realloc((char *)qtsettab[lf],
130 +                                QTNODESIZ(qtsettab[lf][0])*sizeof(OBJECT));
131 +        return(qt);
132 + }
133 +
134 + QUADTREE
135   qtdelelem(qt, id)               /* delete element from leaf node */
136   QUADTREE  qt;
137   OBJECT  id;
# Line 98 | Line 154 | OBJECT  id;
154            return(qt);
155          }
156          if (qtsettab[lf][0] <= 1) {             /* blow leaf away */
157 <                free((char *)qtsettab[lf]);
157 >                free((void *)qtsettab[lf]);
158                  qtsettab[lf] = (OBJECT *)qtfreesets;
159                  qtfreesets = lf;
160                  return(EMPTY);
# Line 193 | Line 249 | OBJECT  id;
249  
250   #ifdef DEBUG
251          if(id < 0)
252 <                eputs("qtaddelem():Invalid triangle id\n");
252 >                eputs("qtadduelem():Invalid sample id\n");
253   #endif
254          if (QT_IS_EMPTY(qt)) {          /* create new leaf */
255                  newset[0] = 1; newset[1] = id;
# Line 256 | Line 312 | QUADTREE  qt;
312          osi = QT_SET_INDEX(qt);
313          if (osi >= qtnumsets)
314                  return;
315 <        free((char *)qtsettab[osi]);
315 >        free((void *)qtsettab[osi]);
316          qtsettab[osi] = (OBJECT *)qtfreesets;
317          qtfreesets = osi;
318   }
# Line 273 | Line 329 | qtfreeleaves()                 /* free ALL sets and leaf nodes */
329          }
330          for (i = qtnumsets; i--; )
331                  if (qtsettab[i] != NULL)
332 <                        free((char *)qtsettab[i]);
333 <        free((char *)qtsettab);
332 >                        free((void *)qtsettab[i]);
333 >        free((void *)qtsettab);
334          qtsettab = NULL;
335          if(qtsetflag)
336          {
337 <          free((char *)qtsetflag);
337 >          free((void *)qtsetflag);
338            qtsetflag=0;
339          }
340          qtnumsets = 0;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines