mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-19 13:03:36 +00:00
Make UniformRandom standard-conforming
std::uniform_int_distribution<T> requires sizeof(T) >= sizeof(short) Signed-off-by: Osyotr <Osyotr@users.noreply.github.com>
This commit is contained in:
committed by
Konstantin Pastbin
parent
b1c2b204a1
commit
0ea0f2e49a
@@ -12,12 +12,15 @@ class UniformRandom
|
|||||||
|
|
||||||
std::random_device m_rd;
|
std::random_device m_rd;
|
||||||
std::mt19937 m_gen;
|
std::mt19937 m_gen;
|
||||||
std::uniform_int_distribution<T> m_distr;
|
|
||||||
|
using distribution_int_type =
|
||||||
|
std::conditional_t<sizeof(T) != 1, T, std::conditional_t<std::is_signed_v<T>, short, unsigned short>>;
|
||||||
|
std::uniform_int_distribution<distribution_int_type> m_distr;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
UniformRandom(T min, T max) : m_gen(m_rd()), m_distr(min, max) {}
|
UniformRandom(T min, T max) : m_gen(m_rd()), m_distr(min, max) {}
|
||||||
UniformRandom() : UniformRandom(std::numeric_limits<T>::min(), std::numeric_limits<T>::max()) {}
|
UniformRandom() : UniformRandom(std::numeric_limits<T>::min(), std::numeric_limits<T>::max()) {}
|
||||||
|
|
||||||
T operator()() { return m_distr(m_gen); }
|
T operator()() { return static_cast<T>(m_distr(m_gen)); }
|
||||||
};
|
};
|
||||||
} // namespace base
|
} // namespace base
|
||||||
|
|||||||
Reference in New Issue
Block a user