X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=folly%2FRandom-inl.h;h=405ef1ffa189798b86566b3329d1bdadccab3139;hb=a857f83b2b25f42eeba1524ebca1bd2e74abc71a;hp=9da9a824bfe011abf1919255543e45c78daeeaa2;hpb=6019aaaa140e5280812c0ecf69a1a1ec3d4af523;p=folly.git diff --git a/folly/Random-inl.h b/folly/Random-inl.h index 9da9a824..405ef1ff 100644 --- a/folly/Random-inl.h +++ b/folly/Random-inl.h @@ -1,5 +1,5 @@ /* - * Copyright 2014 Facebook, Inc. + * Copyright 2017 Facebook, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,6 +18,8 @@ #error This file may only be included from folly/Random.h #endif +#include + namespace folly { namespace detail { @@ -67,7 +69,7 @@ constexpr size_t StateSize>::value; -#if FOLLY_USE_SIMD_PRNG +#if FOLLY_HAVE_EXTRANDOM_SFMT19937 template >::value; template -std::seed_seq generateSeed() { - std::array::value> seed_data; - Random::secureRandom(seed_data.begin(), seed_data.size() * sizeof(uint32_t)); - return std::seed_seq(std::begin(seed_data), std::end(seed_data)); -} +struct SeedData { + SeedData() { + Random::secureRandom(seedData.data(), seedData.size() * sizeof(uint32_t)); + } + + static constexpr size_t stateSize = StateSize::value; + std::array seedData; +}; } // namespace detail -template -void Random::seed(ValidRNG& rng) { - auto s = detail::generateSeed(); +template +void Random::seed(RNG& rng) { + detail::SeedData sd; + std::seed_seq s(std::begin(sd.seedData), std::end(sd.seedData)); rng.seed(s); } -template -auto Random::create() -> ValidRNG { - auto s = detail::generateSeed(); +template +auto Random::create() -> RNG { + detail::SeedData sd; + std::seed_seq s(std::begin(sd.seedData), std::end(sd.seedData)); return RNG(s); }