absl/random: Convert absl::BitGen / absl::InsecureBitGen to classes from aliases. PiperOrigin-RevId: 733063284 Change-Id: If0af60b24bcc59b6fe3a6882aebd427b8b10f3a0
diff --git a/absl/random/BUILD.bazel b/absl/random/BUILD.bazel index ef8ac7e..cc95d9c 100644 --- a/absl/random/BUILD.bazel +++ b/absl/random/BUILD.bazel
@@ -42,9 +42,9 @@ deps = [ ":distributions", ":seed_sequences", + "//absl/base:config", "//absl/random/internal:nonsecure_base", "//absl/random/internal:pcg_engine", - "//absl/random/internal:pool_urbg", "//absl/random/internal:randen_engine", ], )
diff --git a/absl/random/CMakeLists.txt b/absl/random/CMakeLists.txt index 8f62696..9cd301d 100644 --- a/absl/random/CMakeLists.txt +++ b/absl/random/CMakeLists.txt
@@ -24,10 +24,10 @@ LINKOPTS ${ABSL_DEFAULT_LINKOPTS} DEPS + absl::config absl::random_distributions absl::random_internal_nonsecure_base absl::random_internal_pcg_engine - absl::random_internal_pool_urbg absl::random_internal_randen_engine absl::random_seed_sequences )
diff --git a/absl/random/random.h b/absl/random/random.h index c955be6..b55b361 100644 --- a/absl/random/random.h +++ b/absl/random/random.h
@@ -34,10 +34,10 @@ #include <cstdint> #include <random> +#include "absl/base/config.h" #include "absl/random/distributions.h" // IWYU pragma: export -#include "absl/random/internal/nonsecure_base.h" // IWYU pragma: export -#include "absl/random/internal/pcg_engine.h" // IWYU pragma: export -#include "absl/random/internal/pool_urbg.h" +#include "absl/random/internal/nonsecure_base.h" +#include "absl/random/internal/pcg_engine.h" #include "absl/random/internal/randen_engine.h" #include "absl/random/seed_sequences.h" // IWYU pragma: export @@ -95,31 +95,46 @@ // types on modern x86, ARM, and PPC architectures. // // This type is thread-compatible, but not thread-safe. +class BitGen : private random_internal::NonsecureURBGBase< + random_internal::randen_engine<uint64_t>> { + using Base = random_internal::NonsecureURBGBase< + random_internal::randen_engine<uint64_t>>; -// --------------------------------------------------------------------------- -// absl::BitGen member functions -// --------------------------------------------------------------------------- + public: + using result_type = typename Base::result_type; -// absl::BitGen::operator()() -// -// Calls the BitGen, returning a generated value. + // BitGen() + // BitGen(SeedSequence seed_seq) + // + // Copy disallowed. + // Move allowed. + using Base::Base; + using Base::operator=; -// absl::BitGen::min() -// -// Returns the smallest possible value from this bit generator. + // BitGen::min() + // + // Returns the smallest possible value from this bit generator. + using Base::min; -// absl::BitGen::max() -// -// Returns the largest possible value from this bit generator. + // BitGen::max() + // + // Returns the largest possible value from this bit generator. + using Base::max; -// absl::BitGen::discard(num) -// -// Advances the internal state of this bit generator by `num` times, and -// discards the intermediate results. -// --------------------------------------------------------------------------- + // BitGen::discard(num) + // + // Advances the internal state of this bit generator by `num` times, and + // discards the intermediate results. + using Base::discard; -using BitGen = random_internal::NonsecureURBGBase< - random_internal::randen_engine<uint64_t>>; + // BitGen::operator()() + // + // Invoke the URBG, returning a generated value. + using Base::operator(); + + using Base::operator==; + using Base::operator!=; +}; // ----------------------------------------------------------------------------- // absl::InsecureBitGen @@ -157,32 +172,51 @@ // `absl::InsecureBitGen` is not cryptographically secure. // // Prefer `absl::BitGen` over `absl::InsecureBitGen` as the general type is -// often fast enough for the vast majority of applications. - -using InsecureBitGen = - random_internal::NonsecureURBGBase<random_internal::pcg64_2018_engine>; - -// --------------------------------------------------------------------------- -// absl::InsecureBitGen member functions -// --------------------------------------------------------------------------- - -// absl::InsecureBitGen::operator()() +// often fast enough for the vast majority of applications. However, it is +// reasonable to use `absl::InsecureBitGen` in tests or when using a URBG +// in small isolated tasks such as in `std::shuffle`. // -// Calls the InsecureBitGen, returning a generated value. +// This type is thread-compatible, but not thread-safe. +class InsecureBitGen : private random_internal::NonsecureURBGBase< + random_internal::pcg64_2018_engine> { + using Base = + random_internal::NonsecureURBGBase<random_internal::pcg64_2018_engine>; -// absl::InsecureBitGen::min() -// -// Returns the smallest possible value from this bit generator. + public: + using result_type = typename Base::result_type; -// absl::InsecureBitGen::max() -// -// Returns the largest possible value from this bit generator. + // InsecureBitGen() + // InsecureBitGen(SeedSequence seed_seq) + // + // Copy disallowed. + // Move allowed. + using Base::Base; + using Base::operator=; -// absl::InsecureBitGen::discard(num) -// -// Advances the internal state of this bit generator by `num` times, and -// discards the intermediate results. -// --------------------------------------------------------------------------- + // InsecureBitGen::min() + // + // Returns the smallest possible value from this bit generator. + using Base::min; + + // InsecureBitGen::max() + // + // Returns the largest possible value from this bit generator. + using Base::max; + + // InsecureBitGen::discard(num) + // + // Advances the internal state of this bit generator by `num` times, and + // discards the intermediate results. + using Base::discard; + + // InsecureBitGen::operator()() + // + // Invoke the URBG, returning a generated value. + using Base::operator(); + + using Base::operator==; + using Base::operator!=; +}; ABSL_NAMESPACE_END } // namespace absl