/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Docs: https://fburl.com/fbvref_random // #pragma once #define FOLLY_RANDOM_H_ #include <array> #include <cstdint> #include <random> #include <type_traits> #include <folly/Portability.h> #include <folly/Traits.h> #include <folly/functional/Invoke.h> #include <folly/lang/Bits.h> #if FOLLY_HAVE_EXTRANDOM_SFMT19937 #include <ext/random> #endif namespace folly { namespace detail { #if FOLLY_HAVE_EXTRANDOM_SFMT19937 using DefaultGenerator = __gnu_cxx::sfmt19937; #else DefaultGenerator; #endif } // namespace detail /** * A PRNG with one instance per thread. This PRNG uses a mersenne twister random * number generator and is seeded from /dev/urandom. It should not be used for * anything which requires security, only for statistical randomness. */ class ThreadLocalPRNG { … }; class Random { … }; /* * Return a good seed for a random number generator. * Note that this is a legacy function, as it returns a 32-bit value, which * is too small to be useful as a "real" RNG seed. Use the functions in class * Random instead. */ inline uint32_t randomNumberSeed() { … } } // namespace folly #include <folly/Random-inl.h>