Line data Source code
1 : /*------------------------------------------------------------------------
2 : *
3 : * geqo_random.c
4 : * random number generator
5 : *
6 : * Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
7 : * Portions Copyright (c) 1994, Regents of the University of California
8 : *
9 : * src/backend/optimizer/geqo/geqo_random.c
10 : *
11 : *-------------------------------------------------------------------------
12 : */
13 :
14 : #include "postgres.h"
15 :
16 : #include "optimizer/geqo_random.h"
17 :
18 : void
19 7 : geqo_set_seed(PlannerInfo *root, double seed)
20 : {
21 7 : GeqoPrivateData *private = GetGeqoPrivateData(root);
22 :
23 7 : pg_prng_fseed(&private->random_state, seed);
24 7 : }
25 :
26 : double
27 754 : geqo_rand(PlannerInfo *root)
28 : {
29 754 : GeqoPrivateData *private = GetGeqoPrivateData(root);
30 :
31 1508 : return pg_prng_double(&private->random_state);
32 754 : }
33 :
34 : int
35 985 : geqo_randint(PlannerInfo *root, int upper, int lower)
36 : {
37 985 : GeqoPrivateData *private = GetGeqoPrivateData(root);
38 :
39 : /*
40 : * In current usage, "lower" is never negative so we can just use
41 : * pg_prng_uint64_range directly.
42 : */
43 1970 : return (int) pg_prng_uint64_range(&private->random_state, lower, upper);
44 985 : }
|