header_utils
Loading...
Searching...
No Matches
ghassanpl::random Namespace Reference

Classes

struct  good_random_engine
 A good quality random engine that meets the standard library concept of a random bit generator. More...
struct  philox64_engine
 Another good quality random engine, this time based on the philox64 random function. More...

Functions

template<typename INTEGER = uint64_t, typename RANDOM = std::default_random_engine>
constexpr INTEGER integer (RANDOM &rng=::ghassanpl::random::default_random_engine)
 Returns a random integer of the given type.
template<typename REAL = double, typename RANDOM = std::default_random_engine>
REAL percentage (RANDOM &rng=::ghassanpl::random::default_random_engine)
 Returns a random value between 0 and 1 of the given floating-point type.
template<typename REAL = double, typename RANDOM = std::default_random_engine>
REAL normal (RANDOM &rng=::ghassanpl::random::default_random_engine)
 Returns a random value of the given floating-point type in a normal distribution.
template<typename RANDOM = std::default_random_engine>
uint64_t dice (uint64_t n_sided, RANDOM &rng=::ghassanpl::random::default_random_engine)
 Returns the result of throwing an n_sided die (1-N).
template<typename RANDOM = std::default_random_engine>
uint64_t dice (uint64_t n_dice, uint64_t n_sided, RANDOM &rng=::ghassanpl::random::default_random_engine)
 Returns the result of throwing n_dice number of n_sided dice.
template<uint64_t N_SIDED, typename RANDOM = std::default_random_engine>
uint64_t dice (RANDOM &rng=::ghassanpl::random::default_random_engine)
 Returns the result of throwing an N_SIDED die (1-N).
template<uint64_t N_DICE, uint64_t N_SIDED, typename RANDOM = std::default_random_engine>
uint64_t dice (RANDOM &rng=::ghassanpl::random::default_random_engine)
 Returns the result of throwing N_DICE number of N_SIDED dice.
template<typename RANDOM = std::default_random_engine>
bool coin (RANDOM &rng=::ghassanpl::random::default_random_engine)
 Returns true or false randomly.
template<typename RANDOM = std::default_random_engine, std::integral T>
T in_integer_range (T from, T to, RANDOM &rng=::ghassanpl::random::default_random_engine)
template<typename RANDOM = std::default_random_engine, std::integral T>
T in_integer_range (T to, RANDOM &rng=::ghassanpl::random::default_random_engine)
template<typename RANDOM = std::default_random_engine, std::floating_point T>
T in_real_range (T from, T to, RANDOM &rng=::ghassanpl::random::default_random_engine)
template<typename RANDOM = std::default_random_engine, std::floating_point T>
T in_real_range (T to, RANDOM &rng=::ghassanpl::random::default_random_engine)
template<typename RANDOM = std::default_random_engine, typename T>
auto in_range (T from, T to, RANDOM &rng=::ghassanpl::random::default_random_engine)
template<typename T = float>
constexpr T halton_sequence (size_t index, size_t base=2)
template<typename RANDOM = std::default_random_engine>
bool with_probability (double probability, RANDOM &rng=::ghassanpl::random::default_random_engine)
 Returns true with the given 0-1 probability, false otherwise.
template<typename RANDOM = std::default_random_engine>
bool with_probability (double probability, double &result, RANDOM &rng=::ghassanpl::random::default_random_engine)
 Returns true with the given 0-1 probability, false otherwise; stores the result of the 0-1 "roll" in result.
template<typename RANDOM = std::default_random_engine>
bool one_in (size_t n, RANDOM &rng=::ghassanpl::random::default_random_engine)
 Returns true with a one-in-n chance.
template<typename RANDOM = std::default_random_engine, typename T>
void shuffle (T &cont, RANDOM &rng=::ghassanpl::random::default_random_engine)
 Shuffles the cont container (as if by std::shuffle).
template<typename RANDOM = std::default_random_engine, typename T>
auto iterator (T &cont, RANDOM &rng=::ghassanpl::random::default_random_engine)
 Returns an iterator to a random element in cont.
template<typename RANDOM = std::default_random_engine, typename T, typename PRED>
auto iterator_if (T &cont, PRED &&pred, RANDOM &rng=::ghassanpl::random::default_random_engine)
 Returns an iterator to a random element in cont that matches pred.
template<typename RANDOM = std::default_random_engine, typename T>
auto index (T &cont, RANDOM &rng=::ghassanpl::random::default_random_engine)
 Returns an index of a random element in cont.
template<typename RANDOM = std::default_random_engine, typename T, typename PRED>
auto index_if (T &cont, PRED &&pred, RANDOM &rng=::ghassanpl::random::default_random_engine)
 Returns an index of a random element in cont that matches pred.
template<typename RANDOM = std::default_random_engine, typename T>
auto * element (T &cont, RANDOM &rng=::ghassanpl::random::default_random_engine)
 Returns an pointer to a random element in cont.
template<typename RANDOM = std::default_random_engine, typename T, typename PRED>
auto * element_if (T &cont, PRED &&pred, RANDOM &rng=::ghassanpl::random::default_random_engine)
 Returns an pointer to a random element in cont that matches pred.
template<typename... T>
auto one_of (T &&... values)
 Returns one of its arguments at random.
template<typename RANDOM = std::default_random_engine, typename T>
auto one_of (std::initializer_list< T > values, RANDOM &rng=::ghassanpl::random::default_random_engine)
 Returns one of the values in values at random.
template<typename RANDOM = std::default_random_engine, typename T>
auto make_bag_randomizer (T &container, RANDOM &rng=::ghassanpl::random::default_random_engine)
 Returns an object that represents a random "bag" of iterators to objects in container.
template<typename T, typename RANDOM>
size_t option_with_probability (span< T const > option_probabilities, RANDOM &rng=::ghassanpl::random::default_random_engine)
 Returns an index of one of the options in option_probabilities, where its elements are the probability weights of their specific options.
template<typename RANGE, typename FUNC, typename RANDOM>
auto iterator_with_probability (RANGE &&range, FUNC &&prob_func, RANDOM &rng=::ghassanpl::random::default_random_engine)
 Returns an iterator to a random object in range, with the probability weights of an object being chosen given by prob_func(obj).
template<std::floating_point T = float, typename RANDOM = std::default_random_engine>
T radians (RANDOM &rng=::ghassanpl::random::default_random_engine)
template<std::floating_point T = float, typename RANDOM = std::default_random_engine>
T degrees (RANDOM &rng=::ghassanpl::random::default_random_engine)
template<std::floating_point T = float, typename RANDOM = std::default_random_engine>
glm::tvec2< T > unit_vector (RANDOM &rng=::ghassanpl::random::default_random_engine)
template<typename T, typename RANDOM = std::default_random_engine>
glm::tvec2< T > point_in (trec2< T > const &rect, RANDOM &rng=::ghassanpl::random::default_random_engine)
template<typename T, typename RANDOM = std::default_random_engine>
glm::tvec2< T > point_in (glm::tvec2< T > const &max, RANDOM &rng=::ghassanpl::random::default_random_engine)
template<typename T, typename RANDOM = std::default_random_engine>
glm::tvec2< T > point_in (geometry::tellipse< T > const &el, RANDOM &rng=::ghassanpl::random::default_random_engine)
 TODO: This doesn't seem uniform.
template<typename T, typename RANDOM = std::default_random_engine>
glm::tvec2< T > point_in (geometry::ttriangle< T > const &tr, RANDOM &rng=::ghassanpl::random::default_random_engine)
template<typename T, typename RANDOM = std::default_random_engine>
glm::tvec2< T > point_in (geometry::immutable::tpolygon< T > const &poly, RANDOM &rng=::ghassanpl::random::default_random_engine)
template<typename T, geometry::shape< T > S, typename RANDOM = std::default_random_engine>
glm::tvec2< T > point_on (S const &shape, RANDOM &rng=::ghassanpl::random::default_random_engine)
 Returns a random point on the edge of the shape.
template<typename RANDOM = std::default_random_engine>
glm::ivec2 neighbor (RANDOM &rng=::ghassanpl::random::default_random_engine)
template<typename RANDOM = std::default_random_engine>
glm::ivec2 diagonal_neighbor (RANDOM &rng=::ghassanpl::random::default_random_engine)
template<typename RANDOM = std::default_random_engine>
glm::ivec2 surrounding (RANDOM &rng=::ghassanpl::random::default_random_engine)
template<std::floating_point T = float>
constexpr glm::tvec2< T > halton_sequence_2d (size_t index, size_t base_x=2, size_t base_y=3)
 Returns the nth quasi-random vector in the [0, 1]^2 space.
constexpr uint64_t xorshift64 (uint64_t &state) noexcept
constexpr uint64_t numrep_hash (uint64_t index)
constexpr uint64_t philox64 (uint64_t sequence_index, uint32_t sequence_key)

Variables

std::default_random_engine default_random_engine
 A thread-local random engine used by default by all random functions.

Detailed Description