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

Functions

template<typename INTEGER = uint64_t, typename RANDOM = std::default_random_engine>
constexpr INTEGER integer (RANDOM &rng=::ghassanpl::random::default_random_engine)
 
template<typename REAL = double, typename RANDOM = std::default_random_engine>
REAL percentage (RANDOM &rng=::ghassanpl::random::default_random_engine)
 
template<typename REAL = double, typename RANDOM = std::default_random_engine>
REAL normal (RANDOM &rng=::ghassanpl::random::default_random_engine)
 
template<typename RANDOM = std::default_random_engine>
uint64_t dice (uint64_t n_sided, RANDOM &rng=::ghassanpl::random::default_random_engine)
 
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)
 
template<uint64_t N_SIDED, typename RANDOM = std::default_random_engine>
requires (N_SIDED >= 2)
uint64_t dice (RANDOM &rng=::ghassanpl::random::default_random_engine)
 
template<uint64_t N_DICE, uint64_t N_SIDED, typename RANDOM = std::default_random_engine>
requires (N_DICE >= 1 && N_SIDED >= 2)
uint64_t dice (RANDOM &rng=::ghassanpl::random::default_random_engine)
 
template<typename RANDOM = std::default_random_engine>
bool coin (RANDOM &rng=::ghassanpl::random::default_random_engine)
 
template<typename RANDOM = std::default_random_engine, typename T >
requires is_any_of_v<T, short, int, long, long long, unsigned short, unsigned int, unsigned long, unsigned long long>
in_integer_range (T from, T to, RANDOM &rng=::ghassanpl::random::default_random_engine)
 
template<typename RANDOM = std::default_random_engine, std::floating_point T>
in_real_range (T from, 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<std::floating_point T = float>
constexprhalton_sequence (size_t index, size_t base=2)
 TODO: Should we move the below to random_seq?
 
template<typename RANDOM = std::default_random_engine>
bool with_probability (double probability, RANDOM &rng=::ghassanpl::random::default_random_engine)
 
template<typename RANDOM = std::default_random_engine>
bool with_probability (double probability, double &result, RANDOM &rng=::ghassanpl::random::default_random_engine)
 
template<typename RANDOM = std::default_random_engine>
bool one_in (size_t n, RANDOM &rng=::ghassanpl::random::default_random_engine)
 
template<typename RANDOM = std::default_random_engine, typename T >
void shuffle (T &cont, RANDOM &rng=::ghassanpl::random::default_random_engine)
 
template<typename RANDOM = std::default_random_engine, typename T >
requires std::ranges::sized_range<T>
auto iterator (T &cont, RANDOM &rng=::ghassanpl::random::default_random_engine)
 
template<typename RANDOM = std::default_random_engine, typename T , typename PRED >
requires std::ranges::sized_range<T>
auto iterator_if (T &cont, PRED &&pred, RANDOM &rng=::ghassanpl::random::default_random_engine)
 
template<typename RANDOM = std::default_random_engine, typename T >
auto index (T &cont, RANDOM &rng=::ghassanpl::random::default_random_engine)
 
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)
 
template<typename RANDOM = std::default_random_engine, typename T >
autoelement (T &cont, RANDOM &rng=::ghassanpl::random::default_random_engine)
 
template<typename RANDOM = std::default_random_engine, typename T , typename PRED >
autoelement_if (T &cont, PRED &&predicate, RANDOM &rng=::ghassanpl::random::default_random_engine)
 
template<typename... T>
auto one_of (T &&... values)
 
template<typename RANDOM = std::default_random_engine, typename T >
auto one_of (std::initializer_list< T > values, RANDOM &rng=::ghassanpl::random::default_random_engine)
 
template<typename RANDOM = std::default_random_engine, typename T >
auto make_bag_randomizer (T &container, RANDOM &rng=::ghassanpl::random::default_random_engine)
 TODO: random_range()
 
template<std::convertible_to< double > T, typename RANDOM >
size_t option_with_probability (std::span< T const > option_probabilities, RANDOM &rng=::ghassanpl::random::default_random_engine)
 When probability calculations are known ahead of time or expensive \complexity O(N) space, O(N+logN) time TODO: Check if works with known-sized spans.
 
template<typename RANGE , typename FUNC , typename RANDOM >
auto iterator_with_probability (RANGE &&range, FUNC &&prob_func, RANDOM &rng=::ghassanpl::random::default_random_engine)
 For cheap probability functions.
 
template<std::floating_point T = float, typename RANDOM = std::default_random_engine>
radians (RANDOM &rng=::ghassanpl::random::default_random_engine)
 
template<std::floating_point T = float, typename RANDOM = std::default_random_engine>
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)
 TODO: in(circle), in(poly)?, on(rect), on(circle), on(arc)
 
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)
 TODO: Should we move the below to random_seq?
 

Variables

thread_local std::default_random_engine default_random_engine
 TODO: Tests check out https://github.com/effolkronium/random/.
 
template<class T , class... TYPES>
constexpr bool is_any_of_v
 

Detailed Description

Function Documentation

◆ coin()

template<typename RANDOM = std::default_random_engine>
bool ghassanpl::random::coin ( RANDOM rng = ::ghassanpl::random::default_random_engine)

Definition at line 79 of file random.h.

◆ degrees()

template<std::floating_point T = float, typename RANDOM = std::default_random_engine>
T ghassanpl::random::degrees ( RANDOM rng = ::ghassanpl::random::default_random_engine)

Definition at line 23 of file random_geom.h.

◆ diagonal_neighbor()

template<typename RANDOM = std::default_random_engine>
glm::ivec2 ghassanpl::random::diagonal_neighbor ( RANDOM rng = ::ghassanpl::random::default_random_engine)

Definition at line 135 of file random_geom.h.

◆ dice() [1/4]

template<uint64_t N_SIDED, typename RANDOM = std::default_random_engine>
requires (N_SIDED >= 2)
uint64_t ghassanpl::random::dice ( RANDOM rng = ::ghassanpl::random::default_random_engine)

Definition at line 61 of file random.h.

◆ dice() [2/4]

template<uint64_t N_DICE, uint64_t N_SIDED, typename RANDOM = std::default_random_engine>
requires (N_DICE >= 1 && N_SIDED >= 2)
uint64_t ghassanpl::random::dice ( RANDOM rng = ::ghassanpl::random::default_random_engine)

Definition at line 69 of file random.h.

◆ dice() [3/4]

template<typename RANDOM = std::default_random_engine>
uint64_t ghassanpl::random::dice ( uint64_t  n_dice,
uint64_t  n_sided,
RANDOM rng = ::ghassanpl::random::default_random_engine 
)

Definition at line 49 of file random.h.

◆ dice() [4/4]

template<typename RANDOM = std::default_random_engine>
uint64_t ghassanpl::random::dice ( uint64_t  n_sided,
RANDOM rng = ::ghassanpl::random::default_random_engine 
)

Definition at line 41 of file random.h.

◆ element()

template<typename RANDOM = std::default_random_engine, typename T >
auto * ghassanpl::random::element ( T &  cont,
RANDOM rng = ::ghassanpl::random::default_random_engine 
)

Definition at line 233 of file random.h.

◆ element_if()

template<typename RANDOM = std::default_random_engine, typename T , typename PRED >
auto * ghassanpl::random::element_if ( T &  cont,
PRED &&  predicate,
RANDOM rng = ::ghassanpl::random::default_random_engine 
)

Definition at line 241 of file random.h.

◆ halton_sequence()

template<std::floating_point T = float>
constexpr T ghassanpl::random::halton_sequence ( size_t  index,
size_t  base = 2 
)
constexpr

TODO: Should we move the below to random_seq?

Definition at line 149 of file random.h.

◆ halton_sequence_2d()

template<std::floating_point T = float>
constexpr glm::tvec2< T > ghassanpl::random::halton_sequence_2d ( size_t  index,
size_t  base_x = 2,
size_t  base_y = 3 
)
constexpr

TODO: Should we move the below to random_seq?

Returns the nth quasi-random vector in the [0, 1]^2 space.

Definition at line 170 of file random_geom.h.

◆ in_integer_range()

template<typename RANDOM = std::default_random_engine, typename T >
requires is_any_of_v<T, short, int, long, long long, unsigned short, unsigned int, unsigned long, unsigned long long>
T ghassanpl::random::in_integer_range ( from,
to,
RANDOM rng = ::ghassanpl::random::default_random_engine 
)

Definition at line 102 of file random.h.

◆ in_range()

template<typename RANDOM = std::default_random_engine, typename T >
auto ghassanpl::random::in_range ( from,
to,
RANDOM rng = ::ghassanpl::random::default_random_engine 
)

Definition at line 118 of file random.h.

◆ in_real_range()

template<typename RANDOM = std::default_random_engine, std::floating_point T>
T ghassanpl::random::in_real_range ( from,
to,
RANDOM rng = ::ghassanpl::random::default_random_engine 
)

Definition at line 110 of file random.h.

◆ index()

template<typename RANDOM = std::default_random_engine, typename T >
auto ghassanpl::random::index ( T &  cont,
RANDOM rng = ::ghassanpl::random::default_random_engine 
)

Definition at line 221 of file random.h.

◆ index_if()

template<typename RANDOM = std::default_random_engine, typename T , typename PRED >
auto ghassanpl::random::index_if ( T &  cont,
PRED &&  pred,
RANDOM rng = ::ghassanpl::random::default_random_engine 
)

Definition at line 227 of file random.h.

◆ integer()

template<typename INTEGER = uint64_t, typename RANDOM = std::default_random_engine>
constexpr INTEGER ghassanpl::random::integer ( RANDOM rng = ::ghassanpl::random::default_random_engine)
constexpr

Definition at line 20 of file random.h.

◆ iterator()

template<typename RANDOM = std::default_random_engine, typename T >
requires std::ranges::sized_range<T>
auto ghassanpl::random::iterator ( T &  cont,
RANDOM rng = ::ghassanpl::random::default_random_engine 
)

Definition at line 192 of file random.h.

◆ iterator_if()

template<typename RANDOM = std::default_random_engine, typename T , typename PRED >
requires std::ranges::sized_range<T>
auto ghassanpl::random::iterator_if ( T &  cont,
PRED &&  pred,
RANDOM rng = ::ghassanpl::random::default_random_engine 
)

Definition at line 201 of file random.h.

◆ iterator_with_probability()

auto ghassanpl::random::iterator_with_probability ( RANGE &&  range,
FUNC &&  prob_func,
RANDOM rng = ::ghassanpl::random::default_random_engine 
)

For cheap probability functions.

Precondition
prob_func will never return < 0.0 \complexity O(1) space, O(2N) time

Definition at line 308 of file random.h.

◆ make_bag_randomizer()

template<typename RANDOM = std::default_random_engine, typename T >
auto ghassanpl::random::make_bag_randomizer ( T &  container,
RANDOM rng = ::ghassanpl::random::default_random_engine 
)

TODO: random_range()

TODO: template <typename T> T enum_value(enum_flags<T> set);

Definition at line 270 of file random.h.

◆ neighbor()

template<typename RANDOM = std::default_random_engine>
glm::ivec2 ghassanpl::random::neighbor ( RANDOM rng = ::ghassanpl::random::default_random_engine)

TODO: in(circle), in(poly)?, on(rect), on(circle), on(arc)

Definition at line 121 of file random_geom.h.

◆ normal()

template<typename REAL = double, typename RANDOM = std::default_random_engine>
REAL ghassanpl::random::normal ( RANDOM rng = ::ghassanpl::random::default_random_engine)

Definition at line 34 of file random.h.

◆ one_in()

template<typename RANDOM = std::default_random_engine>
bool ghassanpl::random::one_in ( size_t  n,
RANDOM rng = ::ghassanpl::random::default_random_engine 
)

Definition at line 176 of file random.h.

◆ one_of() [1/2]

template<typename RANDOM = std::default_random_engine, typename T >
auto ghassanpl::random::one_of ( std::initializer_list< T >  values,
RANDOM rng = ::ghassanpl::random::default_random_engine 
)

Definition at line 258 of file random.h.

◆ one_of() [2/2]

template<typename... T>
auto ghassanpl::random::one_of ( T &&...  values)

Definition at line 249 of file random.h.

◆ option_with_probability()

template<std::convertible_to< double > T, typename RANDOM >
size_t ghassanpl::random::option_with_probability ( std::span< T const option_probabilities,
RANDOM rng = ::ghassanpl::random::default_random_engine 
)

When probability calculations are known ahead of time or expensive \complexity O(N) space, O(N+logN) time TODO: Check if works with known-sized spans.

Definition at line 297 of file random.h.

◆ percentage()

template<typename REAL = double, typename RANDOM = std::default_random_engine>
REAL ghassanpl::random::percentage ( RANDOM rng = ::ghassanpl::random::default_random_engine)

Definition at line 27 of file random.h.

◆ point_in() [1/5]

template<typename T , typename RANDOM = std::default_random_engine>
glm::tvec2< T > ghassanpl::random::point_in ( geometry::immutable::tpolygon< T > const poly,
RANDOM rng = ::ghassanpl::random::default_random_engine 
)

Definition at line 66 of file random_geom.h.

◆ point_in() [2/5]

template<typename T , typename RANDOM = std::default_random_engine>
glm::tvec2< T > ghassanpl::random::point_in ( geometry::tellipse< T > const el,
RANDOM rng = ::ghassanpl::random::default_random_engine 
)

TODO: This doesn't seem uniform.

Definition at line 49 of file random_geom.h.

◆ point_in() [3/5]

template<typename T , typename RANDOM = std::default_random_engine>
glm::tvec2< T > ghassanpl::random::point_in ( geometry::ttriangle< T > const tr,
RANDOM rng = ::ghassanpl::random::default_random_engine 
)

Definition at line 57 of file random_geom.h.

◆ point_in() [4/5]

template<typename T , typename RANDOM = std::default_random_engine>
glm::tvec2< T > ghassanpl::random::point_in ( glm::tvec2< T > const max,
RANDOM rng = ::ghassanpl::random::default_random_engine 
)

Definition at line 42 of file random_geom.h.

◆ point_in() [5/5]

template<typename T , typename RANDOM = std::default_random_engine>
glm::tvec2< T > ghassanpl::random::point_in ( trec2< T > const rect,
RANDOM rng = ::ghassanpl::random::default_random_engine 
)

Definition at line 36 of file random_geom.h.

◆ point_on()

template<typename T , geometry::shape< T > S, typename RANDOM = std::default_random_engine>
glm::tvec2< T > ghassanpl::random::point_on ( S const shape,
RANDOM rng = ::ghassanpl::random::default_random_engine 
)

Returns a random point on the edge of the shape.

Definition at line 88 of file random_geom.h.

◆ radians()

template<std::floating_point T = float, typename RANDOM = std::default_random_engine>
T ghassanpl::random::radians ( RANDOM rng = ::ghassanpl::random::default_random_engine)

Definition at line 16 of file random_geom.h.

◆ shuffle()

template<typename RANDOM = std::default_random_engine, typename T >
void ghassanpl::random::shuffle ( T &  cont,
RANDOM rng = ::ghassanpl::random::default_random_engine 
)

Definition at line 183 of file random.h.

◆ surrounding()

template<typename RANDOM = std::default_random_engine>
glm::ivec2 ghassanpl::random::surrounding ( RANDOM rng = ::ghassanpl::random::default_random_engine)

Definition at line 149 of file random_geom.h.

◆ unit_vector()

template<std::floating_point T = float, typename RANDOM = std::default_random_engine>
glm::tvec2< T > ghassanpl::random::unit_vector ( RANDOM rng = ::ghassanpl::random::default_random_engine)

Definition at line 30 of file random_geom.h.

◆ with_probability() [1/2]

template<typename RANDOM = std::default_random_engine>
bool ghassanpl::random::with_probability ( double  probability,
double result,
RANDOM rng = ::ghassanpl::random::default_random_engine 
)

Definition at line 169 of file random.h.

◆ with_probability() [2/2]

template<typename RANDOM = std::default_random_engine>
bool ghassanpl::random::with_probability ( double  probability,
RANDOM rng = ::ghassanpl::random::default_random_engine 
)

Definition at line 163 of file random.h.

Variable Documentation

◆ default_random_engine

thread_local std::default_random_engine ghassanpl::random::default_random_engine
inline

TODO: Tests check out https://github.com/effolkronium/random/.

Definition at line 17 of file random.h.

◆ is_any_of_v

template<class T , class... TYPES>
constexpr bool ghassanpl::random::is_any_of_v
inlineconstexpr

Definition at line 98 of file random.h.