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

fix type: SPROUT_UNIQUE_SEED

This commit is contained in:
bolero-MURAKAMI 2013-08-07 16:49:27 +09:00
parent 2236d03165
commit c0589d9925

View file

@ -2,6 +2,7 @@
#define SPROUT_RANDOM_UNIQUE_SEED_HPP #define SPROUT_RANDOM_UNIQUE_SEED_HPP
#include <cstddef> #include <cstddef>
#include <cstdint>
#include <type_traits> #include <type_traits>
#include <sprout/config.hpp> #include <sprout/config.hpp>
#include <sprout/array/array.hpp> #include <sprout/array/array.hpp>
@ -13,34 +14,34 @@ namespace sprout {
// make_seed // make_seed
// //
template<typename T> template<typename T>
SPROUT_CONSTEXPR std::size_t SPROUT_CONSTEXPR std::uint_least32_t
make_seed(T const& v) { make_seed(T const& v) {
return sprout::to_hash(v); return static_cast<std::uint_least32_t>(sprout::to_hash(v));
} }
namespace detail { namespace detail {
template<std::size_t N, typename T, typename... Args> template<std::size_t N, typename T, typename... Args>
SPROUT_CONSTEXPR typename std::enable_if< SPROUT_CONSTEXPR typename std::enable_if<
sizeof...(Args) + 1 == N, sizeof...(Args) + 1 == N,
sprout::array<std::size_t, N> sprout::array<std::uint_least32_t, N>
>::type >::type
make_seed_seq_impl(T const&, std::size_t seed, Args const&... args) { make_seed_seq_impl(T const&, std::size_t seed, Args const&... args) {
return sprout::array<std::size_t, N>{{args..., seed}}; return sprout::array<std::uint_least32_t, N>{{args..., static_cast<std::uint_least32_t>(seed)}};
} }
template<std::size_t N, typename T, typename... Args> template<std::size_t N, typename T, typename... Args>
SPROUT_CONSTEXPR typename std::enable_if< SPROUT_CONSTEXPR typename std::enable_if<
sizeof...(Args) + 1 != N, sizeof...(Args) + 1 != N,
sprout::array<std::size_t, N> sprout::array<std::uint_least32_t, N>
>::type >::type
make_seed_seq_impl(T const& v, std::size_t seed, Args const&... args) { make_seed_seq_impl(T const& v, std::size_t seed, Args const&... args) {
return sprout::detail::make_seed_seq_impl<N>(v, sprout::hash_combine(seed, v), args..., seed); return sprout::detail::make_seed_seq_impl<N>(v, sprout::hash_combine(seed, v), args..., static_cast<std::uint_least32_t>(seed));
} }
} // namespace detail } // namespace detail
// //
// make_seed_seq // make_seed_seq
// //
template<std::size_t N, typename T> template<std::size_t N, typename T>
SPROUT_CONSTEXPR sprout::array<std::size_t, N> SPROUT_CONSTEXPR sprout::array<std::uint_least32_t, N>
make_seed_seq(T const& v) { make_seed_seq(T const& v) {
return sprout::detail::make_seed_seq_impl<N>(v, sprout::to_hash(v)); return sprout::detail::make_seed_seq_impl<N>(v, sprout::to_hash(v));
} }