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

Comparing ray/src/common/urand.c (file contents):
Revision 1.2 by greg, Fri May 17 13:51:14 1991 UTC vs.
Revision 2.6 by greg, Tue Feb 25 02:47:22 2003 UTC

# Line 1 | Line 1
1 /* Copyright (c) 1991 Regents of the University of California */
2
1   #ifndef lint
2 < static char SCCSid[] = "$SunId$ LBL";
2 > static const char       RCSid[] = "$Id$";
3   #endif
6
4   /*
5 < * Uncorrelated (anticorrelated) random function
5 > * Anticorrelated random function due to Christophe Schlick
6   */
7  
8 + #include "copyright.h"
9 +
10 + #include  <stdlib.h>
11   #include  "random.h"
12  
13 < #define  NULL           0
13 > #undef initurand
14  
15 < extern char  *malloc();
15 > #define  MAXORDER       (8*sizeof(unsigned short))
16  
17 < short  *urperm;         /* urand() permutation */
17 > unsigned short  *urperm = NULL; /* urand() permutation */
18   int  urmask;            /* bits used in permutation */
19 static int  urorder;    /* number of bits */
19  
20 <
20 > int
21   initurand(size)         /* initialize urand() for size entries */
22   int  size;
23   {
24          int  order, n;
25          register int  i, offset;
26  
27 <        size--;
27 >        if (urperm != NULL)
28 >                free((void *)urperm);
29 >        if (--size <= 0) {
30 >                urperm = NULL;
31 >                urmask = 0;
32 >                return(0);
33 >        }
34          for (i = 1; size >>= 1; i++)
35                  ;
36 <        order = i;
36 >        order = i>MAXORDER ? MAXORDER : i;
37          urmask = (1<<i) - 1;
38 <        urperm = (short *)malloc((urmask+1)*sizeof(short));
38 >        urperm = (unsigned short *)malloc((urmask+1)*sizeof(unsigned short));
39          if (urperm == NULL) {
40                  eputs("out of memory in initurand\n");
41                  quit(1);
# Line 45 | Line 50 | int  size;
50                          else
51                                  urperm[i+offset]++;
52                  }
53 +        return(1<<order);
54   }
55  
56  
57   int
58 < urhash(d, n)                    /* hash a set of integer values */
58 > ilhash(d, n)                    /* hash a set of integer values */
59   register int  *d;
60   register int  n;
61   {
62          static int  tab[8] = {13623,353,1637,5831,2314,3887,5832,8737};
63 <        register unsigned  hval;
63 >        register int  hval;
64  
65          hval = 0;
66          while (n-- > 0)
67                  hval += *d++ * tab[n&7];
68 <        return(hval & urmask);
68 >        return(hval);
69   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines