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

Comparing ray/src/cal/cnt.c (file contents):
Revision 1.4 by greg, Wed Apr 20 19:13:12 2022 UTC vs.
Revision 1.5 by greg, Wed Apr 20 20:56:01 2022 UTC

# Line 128 | Line 128 | tree_alloc(long alen)
128                  exit(1);
129          }
130          *troot = ht;                    /* first byte is tree height */
131 <        for (i = 256; i--; ) {          /* assign bit count table */
131 >        for (i = 256; i--; ) {          /* assign 0-bit count table */
132                  int     b;
133 <                buf[i] = 0;
133 >                buf[i] = 8;
134                  for (b = i; b; b >>= 1)
135 <                        buf[i] += b&1;
135 >                        buf[i] -= b&1;
136          }
137          return(troot);
138   }
# Line 190 | Line 190 | eat_nth_leaf(uby8 *brp, long ski)
190                  incr_counter(brp, lvl);         /* we intend to eat one */
191                  brp += tree_br[lvl--].cntr_siz; /* drop a level */
192          }
193 <        b = 0;                                  /* browse the leaves */
194 <        while (ski >= 8-buf[*brp]) {            /* buf contains bit counts */
193 >        while (ski >= buf[*brp]) {              /* browse the leaves */
194                  pos += 8;
195 <                ski -= 8-buf[*brp++];
195 >                ski -= buf[*brp++];             /* buf contains 0-bit counts */
196          }
197 <        while (ski >= 0) {                      /* target zero leaf bit */
197 >        b = 0;                                  /* find target bit in byte */
198 >        while ((ski -= !(*brp & 1<<b)) >= 0) {
199                  pos++;
200 <                ski -= !(*brp & 1<<b++);
200 >                b++;
201          }
202 <        *brp |= 1 << --b;                       /* eat it */
203 <        return(--pos);                          /* & return leaf's slot# */
202 >        *brp |= 1<<b;                           /* eat it */
203 >        return(pos);                            /* & return leaf's slot# */
204   }
205  
206  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines