diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2023-09-02 21:17:18 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2024-01-07 17:46:17 +0000 | 
| commit | fe013be447cd855ccaf6094a1d06aea570450629 (patch) | |
| tree | 9adc1e0a5d25b6280995832bb29d592fb80554a6 /contrib/llvm-project/libcxx/include/__algorithm/pstl_fill.h | |
| parent | 2f3b605b2e159522ecab77fd518e8139aaf581e9 (diff) | |
Diffstat (limited to 'contrib/llvm-project/libcxx/include/__algorithm/pstl_fill.h')
| -rw-r--r-- | contrib/llvm-project/libcxx/include/__algorithm/pstl_fill.h | 84 | 
1 files changed, 84 insertions, 0 deletions
diff --git a/contrib/llvm-project/libcxx/include/__algorithm/pstl_fill.h b/contrib/llvm-project/libcxx/include/__algorithm/pstl_fill.h new file mode 100644 index 000000000000..d64c828d9046 --- /dev/null +++ b/contrib/llvm-project/libcxx/include/__algorithm/pstl_fill.h @@ -0,0 +1,84 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef _LIBCPP___ALGORITHM_PSTL_FILL_H +#define _LIBCPP___ALGORITHM_PSTL_FILL_H + +#include <__algorithm/fill_n.h> +#include <__algorithm/pstl_for_each.h> +#include <__algorithm/pstl_frontend_dispatch.h> +#include <__config> +#include <__iterator/cpp17_iterator_concepts.h> +#include <__iterator/iterator_traits.h> +#include <__type_traits/enable_if.h> +#include <__type_traits/is_execution_policy.h> +#include <__type_traits/remove_cvref.h> +#include <__utility/move.h> +#include <__utility/terminate_on_exception.h> + +#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) +#  pragma GCC system_header +#endif + +#if !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17 + +_LIBCPP_BEGIN_NAMESPACE_STD + +template <class> +void __pstl_fill(); // declaration needed for the frontend dispatch below + +template <class _ExecutionPolicy, +          class _ForwardIterator, +          class _Tp, +          class _RawPolicy                                    = __remove_cvref_t<_ExecutionPolicy>, +          enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> +_LIBCPP_HIDE_FROM_ABI void +fill(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) { +  _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator); +  std::__pstl_frontend_dispatch( +      _LIBCPP_PSTL_CUSTOMIZATION_POINT(__pstl_fill), +      [&](_ForwardIterator __g_first, _ForwardIterator __g_last, const _Tp& __g_value) { +        std::for_each(__policy, __g_first, __g_last, [&](__iter_reference<_ForwardIterator> __element) { +          __element = __g_value; +        }); +      }, +      std::move(__first), +      std::move(__last), +      __value); +} + +template <class> +void __pstl_fill_n(); // declaration needed for the frontend dispatch below + +template <class _ExecutionPolicy, +          class _ForwardIterator, +          class _SizeT, +          class _Tp, +          class _RawPolicy                                    = __remove_cvref_t<_ExecutionPolicy>, +          enable_if_t<is_execution_policy_v<_RawPolicy>, int> = 0> +_LIBCPP_HIDE_FROM_ABI void +fill_n(_ExecutionPolicy&& __policy, _ForwardIterator __first, _SizeT __n, const _Tp& __value) { +  _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator); +  std::__pstl_frontend_dispatch( +      _LIBCPP_PSTL_CUSTOMIZATION_POINT(__pstl_fill_n), +      [&](_ForwardIterator __g_first, _SizeT __g_n, const _Tp& __g_value) { +        if constexpr (__has_random_access_iterator_category<_ForwardIterator>::value) +          std::fill(__policy, __g_first, __g_first + __g_n, __g_value); +        else +          std::fill_n(__g_first, __g_n, __g_value); +      }, +      std::move(__first), +      __n, +      __value); +} + +_LIBCPP_END_NAMESPACE_STD + +#endif // !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17 + +#endif // _LIBCPP___ALGORITHM_PSTL_FILL_H  | 
