mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-08-02 23:43:39 +02:00
grand: formatting cleanups
This commit is contained in:
222
glib/grand.c
222
glib/grand.c
@@ -84,12 +84,13 @@
|
|||||||
*
|
*
|
||||||
* If you just need a random number, you simply call the g_random_*
|
* If you just need a random number, you simply call the g_random_*
|
||||||
* functions, which will create a globally used #GRand and use the
|
* functions, which will create a globally used #GRand and use the
|
||||||
* according g_rand_* functions internally. Whenever you
|
* according g_rand_* functions internally. Whenever you need a
|
||||||
* need a stream of reproducible random numbers, you better create a
|
* stream of reproducible random numbers, you better create a
|
||||||
* #GRand yourself and use the g_rand_* functions directly, which will
|
* #GRand yourself and use the g_rand_* functions directly, which
|
||||||
* also be slightly faster. Initializing a #GRand with a certain seed
|
* will also be slightly faster. Initializing a #GRand with a
|
||||||
* will produce exactly the same series of random numbers on all
|
* certain seed will produce exactly the same series of random
|
||||||
* platforms. This can thus be used as a seed for e.g. games.
|
* numbers on all platforms. This can thus be used as a seed for
|
||||||
|
* e.g. games.
|
||||||
*
|
*
|
||||||
* The g_rand*_range functions will return high quality equally
|
* The g_rand*_range functions will return high quality equally
|
||||||
* distributed random numbers, whereas for example the
|
* distributed random numbers, whereas for example the
|
||||||
@@ -97,23 +98,24 @@
|
|||||||
* doesn't yield equally distributed numbers.
|
* doesn't yield equally distributed numbers.
|
||||||
*
|
*
|
||||||
* GLib changed the seeding algorithm for the pseudo-random number
|
* GLib changed the seeding algorithm for the pseudo-random number
|
||||||
* generator Mersenne Twister, as used by #GRand and #GRandom.
|
* generator Mersenne Twister, as used by #GRand. This was necessary,
|
||||||
* This was necessary, because some seeds would yield very bad
|
* because some seeds would yield very bad pseudo-random streams.
|
||||||
* pseudo-random streams. Also the pseudo-random integers generated
|
* Also the pseudo-random integers generated by g_rand*_int_range()
|
||||||
* by g_rand*_int_range() will have a slightly better equal
|
* will have a slightly better equal distribution with the new
|
||||||
* distribution with the new version of GLib.
|
* version of GLib.
|
||||||
*
|
*
|
||||||
* The original seeding and generation algorithms, as found in GLib
|
* The original seeding and generation algorithms, as found in
|
||||||
* 2.0.x, can be used instead of the new ones by setting the
|
* GLib 2.0.x, can be used instead of the new ones by setting the
|
||||||
* environment variable <envar>G_RANDOM_VERSION</envar> to the value of
|
* environment variable <envar>G_RANDOM_VERSION</envar> to the value
|
||||||
* '2.0'. Use the GLib-2.0 algorithms only if you have sequences of
|
* of '2.0'. Use the GLib-2.0 algorithms only if you have sequences
|
||||||
* numbers generated with Glib-2.0 that you need to reproduce exactly.
|
* of numbers generated with Glib-2.0 that you need to reproduce
|
||||||
**/
|
* exactly.
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GRand:
|
* GRand:
|
||||||
*
|
*
|
||||||
* The #GRand struct is an opaque data structure. It should only be
|
* The GRand struct is an opaque data structure. It should only be
|
||||||
* accessed through the g_rand_* functions.
|
* accessed through the g_rand_* functions.
|
||||||
**/
|
**/
|
||||||
|
|
||||||
@@ -168,11 +170,11 @@ struct _GRand
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* g_rand_new_with_seed:
|
* g_rand_new_with_seed:
|
||||||
* @seed: a value to initialize the random number generator.
|
* @seed: a value to initialize the random number generator
|
||||||
*
|
*
|
||||||
* Creates a new random number generator initialized with @seed.
|
* Creates a new random number generator initialized with @seed.
|
||||||
*
|
*
|
||||||
* Return value: the new #GRand.
|
* Return value: the new #GRand
|
||||||
**/
|
**/
|
||||||
GRand*
|
GRand*
|
||||||
g_rand_new_with_seed (guint32 seed)
|
g_rand_new_with_seed (guint32 seed)
|
||||||
@@ -184,17 +186,19 @@ g_rand_new_with_seed (guint32 seed)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* g_rand_new_with_seed_array:
|
* g_rand_new_with_seed_array:
|
||||||
* @seed: an array of seeds to initialize the random number generator.
|
* @seed: an array of seeds to initialize the random number generator
|
||||||
* @seed_length: an array of seeds to initialize the random number generator.
|
* @seed_length: an array of seeds to initialize the random number
|
||||||
|
* generator
|
||||||
*
|
*
|
||||||
* Creates a new random number generator initialized with @seed.
|
* Creates a new random number generator initialized with @seed.
|
||||||
*
|
*
|
||||||
* Return value: the new #GRand.
|
* Return value: the new #GRand
|
||||||
*
|
*
|
||||||
* Since: 2.4
|
* Since: 2.4
|
||||||
**/
|
*/
|
||||||
GRand*
|
GRand*
|
||||||
g_rand_new_with_seed_array (const guint32 *seed, guint seed_length)
|
g_rand_new_with_seed_array (const guint32 *seed,
|
||||||
|
guint seed_length)
|
||||||
{
|
{
|
||||||
GRand *rand = g_new0 (GRand, 1);
|
GRand *rand = g_new0 (GRand, 1);
|
||||||
g_rand_set_seed_array (rand, seed, seed_length);
|
g_rand_set_seed_array (rand, seed, seed_length);
|
||||||
@@ -206,11 +210,12 @@ g_rand_new_with_seed_array (const guint32 *seed, guint seed_length)
|
|||||||
*
|
*
|
||||||
* Creates a new random number generator initialized with a seed taken
|
* Creates a new random number generator initialized with a seed taken
|
||||||
* either from <filename>/dev/urandom</filename> (if existing) or from
|
* either from <filename>/dev/urandom</filename> (if existing) or from
|
||||||
* the current time (as a fallback). On Windows, the seed is taken from
|
* the current time (as a fallback).
|
||||||
* rand_s().
|
*
|
||||||
|
* On Windows, the seed is taken from rand_s().
|
||||||
*
|
*
|
||||||
* Return value: the new #GRand.
|
* Return value: the new #GRand
|
||||||
**/
|
*/
|
||||||
GRand*
|
GRand*
|
||||||
g_rand_new (void)
|
g_rand_new (void)
|
||||||
{
|
{
|
||||||
@@ -270,12 +275,12 @@ g_rand_new (void)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* g_rand_free:
|
* g_rand_free:
|
||||||
* @rand_: a #GRand.
|
* @rand_: a #GRand
|
||||||
*
|
*
|
||||||
* Frees the memory allocated for the #GRand.
|
* Frees the memory allocated for the #GRand.
|
||||||
**/
|
*/
|
||||||
void
|
void
|
||||||
g_rand_free (GRand* rand)
|
g_rand_free (GRand *rand)
|
||||||
{
|
{
|
||||||
g_return_if_fail (rand != NULL);
|
g_return_if_fail (rand != NULL);
|
||||||
|
|
||||||
@@ -284,18 +289,18 @@ g_rand_free (GRand* rand)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* g_rand_copy:
|
* g_rand_copy:
|
||||||
* @rand_: a #GRand.
|
* @rand_: a #GRand
|
||||||
*
|
*
|
||||||
* Copies a #GRand into a new one with the same exact state as before.
|
* Copies a #GRand into a new one with the same exact state as before.
|
||||||
* This way you can take a snapshot of the random number generator for
|
* This way you can take a snapshot of the random number generator for
|
||||||
* replaying later.
|
* replaying later.
|
||||||
*
|
*
|
||||||
* Return value: the new #GRand.
|
* Return value: the new #GRand
|
||||||
*
|
*
|
||||||
* Since: 2.4
|
* Since: 2.4
|
||||||
**/
|
*/
|
||||||
GRand *
|
GRand*
|
||||||
g_rand_copy (GRand* rand)
|
g_rand_copy (GRand *rand)
|
||||||
{
|
{
|
||||||
GRand* new_rand;
|
GRand* new_rand;
|
||||||
|
|
||||||
@@ -309,13 +314,14 @@ g_rand_copy (GRand* rand)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* g_rand_set_seed:
|
* g_rand_set_seed:
|
||||||
* @rand_: a #GRand.
|
* @rand_: a #GRand
|
||||||
* @seed: a value to reinitialize the random number generator.
|
* @seed: a value to reinitialize the random number generator
|
||||||
*
|
*
|
||||||
* Sets the seed for the random number generator #GRand to @seed.
|
* Sets the seed for the random number generator #GRand to @seed.
|
||||||
**/
|
*/
|
||||||
void
|
void
|
||||||
g_rand_set_seed (GRand* rand, guint32 seed)
|
g_rand_set_seed (GRand *rand,
|
||||||
|
guint32 seed)
|
||||||
{
|
{
|
||||||
g_return_if_fail (rand != NULL);
|
g_return_if_fail (rand != NULL);
|
||||||
|
|
||||||
@@ -352,20 +358,22 @@ g_rand_set_seed (GRand* rand, guint32 seed)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* g_rand_set_seed_array:
|
* g_rand_set_seed_array:
|
||||||
* @rand_: a #GRand.
|
* @rand_: a #GRand
|
||||||
* @seed: array to initialize with
|
* @seed: array to initialize with
|
||||||
* @seed_length: length of array
|
* @seed_length: length of array
|
||||||
*
|
*
|
||||||
* Initializes the random number generator by an array of longs.
|
* Initializes the random number generator by an array of longs.
|
||||||
* Array can be of arbitrary size, though only the
|
* Array can be of arbitrary size, though only the first 624 values
|
||||||
* first 624 values are taken. This function is useful
|
* are taken. This function is useful if you have many low entropy
|
||||||
* if you have many low entropy seeds, or if you require more then
|
* seeds, or if you require more then 32 bits of actual entropy for
|
||||||
* 32 bits of actual entropy for your application.
|
* your application.
|
||||||
*
|
*
|
||||||
* Since: 2.4
|
* Since: 2.4
|
||||||
**/
|
*/
|
||||||
void
|
void
|
||||||
g_rand_set_seed_array (GRand* rand, const guint32 *seed, guint seed_length)
|
g_rand_set_seed_array (GRand *rand,
|
||||||
|
const guint32 *seed,
|
||||||
|
guint seed_length)
|
||||||
{
|
{
|
||||||
int i, j, k;
|
int i, j, k;
|
||||||
|
|
||||||
@@ -410,24 +418,24 @@ g_rand_set_seed_array (GRand* rand, const guint32 *seed, guint seed_length)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* g_rand_boolean:
|
* g_rand_boolean:
|
||||||
* @rand_: a #GRand.
|
* @rand_: a #GRand
|
||||||
*
|
*
|
||||||
* Returns a random #gboolean from @rand_. This corresponds to a
|
* Returns a random #gboolean from @rand_.
|
||||||
* unbiased coin toss.
|
* This corresponds to a unbiased coin toss.
|
||||||
*
|
*
|
||||||
* Returns: a random #gboolean.
|
* Returns: a random #gboolean
|
||||||
**/
|
*/
|
||||||
/**
|
/**
|
||||||
* g_rand_int:
|
* g_rand_int:
|
||||||
* @rand_: a #GRand.
|
* @rand_: a #GRand
|
||||||
*
|
*
|
||||||
* Returns the next random #guint32 from @rand_ equally distributed over
|
* Returns the next random #guint32 from @rand_ equally distributed over
|
||||||
* the range [0..2^32-1].
|
* the range [0..2^32-1].
|
||||||
*
|
*
|
||||||
* Return value: A random number.
|
* Return value: a random number
|
||||||
**/
|
*/
|
||||||
guint32
|
guint32
|
||||||
g_rand_int (GRand* rand)
|
g_rand_int (GRand *rand)
|
||||||
{
|
{
|
||||||
guint32 y;
|
guint32 y;
|
||||||
static const guint32 mag01[2]={0x0, MATRIX_A};
|
static const guint32 mag01[2]={0x0, MATRIX_A};
|
||||||
@@ -438,11 +446,11 @@ g_rand_int (GRand* rand)
|
|||||||
if (rand->mti >= N) { /* generate N words at one time */
|
if (rand->mti >= N) { /* generate N words at one time */
|
||||||
int kk;
|
int kk;
|
||||||
|
|
||||||
for (kk=0;kk<N-M;kk++) {
|
for (kk = 0; kk < N - M; kk++) {
|
||||||
y = (rand->mt[kk]&UPPER_MASK)|(rand->mt[kk+1]&LOWER_MASK);
|
y = (rand->mt[kk]&UPPER_MASK)|(rand->mt[kk+1]&LOWER_MASK);
|
||||||
rand->mt[kk] = rand->mt[kk+M] ^ (y >> 1) ^ mag01[y & 0x1];
|
rand->mt[kk] = rand->mt[kk+M] ^ (y >> 1) ^ mag01[y & 0x1];
|
||||||
}
|
}
|
||||||
for (;kk<N-1;kk++) {
|
for (; kk < N - 1; kk++) {
|
||||||
y = (rand->mt[kk]&UPPER_MASK)|(rand->mt[kk+1]&LOWER_MASK);
|
y = (rand->mt[kk]&UPPER_MASK)|(rand->mt[kk+1]&LOWER_MASK);
|
||||||
rand->mt[kk] = rand->mt[kk+(M-N)] ^ (y >> 1) ^ mag01[y & 0x1];
|
rand->mt[kk] = rand->mt[kk+(M-N)] ^ (y >> 1) ^ mag01[y & 0x1];
|
||||||
}
|
}
|
||||||
@@ -466,17 +474,19 @@ g_rand_int (GRand* rand)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* g_rand_int_range:
|
* g_rand_int_range:
|
||||||
* @rand_: a #GRand.
|
* @rand_: a #GRand
|
||||||
* @begin: lower closed bound of the interval.
|
* @begin: lower closed bound of the interval
|
||||||
* @end: upper open bound of the interval.
|
* @end: upper open bound of the interval
|
||||||
*
|
*
|
||||||
* Returns the next random #gint32 from @rand_ equally distributed over
|
* Returns the next random #gint32 from @rand_ equally distributed over
|
||||||
* the range [@begin..@end-1].
|
* the range [@begin..@end-1].
|
||||||
*
|
*
|
||||||
* Return value: A random number.
|
* Return value: a random number
|
||||||
**/
|
*/
|
||||||
gint32
|
gint32
|
||||||
g_rand_int_range (GRand* rand, gint32 begin, gint32 end)
|
g_rand_int_range (GRand *rand,
|
||||||
|
gint32 begin,
|
||||||
|
gint32 end)
|
||||||
{
|
{
|
||||||
guint32 dist = end - begin;
|
guint32 dist = end - begin;
|
||||||
guint32 random;
|
guint32 random;
|
||||||
@@ -491,9 +501,9 @@ g_rand_int_range (GRand* rand, gint32 begin, gint32 end)
|
|||||||
{
|
{
|
||||||
/* This method, which only calls g_rand_int once is only good
|
/* This method, which only calls g_rand_int once is only good
|
||||||
* for (end - begin) <= 2^16, because we only have 32 bits set
|
* for (end - begin) <= 2^16, because we only have 32 bits set
|
||||||
* from the one call to g_rand_int (). */
|
* from the one call to g_rand_int ().
|
||||||
|
*
|
||||||
/* we are using (trans + trans * trans), because g_rand_int only
|
* We are using (trans + trans * trans), because g_rand_int only
|
||||||
* covers [0..2^32-1] and thus g_rand_int * trans only covers
|
* covers [0..2^32-1] and thus g_rand_int * trans only covers
|
||||||
* [0..1-2^-32], but the biggest double < 1 is 1-2^-52.
|
* [0..1-2^-32], but the biggest double < 1 is 1-2^-52.
|
||||||
*/
|
*/
|
||||||
@@ -506,9 +516,10 @@ g_rand_int_range (GRand* rand, gint32 begin, gint32 end)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Now we use g_rand_double_range (), which will set 52 bits for
|
/* Now we use g_rand_double_range (), which will set 52 bits
|
||||||
us, so that it is safe to round and still get a decent
|
* for us, so that it is safe to round and still get a decent
|
||||||
distribution */
|
* distribution
|
||||||
|
*/
|
||||||
random = (gint32) g_rand_double_range (rand, 0, dist);
|
random = (gint32) g_rand_double_range (rand, 0, dist);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -518,7 +529,8 @@ g_rand_int_range (GRand* rand, gint32 begin, gint32 end)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* maxvalue is set to the predecessor of the greatest
|
/* maxvalue is set to the predecessor of the greatest
|
||||||
* multiple of dist less or equal 2^32. */
|
* multiple of dist less or equal 2^32.
|
||||||
|
*/
|
||||||
guint32 maxvalue;
|
guint32 maxvalue;
|
||||||
if (dist <= 0x80000000u) /* 2^31 */
|
if (dist <= 0x80000000u) /* 2^31 */
|
||||||
{
|
{
|
||||||
@@ -547,15 +559,15 @@ g_rand_int_range (GRand* rand, gint32 begin, gint32 end)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* g_rand_double:
|
* g_rand_double:
|
||||||
* @rand_: a #GRand.
|
* @rand_: a #GRand
|
||||||
*
|
*
|
||||||
* Returns the next random #gdouble from @rand_ equally distributed over
|
* Returns the next random #gdouble from @rand_ equally distributed over
|
||||||
* the range [0..1).
|
* the range [0..1).
|
||||||
*
|
*
|
||||||
* Return value: A random number.
|
* Return value: a random number
|
||||||
**/
|
*/
|
||||||
gdouble
|
gdouble
|
||||||
g_rand_double (GRand* rand)
|
g_rand_double (GRand *rand)
|
||||||
{
|
{
|
||||||
/* We set all 52 bits after the point for this, not only the first
|
/* We set all 52 bits after the point for this, not only the first
|
||||||
32. Thats why we need two calls to g_rand_int */
|
32. Thats why we need two calls to g_rand_int */
|
||||||
@@ -572,17 +584,19 @@ g_rand_double (GRand* rand)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* g_rand_double_range:
|
* g_rand_double_range:
|
||||||
* @rand_: a #GRand.
|
* @rand_: a #GRand
|
||||||
* @begin: lower closed bound of the interval.
|
* @begin: lower closed bound of the interval
|
||||||
* @end: upper open bound of the interval.
|
* @end: upper open bound of the interval
|
||||||
*
|
*
|
||||||
* Returns the next random #gdouble from @rand_ equally distributed over
|
* Returns the next random #gdouble from @rand_ equally distributed over
|
||||||
* the range [@begin..@end).
|
* the range [@begin..@end).
|
||||||
*
|
*
|
||||||
* Return value: A random number.
|
* Return value: a random number
|
||||||
**/
|
*/
|
||||||
gdouble
|
gdouble
|
||||||
g_rand_double_range (GRand* rand, gdouble begin, gdouble end)
|
g_rand_double_range (GRand *rand,
|
||||||
|
gdouble begin,
|
||||||
|
gdouble end)
|
||||||
{
|
{
|
||||||
gdouble r;
|
gdouble r;
|
||||||
|
|
||||||
@@ -606,18 +620,19 @@ get_global_random (void)
|
|||||||
/**
|
/**
|
||||||
* g_random_boolean:
|
* g_random_boolean:
|
||||||
*
|
*
|
||||||
* Returns a random #gboolean. This corresponds to a unbiased coin toss.
|
* Returns a random #gboolean.
|
||||||
|
* This corresponds to a unbiased coin toss.
|
||||||
*
|
*
|
||||||
* Returns: a random #gboolean.
|
* Returns: a random #gboolean
|
||||||
**/
|
*/
|
||||||
/**
|
/**
|
||||||
* g_random_int:
|
* g_random_int:
|
||||||
*
|
*
|
||||||
* Return a random #guint32 equally distributed over the range
|
* Return a random #guint32 equally distributed over the range
|
||||||
* [0..2^32-1].
|
* [0..2^32-1].
|
||||||
*
|
*
|
||||||
* Return value: A random number.
|
* Return value: a random number
|
||||||
**/
|
*/
|
||||||
guint32
|
guint32
|
||||||
g_random_int (void)
|
g_random_int (void)
|
||||||
{
|
{
|
||||||
@@ -630,16 +645,17 @@ g_random_int (void)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* g_random_int_range:
|
* g_random_int_range:
|
||||||
* @begin: lower closed bound of the interval.
|
* @begin: lower closed bound of the interval
|
||||||
* @end: upper open bound of the interval.
|
* @end: upper open bound of the interval
|
||||||
*
|
*
|
||||||
* Returns a random #gint32 equally distributed over the range
|
* Returns a random #gint32 equally distributed over the range
|
||||||
* [@begin..@end-1].
|
* [@begin..@end-1].
|
||||||
*
|
*
|
||||||
* Return value: A random number.
|
* Return value: a random number
|
||||||
**/
|
*/
|
||||||
gint32
|
gint32
|
||||||
g_random_int_range (gint32 begin, gint32 end)
|
g_random_int_range (gint32 begin,
|
||||||
|
gint32 end)
|
||||||
{
|
{
|
||||||
gint32 result;
|
gint32 result;
|
||||||
G_LOCK (global_random);
|
G_LOCK (global_random);
|
||||||
@@ -653,8 +669,8 @@ g_random_int_range (gint32 begin, gint32 end)
|
|||||||
*
|
*
|
||||||
* Returns a random #gdouble equally distributed over the range [0..1).
|
* Returns a random #gdouble equally distributed over the range [0..1).
|
||||||
*
|
*
|
||||||
* Return value: A random number.
|
* Return value: a random number
|
||||||
**/
|
*/
|
||||||
gdouble
|
gdouble
|
||||||
g_random_double (void)
|
g_random_double (void)
|
||||||
{
|
{
|
||||||
@@ -667,15 +683,17 @@ g_random_double (void)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* g_random_double_range:
|
* g_random_double_range:
|
||||||
* @begin: lower closed bound of the interval.
|
* @begin: lower closed bound of the interval
|
||||||
* @end: upper open bound of the interval.
|
* @end: upper open bound of the interval
|
||||||
*
|
*
|
||||||
* Returns a random #gdouble equally distributed over the range [@begin..@end).
|
* Returns a random #gdouble equally distributed over the range
|
||||||
|
* [@begin..@end).
|
||||||
*
|
*
|
||||||
* Return value: A random number.
|
* Return value: a random number
|
||||||
**/
|
*/
|
||||||
gdouble
|
gdouble
|
||||||
g_random_double_range (gdouble begin, gdouble end)
|
g_random_double_range (gdouble begin,
|
||||||
|
gdouble end)
|
||||||
{
|
{
|
||||||
double result;
|
double result;
|
||||||
G_LOCK (global_random);
|
G_LOCK (global_random);
|
||||||
@@ -686,11 +704,11 @@ g_random_double_range (gdouble begin, gdouble end)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* g_random_set_seed:
|
* g_random_set_seed:
|
||||||
* @seed: a value to reinitialize the global random number generator.
|
* @seed: a value to reinitialize the global random number generator
|
||||||
*
|
*
|
||||||
* Sets the seed for the global random number generator, which is used
|
* Sets the seed for the global random number generator, which is used
|
||||||
* by the g_random_* functions, to @seed.
|
* by the g_random_* functions, to @seed.
|
||||||
**/
|
*/
|
||||||
void
|
void
|
||||||
g_random_set_seed (guint32 seed)
|
g_random_set_seed (guint32 seed)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user