12aea8af2SNikolas Klauser //===----------------------------------------------------------------------===// 22aea8af2SNikolas Klauser // 32aea8af2SNikolas Klauser // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42aea8af2SNikolas Klauser // See https://llvm.org/LICENSE.txt for license information. 52aea8af2SNikolas Klauser // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 62aea8af2SNikolas Klauser // 72aea8af2SNikolas Klauser //===----------------------------------------------------------------------===// 82aea8af2SNikolas Klauser 92aea8af2SNikolas Klauser #ifndef _LIBCPP___LIBCXX_DEBUG_RANDOMIZE_RANGE_H 102aea8af2SNikolas Klauser #define _LIBCPP___LIBCXX_DEBUG_RANDOMIZE_RANGE_H 112aea8af2SNikolas Klauser 122aea8af2SNikolas Klauser #include <__config> 132aea8af2SNikolas Klauser 142aea8af2SNikolas Klauser #ifdef _LIBCPP_DEBUG_RANDOMIZE_UNSPECIFIED_STABILITY 152aea8af2SNikolas Klauser # include <__algorithm/shuffle.h> 162aea8af2SNikolas Klauser # include <__type_traits/is_constant_evaluated.h> 172aea8af2SNikolas Klauser #endif 182aea8af2SNikolas Klauser 192aea8af2SNikolas Klauser #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 202aea8af2SNikolas Klauser # pragma GCC system_header 212aea8af2SNikolas Klauser #endif 222aea8af2SNikolas Klauser 232aea8af2SNikolas Klauser _LIBCPP_BEGIN_NAMESPACE_STD 242aea8af2SNikolas Klauser 2514cf74d6SKonstantin Varlamov template <class _AlgPolicy, class _Iterator, class _Sentinel> __debug_randomize_range(_Iterator __first,_Sentinel __last)26*9783f28cSLouis Dionne_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 void __debug_randomize_range(_Iterator __first, _Sentinel __last) { 272aea8af2SNikolas Klauser #ifdef _LIBCPP_DEBUG_RANDOMIZE_UNSPECIFIED_STABILITY 282aea8af2SNikolas Klauser # ifdef _LIBCPP_CXX03_LANG 292aea8af2SNikolas Klauser # error Support for unspecified stability is only for C++11 and higher 302aea8af2SNikolas Klauser # endif 312aea8af2SNikolas Klauser 322aea8af2SNikolas Klauser if (!__libcpp_is_constant_evaluated()) 33a7c3379cSKonstantin Varlamov std::__shuffle<_AlgPolicy>(__first, __last, __libcpp_debug_randomizer()); 342aea8af2SNikolas Klauser #else 352aea8af2SNikolas Klauser (void)__first; 362aea8af2SNikolas Klauser (void)__last; 372aea8af2SNikolas Klauser #endif 382aea8af2SNikolas Klauser } 392aea8af2SNikolas Klauser 402aea8af2SNikolas Klauser _LIBCPP_END_NAMESPACE_STD 412aea8af2SNikolas Klauser 422aea8af2SNikolas Klauser #endif // _LIBCPP___LIBCXX_DEBUG_RANDOMIZE_RANGE_H 43