forked from OSchip/llvm-project
[libc++] NFC: Move indirect_concepts.h to __iterator/concepts.h
There's no fundamental reason to separate those from the other iterator concepts. Differential Revision: https://reviews.llvm.org/D104048
This commit is contained in:
parent
f35bcea1d4
commit
c54d3050f7
|
@ -18,7 +18,6 @@ set(files
|
|||
__iterator/concepts.h
|
||||
__iterator/default_sentinel.h
|
||||
__iterator/incrementable_traits.h
|
||||
__iterator/indirect_concepts.h
|
||||
__iterator/iter_move.h
|
||||
__iterator/iterator_traits.h
|
||||
__iterator/next.h
|
||||
|
|
|
@ -171,6 +171,71 @@ concept contiguous_iterator =
|
|||
template<class _Ip>
|
||||
concept __has_arrow = input_iterator<_Ip> && (is_pointer_v<_Ip> || requires(_Ip __i) { __i.operator->(); });
|
||||
|
||||
// [indirectcallable.indirectinvocable]
|
||||
template<class _Fp, class _It>
|
||||
concept indirectly_unary_invocable =
|
||||
indirectly_readable<_It> &&
|
||||
copy_constructible<_Fp> &&
|
||||
invocable<_Fp&, iter_value_t<_It>&> &&
|
||||
invocable<_Fp&, iter_reference_t<_It>> &&
|
||||
invocable<_Fp&, iter_common_reference_t<_It>> &&
|
||||
common_reference_with<
|
||||
invoke_result_t<_Fp&, iter_value_t<_It>&>,
|
||||
invoke_result_t<_Fp&, iter_reference_t<_It>>>;
|
||||
|
||||
template<class _Fp, class _It>
|
||||
concept indirectly_regular_unary_invocable =
|
||||
indirectly_readable<_It> &&
|
||||
copy_constructible<_Fp> &&
|
||||
regular_invocable<_Fp&, iter_value_t<_It>&> &&
|
||||
regular_invocable<_Fp&, iter_reference_t<_It>> &&
|
||||
regular_invocable<_Fp&, iter_common_reference_t<_It>> &&
|
||||
common_reference_with<
|
||||
invoke_result_t<_Fp&, iter_value_t<_It>&>,
|
||||
invoke_result_t<_Fp&, iter_reference_t<_It>>>;
|
||||
|
||||
template<class _Fp, class _It>
|
||||
concept indirect_unary_predicate =
|
||||
indirectly_readable<_It> &&
|
||||
copy_constructible<_Fp> &&
|
||||
predicate<_Fp&, iter_value_t<_It>&> &&
|
||||
predicate<_Fp&, iter_reference_t<_It>> &&
|
||||
predicate<_Fp&, iter_common_reference_t<_It>>;
|
||||
|
||||
template<class _Fp, class _It1, class _It2>
|
||||
concept indirect_binary_predicate =
|
||||
indirectly_readable<_It1> && indirectly_readable<_It2> &&
|
||||
copy_constructible<_Fp> &&
|
||||
predicate<_Fp&, iter_value_t<_It1>&, iter_value_t<_It2>&> &&
|
||||
predicate<_Fp&, iter_value_t<_It1>&, iter_reference_t<_It2>> &&
|
||||
predicate<_Fp&, iter_reference_t<_It1>, iter_value_t<_It2>&> &&
|
||||
predicate<_Fp&, iter_reference_t<_It1>, iter_reference_t<_It2>> &&
|
||||
predicate<_Fp&, iter_common_reference_t<_It1>, iter_common_reference_t<_It2>>;
|
||||
|
||||
template<class _Fp, class _It1, class _It2 = _It1>
|
||||
concept indirect_equivalence_relation =
|
||||
indirectly_readable<_It1> && indirectly_readable<_It2> &&
|
||||
copy_constructible<_Fp> &&
|
||||
equivalence_relation<_Fp&, iter_value_t<_It1>&, iter_value_t<_It2>&> &&
|
||||
equivalence_relation<_Fp&, iter_value_t<_It1>&, iter_reference_t<_It2>> &&
|
||||
equivalence_relation<_Fp&, iter_reference_t<_It1>, iter_value_t<_It2>&> &&
|
||||
equivalence_relation<_Fp&, iter_reference_t<_It1>, iter_reference_t<_It2>> &&
|
||||
equivalence_relation<_Fp&, iter_common_reference_t<_It1>, iter_common_reference_t<_It2>>;
|
||||
|
||||
template<class _Fp, class _It1, class _It2 = _It1>
|
||||
concept indirect_strict_weak_order =
|
||||
indirectly_readable<_It1> && indirectly_readable<_It2> &&
|
||||
copy_constructible<_Fp> &&
|
||||
strict_weak_order<_Fp&, iter_value_t<_It1>&, iter_value_t<_It2>&> &&
|
||||
strict_weak_order<_Fp&, iter_value_t<_It1>&, iter_reference_t<_It2>> &&
|
||||
strict_weak_order<_Fp&, iter_reference_t<_It1>, iter_value_t<_It2>&> &&
|
||||
strict_weak_order<_Fp&, iter_reference_t<_It1>, iter_reference_t<_It2>> &&
|
||||
strict_weak_order<_Fp&, iter_common_reference_t<_It1>, iter_common_reference_t<_It2>>;
|
||||
|
||||
template<class _Fp, class... _Its>
|
||||
requires (indirectly_readable<_Its> && ...) && invocable<_Fp, iter_reference_t<_Its>...>
|
||||
using indirect_result_t = invoke_result_t<_Fp, iter_reference_t<_Its>...>;
|
||||
|
||||
// clang-format on
|
||||
|
||||
#endif // !defined(_LIBCPP_HAS_NO_RANGES)
|
||||
|
|
|
@ -1,99 +0,0 @@
|
|||
// -*- C++ -*-
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// 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___ITERATOR_INDIRECT_CONCEPTS_H
|
||||
#define _LIBCPP___ITERATOR_INDIRECT_CONCEPTS_H
|
||||
|
||||
#include <__config>
|
||||
#include <__iterator/concepts.h>
|
||||
#include <__iterator/incrementable_traits.h>
|
||||
#include <concepts>
|
||||
#include <type_traits>
|
||||
|
||||
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
||||
#pragma GCC system_header
|
||||
#endif
|
||||
|
||||
_LIBCPP_PUSH_MACROS
|
||||
#include <__undef_macros>
|
||||
|
||||
_LIBCPP_BEGIN_NAMESPACE_STD
|
||||
|
||||
#if !defined(_LIBCPP_HAS_NO_RANGES)
|
||||
|
||||
template<class _Fp, class _It>
|
||||
concept indirectly_unary_invocable =
|
||||
indirectly_readable<_It> &&
|
||||
copy_constructible<_Fp> &&
|
||||
invocable<_Fp&, iter_value_t<_It>&> &&
|
||||
invocable<_Fp&, iter_reference_t<_It>> &&
|
||||
invocable<_Fp&, iter_common_reference_t<_It>> &&
|
||||
common_reference_with<
|
||||
invoke_result_t<_Fp&, iter_value_t<_It>&>,
|
||||
invoke_result_t<_Fp&, iter_reference_t<_It>>>;
|
||||
|
||||
template<class _Fp, class _It>
|
||||
concept indirectly_regular_unary_invocable =
|
||||
indirectly_readable<_It> &&
|
||||
copy_constructible<_Fp> &&
|
||||
regular_invocable<_Fp&, iter_value_t<_It>&> &&
|
||||
regular_invocable<_Fp&, iter_reference_t<_It>> &&
|
||||
regular_invocable<_Fp&, iter_common_reference_t<_It>> &&
|
||||
common_reference_with<
|
||||
invoke_result_t<_Fp&, iter_value_t<_It>&>,
|
||||
invoke_result_t<_Fp&, iter_reference_t<_It>>>;
|
||||
|
||||
template<class _Fp, class _It>
|
||||
concept indirect_unary_predicate =
|
||||
indirectly_readable<_It> &&
|
||||
copy_constructible<_Fp> &&
|
||||
predicate<_Fp&, iter_value_t<_It>&> &&
|
||||
predicate<_Fp&, iter_reference_t<_It>> &&
|
||||
predicate<_Fp&, iter_common_reference_t<_It>>;
|
||||
|
||||
template<class _Fp, class _It1, class _It2>
|
||||
concept indirect_binary_predicate =
|
||||
indirectly_readable<_It1> && indirectly_readable<_It2> &&
|
||||
copy_constructible<_Fp> &&
|
||||
predicate<_Fp&, iter_value_t<_It1>&, iter_value_t<_It2>&> &&
|
||||
predicate<_Fp&, iter_value_t<_It1>&, iter_reference_t<_It2>> &&
|
||||
predicate<_Fp&, iter_reference_t<_It1>, iter_value_t<_It2>&> &&
|
||||
predicate<_Fp&, iter_reference_t<_It1>, iter_reference_t<_It2>> &&
|
||||
predicate<_Fp&, iter_common_reference_t<_It1>, iter_common_reference_t<_It2>>;
|
||||
|
||||
template<class _Fp, class _It1, class _It2 = _It1>
|
||||
concept indirect_equivalence_relation =
|
||||
indirectly_readable<_It1> && indirectly_readable<_It2> &&
|
||||
copy_constructible<_Fp> &&
|
||||
equivalence_relation<_Fp&, iter_value_t<_It1>&, iter_value_t<_It2>&> &&
|
||||
equivalence_relation<_Fp&, iter_value_t<_It1>&, iter_reference_t<_It2>> &&
|
||||
equivalence_relation<_Fp&, iter_reference_t<_It1>, iter_value_t<_It2>&> &&
|
||||
equivalence_relation<_Fp&, iter_reference_t<_It1>, iter_reference_t<_It2>> &&
|
||||
equivalence_relation<_Fp&, iter_common_reference_t<_It1>, iter_common_reference_t<_It2>>;
|
||||
|
||||
template<class _Fp, class _It1, class _It2 = _It1>
|
||||
concept indirect_strict_weak_order =
|
||||
indirectly_readable<_It1> && indirectly_readable<_It2> &&
|
||||
copy_constructible<_Fp> &&
|
||||
strict_weak_order<_Fp&, iter_value_t<_It1>&, iter_value_t<_It2>&> &&
|
||||
strict_weak_order<_Fp&, iter_value_t<_It1>&, iter_reference_t<_It2>> &&
|
||||
strict_weak_order<_Fp&, iter_reference_t<_It1>, iter_value_t<_It2>&> &&
|
||||
strict_weak_order<_Fp&, iter_reference_t<_It1>, iter_reference_t<_It2>> &&
|
||||
strict_weak_order<_Fp&, iter_common_reference_t<_It1>, iter_common_reference_t<_It2>>;
|
||||
|
||||
template<class _Fp, class... _Its>
|
||||
requires (indirectly_readable<_Its> && ...) && invocable<_Fp, iter_reference_t<_Its>...>
|
||||
using indirect_result_t = invoke_result_t<_Fp, iter_reference_t<_Its>...>;
|
||||
|
||||
#endif // !defined(_LIBCPP_HAS_NO_RANGES)
|
||||
|
||||
_LIBCPP_END_NAMESPACE_STD
|
||||
|
||||
_LIBCPP_POP_MACROS
|
||||
|
||||
#endif // _LIBCPP___ITERATOR_INDIRECT_CONCEPTS_H
|
|
@ -11,7 +11,6 @@
|
|||
|
||||
#include <__config>
|
||||
#include <__iterator/concepts.h>
|
||||
#include <__iterator/indirect_concepts.h>
|
||||
#include <__iterator/incrementable_traits.h>
|
||||
#include <type_traits>
|
||||
|
||||
|
|
|
@ -554,7 +554,6 @@ template <class E> constexpr const E* data(initializer_list<E> il) noexcept;
|
|||
#include <__iterator/concepts.h>
|
||||
#include <__iterator/default_sentinel.h>
|
||||
#include <__iterator/incrementable_traits.h>
|
||||
#include <__iterator/indirect_concepts.h>
|
||||
#include <__iterator/iter_move.h>
|
||||
#include <__iterator/iterator_traits.h>
|
||||
#include <__iterator/next.h>
|
||||
|
|
Loading…
Reference in New Issue