Skip to content

Commit c54d305

Browse files
committed
[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
1 parent f35bcea commit c54d305

File tree

5 files changed

+65
-102
lines changed

5 files changed

+65
-102
lines changed

libcxx/include/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ set(files
1818
__iterator/concepts.h
1919
__iterator/default_sentinel.h
2020
__iterator/incrementable_traits.h
21-
__iterator/indirect_concepts.h
2221
__iterator/iter_move.h
2322
__iterator/iterator_traits.h
2423
__iterator/next.h

libcxx/include/__iterator/concepts.h

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,71 @@ concept contiguous_iterator =
171171
template<class _Ip>
172172
concept __has_arrow = input_iterator<_Ip> && (is_pointer_v<_Ip> || requires(_Ip __i) { __i.operator->(); });
173173

174+
// [indirectcallable.indirectinvocable]
175+
template<class _Fp, class _It>
176+
concept indirectly_unary_invocable =
177+
indirectly_readable<_It> &&
178+
copy_constructible<_Fp> &&
179+
invocable<_Fp&, iter_value_t<_It>&> &&
180+
invocable<_Fp&, iter_reference_t<_It>> &&
181+
invocable<_Fp&, iter_common_reference_t<_It>> &&
182+
common_reference_with<
183+
invoke_result_t<_Fp&, iter_value_t<_It>&>,
184+
invoke_result_t<_Fp&, iter_reference_t<_It>>>;
185+
186+
template<class _Fp, class _It>
187+
concept indirectly_regular_unary_invocable =
188+
indirectly_readable<_It> &&
189+
copy_constructible<_Fp> &&
190+
regular_invocable<_Fp&, iter_value_t<_It>&> &&
191+
regular_invocable<_Fp&, iter_reference_t<_It>> &&
192+
regular_invocable<_Fp&, iter_common_reference_t<_It>> &&
193+
common_reference_with<
194+
invoke_result_t<_Fp&, iter_value_t<_It>&>,
195+
invoke_result_t<_Fp&, iter_reference_t<_It>>>;
196+
197+
template<class _Fp, class _It>
198+
concept indirect_unary_predicate =
199+
indirectly_readable<_It> &&
200+
copy_constructible<_Fp> &&
201+
predicate<_Fp&, iter_value_t<_It>&> &&
202+
predicate<_Fp&, iter_reference_t<_It>> &&
203+
predicate<_Fp&, iter_common_reference_t<_It>>;
204+
205+
template<class _Fp, class _It1, class _It2>
206+
concept indirect_binary_predicate =
207+
indirectly_readable<_It1> && indirectly_readable<_It2> &&
208+
copy_constructible<_Fp> &&
209+
predicate<_Fp&, iter_value_t<_It1>&, iter_value_t<_It2>&> &&
210+
predicate<_Fp&, iter_value_t<_It1>&, iter_reference_t<_It2>> &&
211+
predicate<_Fp&, iter_reference_t<_It1>, iter_value_t<_It2>&> &&
212+
predicate<_Fp&, iter_reference_t<_It1>, iter_reference_t<_It2>> &&
213+
predicate<_Fp&, iter_common_reference_t<_It1>, iter_common_reference_t<_It2>>;
214+
215+
template<class _Fp, class _It1, class _It2 = _It1>
216+
concept indirect_equivalence_relation =
217+
indirectly_readable<_It1> && indirectly_readable<_It2> &&
218+
copy_constructible<_Fp> &&
219+
equivalence_relation<_Fp&, iter_value_t<_It1>&, iter_value_t<_It2>&> &&
220+
equivalence_relation<_Fp&, iter_value_t<_It1>&, iter_reference_t<_It2>> &&
221+
equivalence_relation<_Fp&, iter_reference_t<_It1>, iter_value_t<_It2>&> &&
222+
equivalence_relation<_Fp&, iter_reference_t<_It1>, iter_reference_t<_It2>> &&
223+
equivalence_relation<_Fp&, iter_common_reference_t<_It1>, iter_common_reference_t<_It2>>;
224+
225+
template<class _Fp, class _It1, class _It2 = _It1>
226+
concept indirect_strict_weak_order =
227+
indirectly_readable<_It1> && indirectly_readable<_It2> &&
228+
copy_constructible<_Fp> &&
229+
strict_weak_order<_Fp&, iter_value_t<_It1>&, iter_value_t<_It2>&> &&
230+
strict_weak_order<_Fp&, iter_value_t<_It1>&, iter_reference_t<_It2>> &&
231+
strict_weak_order<_Fp&, iter_reference_t<_It1>, iter_value_t<_It2>&> &&
232+
strict_weak_order<_Fp&, iter_reference_t<_It1>, iter_reference_t<_It2>> &&
233+
strict_weak_order<_Fp&, iter_common_reference_t<_It1>, iter_common_reference_t<_It2>>;
234+
235+
template<class _Fp, class... _Its>
236+
requires (indirectly_readable<_Its> && ...) && invocable<_Fp, iter_reference_t<_Its>...>
237+
using indirect_result_t = invoke_result_t<_Fp, iter_reference_t<_Its>...>;
238+
174239
// clang-format on
175240

176241
#endif // !defined(_LIBCPP_HAS_NO_RANGES)

libcxx/include/__iterator/indirect_concepts.h

Lines changed: 0 additions & 99 deletions
This file was deleted.

libcxx/include/__iterator/projected.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
#include <__config>
1313
#include <__iterator/concepts.h>
14-
#include <__iterator/indirect_concepts.h>
1514
#include <__iterator/incrementable_traits.h>
1615
#include <type_traits>
1716

libcxx/include/iterator

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -554,7 +554,6 @@ template <class E> constexpr const E* data(initializer_list<E> il) noexcept;
554554
#include <__iterator/concepts.h>
555555
#include <__iterator/default_sentinel.h>
556556
#include <__iterator/incrementable_traits.h>
557-
#include <__iterator/indirect_concepts.h>
558557
#include <__iterator/iter_move.h>
559558
#include <__iterator/iterator_traits.h>
560559
#include <__iterator/next.h>

0 commit comments

Comments
 (0)