20#ifndef ORES_UTILITY_GENERATION_GENERATION_ENGINE_HPP
21#define ORES_UTILITY_GENERATION_GENERATION_ENGINE_HPP
30#include <boost/uuid/uuid.hpp>
32namespace ores::utility::generation {
56 std::uint64_t
seed()
const {
return seed_; }
72 const T&
pick(
const std::vector<T>& items) {
74 throw std::out_of_range(
"Cannot pick from an empty vector.");
76 std::uniform_int_distribution<std::size_t> dist(0, items.size() - 1);
77 return items[dist(engine_)];
83 template<
typename T, std::
size_t N>
84 const T&
pick(
const std::array<T, N>& items) {
85 static_assert(N > 0,
"Cannot pick from an empty array.");
86 std::uniform_int_distribution<std::size_t> dist(0, N - 1);
87 return items[dist(engine_)];
98 std::chrono::system_clock::time_point
past_timepoint(
int years_back = 3);
107 std::mt19937_64 engine_;
Random generation engine with seed-controlled repeatability.
Definition generation_engine.hpp:41
generation_engine()
Constructs an engine with a random seed.
Definition generation_engine.cpp:27
std::string alphanumeric(std::size_t length)
Generates an alphanumeric string of specified length.
Definition generation_engine.cpp:81
const T & pick(const std::array< T, N > &items)
Picks a random element from an array.
Definition generation_engine.hpp:84
bool random_bool(double probability=0.5)
Generates a random boolean with specified probability of true.
Definition generation_engine.cpp:35
std::uint64_t seed() const
Returns the seed used for this engine.
Definition generation_engine.hpp:56
std::chrono::system_clock::time_point past_timepoint(int years_back=3)
Generates a random timestamp within the past N years.
Definition generation_engine.cpp:75
const T & pick(const std::vector< T > &items)
Picks a random element from a vector.
Definition generation_engine.hpp:72
int random_int(int min, int max)
Generates a random integer in [min, max].
Definition generation_engine.cpp:30
boost::uuids::uuid generate_uuid()
Generates a UUID v7 based on the engine's random state.
Definition generation_engine.cpp:40