diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2022-03-20 11:40:34 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2022-05-14 11:43:05 +0000 | 
| commit | 349cc55c9796c4596a5b9904cd3281af295f878f (patch) | |
| tree | 410c5a785075730a35f1272ca6a7adf72222ad03 /contrib/llvm-project/libcxx/include/__algorithm/shuffle.h | |
| parent | cb2ae6163174b90e999326ecec3699ee093a5d43 (diff) | |
| parent | c0981da47d5696fe36474fcf86b4ce03ae3ff818 (diff) | |
Diffstat (limited to 'contrib/llvm-project/libcxx/include/__algorithm/shuffle.h')
| -rw-r--r-- | contrib/llvm-project/libcxx/include/__algorithm/shuffle.h | 33 | 
1 files changed, 33 insertions, 0 deletions
diff --git a/contrib/llvm-project/libcxx/include/__algorithm/shuffle.h b/contrib/llvm-project/libcxx/include/__algorithm/shuffle.h index 637fca538857..7f6ad50e241e 100644 --- a/contrib/llvm-project/libcxx/include/__algorithm/shuffle.h +++ b/contrib/llvm-project/libcxx/include/__algorithm/shuffle.h @@ -25,6 +25,39 @@ _LIBCPP_PUSH_MACROS  _LIBCPP_BEGIN_NAMESPACE_STD +class _LIBCPP_TYPE_VIS __libcpp_debug_randomizer { +public: +  __libcpp_debug_randomizer() { +    __state = __seed(); +    __inc = __state + 0xda3e39cb94b95bdbULL; +    __inc = (__inc << 1) | 1; +  } +  typedef uint_fast32_t result_type; + +  static const result_type _Min = 0; +  static const result_type _Max = 0xFFFFFFFF; + +  _LIBCPP_HIDE_FROM_ABI result_type operator()() { +    uint_fast64_t __oldstate = __state; +    __state = __oldstate * 6364136223846793005ULL + __inc; +    return __oldstate >> 32; +  } + +  static _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR result_type min() { return _Min; } +  static _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR result_type max() { return _Max; } + +private: +  uint_fast64_t __state; +  uint_fast64_t __inc; +  _LIBCPP_HIDE_FROM_ABI static uint_fast64_t __seed() { +#ifdef _LIBCPP_DEBUG_RANDOMIZE_UNSPECIFIED_STABILITY_SEED +    return _LIBCPP_DEBUG_RANDOMIZE_UNSPECIFIED_STABILITY_SEED; +#else +    static char __x; +    return reinterpret_cast<uintptr_t>(&__x); +#endif +  } +};  #if _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_RANDOM_SHUFFLE) \    || defined(_LIBCPP_BUILDING_LIBRARY)  | 
