mirror of
https://github.com/bolero-MURAKAMI/Sprout.git
synced 2025-07-02 14:04:20 +00:00
fix random generation implementation
This commit is contained in:
parent
406a1ff789
commit
3879666b02
18 changed files with 140 additions and 110 deletions
|
@ -18,6 +18,7 @@
|
|||
#include <sprout/utility/pair/pair.hpp>
|
||||
#include <sprout/algorithm/fixed/results.hpp>
|
||||
#include <sprout/algorithm/fixed/swap_element.hpp>
|
||||
#include <sprout/generator/functions.hpp>
|
||||
#include <sprout/workaround/detail/uniform_int_distribution.hpp>
|
||||
|
||||
namespace sprout {
|
||||
|
@ -26,14 +27,14 @@ namespace sprout {
|
|||
template<typename Random>
|
||||
inline SPROUT_CONSTEXPR sprout::array<std::ptrdiff_t, 2>
|
||||
make_random_swap_indexes_2(Random const& rnd, std::ptrdiff_t i0) {
|
||||
return sprout::array<std::ptrdiff_t, 2>{{i0, rnd.result()}};
|
||||
return sprout::array<std::ptrdiff_t, 2>{{i0, sprout::generators::generated_value(rnd)}};
|
||||
}
|
||||
template<typename Random>
|
||||
inline SPROUT_CONSTEXPR sprout::array<std::ptrdiff_t, 2>
|
||||
make_random_swap_indexes_1(Random const& rnd) {
|
||||
return sprout::fixed::detail::make_random_swap_indexes_2(
|
||||
rnd(),
|
||||
rnd.result()
|
||||
sprout::generators::next_generator(rnd)(),
|
||||
sprout::generators::generated_value(rnd)
|
||||
);
|
||||
}
|
||||
template<typename UniformRandomNumberGenerator>
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include <sprout/utility/pair/access.hpp>
|
||||
#include <sprout/algorithm/fixed/results.hpp>
|
||||
#include <sprout/algorithm/fixed/swap_element.hpp>
|
||||
#include <sprout/generator/functions.hpp>
|
||||
#include <sprout/workaround/detail/uniform_int_distribution.hpp>
|
||||
|
||||
namespace sprout {
|
||||
|
@ -32,16 +33,16 @@ namespace sprout {
|
|||
make_random_swap_result_indexes_2(Random const& rnd, std::ptrdiff_t i0) {
|
||||
typedef sprout::pair<sprout::array<std::ptrdiff_t, 2>, typename std::decay<UniformRandomNumberGenerator>::type> result_type;
|
||||
return result_type(
|
||||
sprout::array<std::ptrdiff_t, 2>{{i0, rnd.result()}},
|
||||
rnd.engine()
|
||||
sprout::array<std::ptrdiff_t, 2>{{i0, sprout::generators::generated_value(rnd)}},
|
||||
sprout::generators::next_generator(rnd).engine()
|
||||
);
|
||||
}
|
||||
template<typename UniformRandomNumberGenerator, typename Random>
|
||||
inline SPROUT_CONSTEXPR sprout::pair<sprout::array<std::ptrdiff_t, 2>, typename std::decay<UniformRandomNumberGenerator>::type>
|
||||
make_random_swap_result_indexes_1(Random const& rnd) {
|
||||
return sprout::fixed::detail::make_random_swap_result_indexes_2<UniformRandomNumberGenerator>(
|
||||
rnd(),
|
||||
rnd.result()
|
||||
sprout::generators::next_generator(rnd)(),
|
||||
sprout::generators::generated_value(rnd)
|
||||
);
|
||||
}
|
||||
template<typename UniformRandomNumberGenerator>
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#include <sprout/algorithm/fixed/results.hpp>
|
||||
#include <sprout/algorithm/fixed/swap_element.hpp>
|
||||
#include <sprout/numeric/fixed/iota.hpp>
|
||||
#include <sprout/generator/functions.hpp>
|
||||
#include <sprout/workaround/detail/uniform_int_distribution.hpp>
|
||||
|
||||
namespace sprout {
|
||||
|
@ -32,11 +33,11 @@ namespace sprout {
|
|||
return i < n - 1
|
||||
? sprout::fixed::detail::make_shuffle_indexes_1(
|
||||
n,
|
||||
rnd(),
|
||||
sprout::fixed::swap_element(arr, arr.begin() + i, arr.begin() + rnd.result()),
|
||||
sprout::generators::next_generator(rnd)(),
|
||||
sprout::fixed::swap_element(arr, arr.begin() + i, arr.begin() + sprout::generators::generated_value(rnd)),
|
||||
i + 1
|
||||
)
|
||||
: sprout::fixed::swap_element(arr, arr.begin() + i, arr.begin() + rnd.result())
|
||||
: sprout::fixed::swap_element(arr, arr.begin() + i, arr.begin() + sprout::generators::generated_value(rnd))
|
||||
;
|
||||
}
|
||||
template<std::size_t N, typename UniformRandomNumberGenerator>
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include <sprout/algorithm/fixed/results.hpp>
|
||||
#include <sprout/algorithm/fixed/swap_element.hpp>
|
||||
#include <sprout/numeric/fixed/iota.hpp>
|
||||
#include <sprout/generator/functions.hpp>
|
||||
#include <sprout/workaround/detail/uniform_int_distribution.hpp>
|
||||
|
||||
namespace sprout {
|
||||
|
@ -36,13 +37,13 @@ namespace sprout {
|
|||
return i < n - 1
|
||||
? sprout::fixed::detail::make_shuffle_result_indexes_1<UniformRandomNumberGenerator>(
|
||||
n,
|
||||
rnd(),
|
||||
sprout::fixed::swap_element(arr, arr.begin() + i, arr.begin() + rnd.result()),
|
||||
sprout::generators::next_generator(rnd)(),
|
||||
sprout::fixed::swap_element(arr, arr.begin() + i, arr.begin() + sprout::generators::generated_value(rnd)),
|
||||
i + 1
|
||||
)
|
||||
: result_type(
|
||||
sprout::fixed::swap_element(arr, arr.begin() + i, arr.begin() + rnd.result()),
|
||||
rnd.engine()
|
||||
sprout::fixed::swap_element(arr, arr.begin() + i, arr.begin() + sprout::generators::generated_value(rnd)),
|
||||
sprout::generators::next_generator(rnd).engine()
|
||||
)
|
||||
;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue