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.6 by greg, Thu Apr 21 02:52:40 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  
# Line 213 | Line 213 | big_shuffle(long *n, long alen)
213          tree_root = tree_alloc(alen);
214  
215          while (alen > 0)                /* allocate and print random array entries */
216 <                print_shuf(n, eat_nth_leaf(tree_root, random() % alen--));
216 >                print_shuf(n, eat_nth_leaf(tree_root, irandom(alen--)));
217  
218          free(tree_root);                /* all done */
219   }
# Line 251 | Line 251 | shuffle(long *n)
251                  myshuf[i] = i;
252                                  /* perform Fisher-Yates shuffle */
253          for (i = 0; i < alen-1; i++) {
254 <                int     ix = random()%(alen-i) + i;
254 >                int     ix = irandom(alen-i) + i;
255                  int     ndx = myshuf[i];
256                  myshuf[i] = myshuf[ix];
257                  myshuf[ix] = ndx;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines