1
0
Fork 0
mirror of https://github.com/bolero-MURAKAMI/Sprout synced 2025-08-03 12:49:50 +00:00

support C++14 constexpr: random distributions

This commit is contained in:
bolero-MURAKAMI 2013-11-05 23:46:23 +09:00
parent 230630b45b
commit 3c4a465d35
9 changed files with 468 additions and 60 deletions

View file

@ -32,6 +32,16 @@ namespace sprout {
>::fast result_type;
private:
base_type rng_;
private:
SPROUT_CONSTEXPR sprout::random::random_result<uniform_int_float> generate(
sprout::random::random_result<base_type> const& rnd
) const
{
return sprout::random::random_result<uniform_int_float>(
static_cast<result_type>(rnd.result() * (static_cast<base_result>(max()) + 1)),
uniform_int_float(rnd.engine())
);
}
public:
SPROUT_CONSTEXPR uniform_int_float()
: rng_()
@ -59,16 +69,10 @@ namespace sprout {
SPROUT_CONSTEXPR base_type const& base() const {
return rng_;
}
SPROUT_CONSTEXPR sprout::random::random_result<uniform_int_float> generate(
sprout::random::random_result<base_type> const& rnd
) const
{
return sprout::random::random_result<uniform_int_float>(
static_cast<result_type>(rnd.result() * (static_cast<base_result>(max()) + 1)),
uniform_int_float(rnd.engine())
);
SPROUT_CXX14_CONSTEXPR result_type operator()() {
return static_cast<result_type>(static_cast<base_result>(rng_()) * static_cast<base_result>(max()) + 1);
}
SPROUT_CONSTEXPR sprout::random::random_result<uniform_int_float> operator()() const {
SPROUT_CONSTEXPR sprout::random::random_result<uniform_int_float> const operator()() const {
return generate(rng_());
}
};