X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=libiberty%2Frandom.c;h=c306698a53896a4874c02bc2d8d7129a2b25baff;hb=1490694c42d0fbf815b5f1381238e2363a7e9ea8;hp=4e9b7ffafcc4ddb34d65cbb596ecf239dac29ca4;hpb=f0bff53d7a30991a1cadc94a9f812d537cb92205;p=pf3gnuchains%2Fgcc-fork.git diff --git a/libiberty/random.c b/libiberty/random.c index 4e9b7ffafcc..c306698a538 100644 --- a/libiberty/random.c +++ b/libiberty/random.c @@ -34,6 +34,24 @@ * It was reworked for the GNU C Library by Roland McGrath. */ +/* + +@deftypefn Supplement {long int} random (void) +@deftypefnx Supplement void srandom (unsigned int @var{seed}) +@deftypefnx Supplement void* initstate (unsigned int @var{seed}, void *@var{arg_state}, unsigned long @var{n}) +@deftypefnx Supplement void* setstate (void *@var{arg_state}) + +Random number functions. @code{random} returns a random number in the +range 0 to @code{LONG_MAX}. @code{srandom} initializes the random +number generator to some starting point determined by @var{seed} +(else, the values returned by @code{random} are always the same for each +run of the program). @code{initstate} and @code{setstate} allow fine-grained +control over the state of the random number generator. + +@end deftypefn + +*/ + #include #if 0 @@ -62,7 +80,7 @@ #endif -long int random (); +long int random (void); /* An improved random number generation package. In addition to the standard rand()/srand() like interface, this package also has a special state info @@ -198,7 +216,7 @@ static int rand_type = TYPE_3; static int rand_deg = DEG_3; static int rand_sep = SEP_3; -static long int *end_ptr = &randtbl[ARRAY_SIZE (randtbl)]; +static long int *end_ptr = &randtbl[sizeof(randtbl) / sizeof(randtbl[0])]; /* Initialize the random number generator based on the given seed. If the type is the trivial no-state-information type, just remember the seed. @@ -209,8 +227,7 @@ static long int *end_ptr = &randtbl[ARRAY_SIZE (randtbl)]; introduced by the L.C.R.N.G. Note that the initialization of randtbl[] for default usage relies on values produced by this routine. */ void -srandom (x) - unsigned int x; +srandom (unsigned int x) { state[0] = x; if (rand_type != TYPE_0) @@ -237,10 +254,7 @@ srandom (x) setstate so that it doesn't matter when initstate is called. Returns a pointer to the old state. */ PTR -initstate (seed, arg_state, n) - unsigned int seed; - PTR arg_state; - unsigned long n; +initstate (unsigned int seed, PTR arg_state, unsigned long n) { PTR ostate = (PTR) &state[-1]; @@ -306,8 +320,7 @@ initstate (seed, arg_state, n) Returns a pointer to the old state information. */ PTR -setstate (arg_state) - PTR arg_state; +setstate (PTR arg_state) { register long int *new_state = (long int *) arg_state; register int type = new_state[0] % MAX_TYPES; @@ -360,7 +373,7 @@ setstate (arg_state) pointer if the front one has wrapped. Returns a 31-bit random number. */ long int -random () +random (void) { if (rand_type == TYPE_0) {