X-Git-Url: http://plrg.eecs.uci.edu/git/?p=folly.git;a=blobdiff_plain;f=folly%2FRandom-inl.h;h=39fbd8e41a6b7b6d730f0d2068d27aaeefa3ab8b;hp=405ef1ffa189798b86566b3329d1bdadccab3139;hb=3764b633f977129f8ee3bca60db7c5d1bb969eec;hpb=ed8c80a0e0988e4ce687f51ca832a00e4a6b7930 diff --git a/folly/Random-inl.h b/folly/Random-inl.h index 405ef1ff..39fbd8e4 100644 --- a/folly/Random-inl.h +++ b/folly/Random-inl.h @@ -18,8 +18,6 @@ #error This file may only be included from folly/Random.h #endif -#include - namespace folly { namespace detail { @@ -29,82 +27,35 @@ namespace detail { // For some (mersenne_twister_engine), this is exported as a state_size static // data member; for others, the standard shows formulas. -template struct StateSize { +template +struct StateSize { // A sane default. - static constexpr size_t value = 512; + using type = std::integral_constant; }; template -constexpr size_t StateSize::value; +struct StateSize> { + using type = std::integral_constant; +}; template struct StateSize> { // From the standard [rand.eng.lcong], this is ceil(log2(m) / 32) + 3, // which is the same as ceil(ceil(log2(m) / 32) + 3, and // ceil(log2(m)) <= std::numeric_limits::digits - static constexpr size_t value = - (std::numeric_limits::digits + 31) / 32 + 3; -}; - -template -constexpr size_t -StateSize>::value; - -template -struct StateSize> { - static constexpr size_t value = - std::mersenne_twister_engine::state_size; -}; - -template -constexpr size_t -StateSize>::value; - -#if FOLLY_HAVE_EXTRANDOM_SFMT19937 - -template -struct StateSize<__gnu_cxx::simd_fast_mersenne_twister_engine< - UIntType, m, pos1, sl1, sl2, sr1, sr2, msk1, msk2, msk3, msk4, - parity1, parity2, parity3, parity4>> { - static constexpr size_t value = - __gnu_cxx::simd_fast_mersenne_twister_engine< - UIntType, m, pos1, sl1, sl2, sr1, sr2, - msk1, msk2, msk3, msk4, - parity1, parity2, parity3, parity4>::state_size; + using type = std::integral_constant< + size_t, + (std::numeric_limits::digits + 31) / 32 + 3>; }; -template -constexpr size_t -StateSize<__gnu_cxx::simd_fast_mersenne_twister_engine< - UIntType, m, pos1, sl1, sl2, sr1, sr2, msk1, msk2, msk3, msk4, - parity1, parity2, parity3, parity4>>::value; - -#endif - template struct StateSize> { // [rand.eng.sub]: r * ceil(w / 32) - static constexpr size_t value = r * ((w + 31) / 32); + using type = std::integral_constant; }; -template -constexpr size_t -StateSize>::value; +template +using StateSizeT = _t>; template struct SeedData { @@ -112,11 +63,11 @@ struct SeedData { Random::secureRandom(seedData.data(), seedData.size() * sizeof(uint32_t)); } - static constexpr size_t stateSize = StateSize::value; + static constexpr size_t stateSize = StateSizeT::value; std::array seedData; }; -} // namespace detail +} // namespace detail template void Random::seed(RNG& rng) { @@ -132,4 +83,4 @@ auto Random::create() -> RNG { return RNG(s); } -} // namespaces +} // namespace folly