/*============================================================================= Copyright (c) 2011-2014 Bolero MURAKAMI https://github.com/bolero-MURAKAMI/Sprout Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) =============================================================================*/ #ifndef SPROUT_RANDOM_GENERATE_ARRAY_HPP #define SPROUT_RANDOM_GENERATE_ARRAY_HPP #include #include #include #include namespace sprout { namespace random { // // generate_array // template inline SPROUT_CXX14_CONSTEXPR sprout::array generate_array(URNG& rng) { sprout::array result{{}}; for (std::size_t i = 0; i != N; ++i) { result[i] = rng(); } return result; } namespace detail { template static SPROUT_CONSTEXPR typename std::enable_if< (sizeof...(Args) + 1 == N), sprout::pair, URNG> const >::type generate_array_impl(Random const& rnd, Args const&... args) { typedef sprout::pair, URNG> const pair_type; return pair_type{ sprout::array{{args..., rnd.result()}}, rnd.engine() }; } template static SPROUT_CONSTEXPR typename std::enable_if< (sizeof...(Args) + 1 < N), sprout::pair, URNG> const >::type generate_array_impl(Random const& rnd, Args const&... args) { return sprout::random::detail::generate_array_impl(rnd(), args..., rnd.result()); } } // namespace detail // // generate_array // template inline SPROUT_CONSTEXPR sprout::pair, URNG> const generate_array(URNG const& rng) { return sprout::random::detail::generate_array_impl(rng()); } } // namespace random } // namespace sprout #endif // #ifndef SPROUT_RANDOM_GENERATE_ARRAY_HPP