OpenTTD Source
20241108-master-g80f628063a
|
Pseudo random number generator. More...
Go to the source code of this file.
Data Structures | |
struct | Randomizer |
Structure to encapsulate the pseudo random number generators. More... | |
struct | SavedRandomSeeds |
Stores the state of all random number generators. More... | |
Functions | |
static constexpr uint32_t | ScaleToLimit (uint32_t value, uint32_t limit) |
Scale a uint32_t number to be within the range [0,limit). More... | |
void | SaveRandomSeeds (SavedRandomSeeds *storage) |
Saves the current seeds. More... | |
void | RestoreRandomSeeds (const SavedRandomSeeds &storage) |
Restores previously saved seeds. More... | |
void | SetRandomSeed (uint32_t seed) |
(Re)set the state of the random number generators. More... | |
uint32_t | Random ([[maybe_unused]] const std::source_location location=std::source_location::current()) |
uint32_t | RandomRange (uint32_t limit, const std::source_location location=std::source_location::current()) |
Pick a random number between 0 and limit - 1, inclusive. More... | |
uint32_t | InteractiveRandom () |
uint32_t | InteractiveRandomRange (uint32_t limit) |
bool | Chance16I (const uint32_t a, const uint32_t b, const uint32_t r) |
Checks if a given randomize-number is below a given probability. More... | |
bool | Chance16 (const uint32_t a, const uint32_t b, const std::source_location location=std::source_location::current()) |
Flips a coin with given probability. More... | |
bool | Chance16R (const uint32_t a, const uint32_t b, uint32_t &r, const std::source_location location=std::source_location::current()) |
Flips a coin with a given probability and saves the randomize-number in a variable. More... | |
void | RandomBytesWithFallback (std::span< uint8_t > buf) |
Fill the given buffer with random bytes. More... | |
Variables | |
Randomizer | _random |
Random used in the game state calculations. | |
Randomizer | _interactive_random |
Random used everywhere else, where it does not (directly) influence the game state. | |
Pseudo random number generator.
Definition in file random_func.hpp.
|
inline |
Flips a coin with given probability.
This function returns true with (a/b) probability.
a | The nominator of the fraction |
b | The denominator of the fraction |
Definition at line 134 of file random_func.hpp.
References Chance16I().
Referenced by Disaster_Helicopter_Init(), DisasterTick_Submarine(), FindSubsidyCargoDestination(), IsRoadAllowedHere(), SetupFarmFieldFence(), and TownActionBribe().
|
inline |
Checks if a given randomize-number is below a given probability.
This function is used to check if the given probability by the fraction of (a/b) is greater than low 16 bits of the given randomize-number r.
Do not use this function twice on the same random 16 bits as it will yield the same result. One can use a random number for two calls to Chance16I, where one call sends the low 16 bits and the other the high 16 bits.
a | The numerator of the fraction |
b | The denominator of the fraction, must of course not be null |
r | The given randomize-number |
Definition at line 118 of file random_func.hpp.
Referenced by Chance16().
|
inline |
Flips a coin with a given probability and saves the randomize-number in a variable.
This function uses the same parameters as Chance16. The third parameter must be a variable the randomize-number from Random() is saved in.
The low 16 bits of r will already be used and can therefore not be passed to Chance16I. One can only send the high 16 bits to Chance16I.
a | The numerator of the fraction |
b | The denominator of the fraction |
r | The variable to save the randomize-number from Random() |
Definition at line 154 of file random_func.hpp.
Referenced by AmbientSoundEffectCallback(), HandleCrashedAircraft(), and HandleCrashedTrain().
void RandomBytesWithFallback | ( | std::span< uint8_t > | buf | ) |
Fill the given buffer with random bytes.
This function will attempt to use a cryptographically-strong random generator, but will fall back to a weaker random generator if none is available.
In the end, the buffer will always be filled with some form of random bytes when this function returns.
buf | The buffer to fill with random bytes. |
Definition at line 95 of file random_func.cpp.
References Debug.
Referenced by X25519SecretKey::CreateRandom(), X25519Nonce::CreateRandom(), GenerateUid(), and X25519AuthenticationHandler::SendResponse().
|
inline |
Pick a random number between 0 and limit - 1, inclusive.
That means 0 can be returned and limit - 1 can be returned, but limit can not be returned.
limit | Limit for the range to be picked from. |
Definition at line 88 of file random_func.hpp.
References ScaleToLimit().
Referenced by Vehicle::Crash(), FindSubsidyIndustryCargoRoute(), FindSubsidyPassengerRoute(), Industry::GetRandom(), Town::GetRandom(), CYapfFollowShipT< Types >::GetRandomTrackdir(), FlowStat::GetVia(), FlowStat::GetViaWithRestricted(), GrowTownWithBridge(), RandomDiagDir(), RandomHeight(), IndustryBuildData::SetupTargetCount(), StationCargoList::Truncate(), and IndustryBuildData::TryBuildNewIndustry().
|
inline |
Restores previously saved seeds.
storage | Storage where SaveRandomSeeds() stored th seeds |
Definition at line 65 of file random_func.hpp.
References _interactive_random, and _random.
Referenced by CmdAutoreplaceVehicle().
|
inline |
Saves the current seeds.
storage | Storage for saving |
Definition at line 55 of file random_func.hpp.
References _interactive_random, and _random.
Referenced by CmdAutoreplaceVehicle(), and StartupOneEngine().
|
staticconstexpr |
Scale a uint32_t number to be within the range [0,limit).
value | The value to scale. |
limit | The limit to scale to. |
Definition at line 19 of file random_func.hpp.
Referenced by Randomizer::Next(), and RandomRange().
void SetRandomSeed | ( | uint32_t | seed | ) |
(Re)set the state of the random number generators.
seed | the new state |
Definition at line 66 of file random_func.cpp.
References _interactive_random, _random, and Randomizer::SetSeed().
Referenced by StartupOneEngine().