|
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> |
T | 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> |
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> |
constexpr T | halton_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 > |
auto * | element (T &cont, RANDOM &rng=::ghassanpl::random::default_random_engine) |
|
template<typename RANDOM = std::default_random_engine, typename T , typename PRED > |
auto * | element_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> |
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) |
| 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?
|
|