/* * 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. */ #ifndef FOLLY_RANDOM_H_ #error This file may only be included from folly/Random.h #endif namespace folly { namespace detail { // Return the state size needed by RNG, expressed as a number of uint32_t // integers. Specialized for all templates specified in the C++11 standard. // For some (mersenne_twister_engine), this is exported as a state_size static // data member; for others, the standard shows formulas. template <class RNG, typename = void> struct StateSize { … }; StateSize<RNG, void_t<decltype(RNG::state_size)>>; StateSize<std::linear_congruential_engine<UIntType, a, c, m>>; StateSize<std::subtract_with_carry_engine<UIntType, w, s, r>>; StateSizeT; template <class RNG> struct SeedData { … }; } // namespace detail template <class RNG, class /* EnableIf */> void Random::seed(RNG& rng) { … } template <class RNG, class /* EnableIf */> auto Random::create() -> RNG { … } } // namespace folly