[libcxx-commits] [libcxx] c54d305 - [libc++] NFC: Move indirect_concepts.h to __iterator/concepts.h

Louis Dionne via libcxx-commits libcxx-commits at lists.llvm.org
Fri Jun 11 09:57:13 PDT 2021


Author: Louis Dionne
Date: 2021-06-11T12:57:04-04:00
New Revision: c54d3050f7b9fa550144f792d79ec5b2d5de31c5

URL: https://github.com/llvm/llvm-project/commit/c54d3050f7b9fa550144f792d79ec5b2d5de31c5
DIFF: https://github.com/llvm/llvm-project/commit/c54d3050f7b9fa550144f792d79ec5b2d5de31c5.diff

LOG: [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

Added: 
    

Modified: 
    libcxx/include/CMakeLists.txt
    libcxx/include/__iterator/concepts.h
    libcxx/include/__iterator/projected.h
    libcxx/include/iterator

Removed: 
    libcxx/include/__iterator/indirect_concepts.h


################################################################################
diff  --git a/libcxx/include/CMakeLists.txt b/libcxx/include/CMakeLists.txt
index 798c4d8915039..d2f866a12dbbe 100644
--- a/libcxx/include/CMakeLists.txt
+++ b/libcxx/include/CMakeLists.txt
@@ -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

diff  --git a/libcxx/include/__iterator/concepts.h b/libcxx/include/__iterator/concepts.h
index d6ca4107a4203..a65413180027c 100644
--- a/libcxx/include/__iterator/concepts.h
+++ b/libcxx/include/__iterator/concepts.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)

diff  --git a/libcxx/include/__iterator/indirect_concepts.h b/libcxx/include/__iterator/indirect_concepts.h
deleted file mode 100644
index d0ec08c143065..0000000000000
--- a/libcxx/include/__iterator/indirect_concepts.h
+++ /dev/null
@@ -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

diff  --git a/libcxx/include/__iterator/projected.h b/libcxx/include/__iterator/projected.h
index 8f2853f0f1256..7064a5eb91987 100644
--- a/libcxx/include/__iterator/projected.h
+++ b/libcxx/include/__iterator/projected.h
@@ -11,7 +11,6 @@
 
 #include <__config>
 #include <__iterator/concepts.h>
-#include <__iterator/indirect_concepts.h>
 #include <__iterator/incrementable_traits.h>
 #include <type_traits>
 

diff  --git a/libcxx/include/iterator b/libcxx/include/iterator
index 40601bb496ea0..08faf4d931af8 100644
--- a/libcxx/include/iterator
+++ b/libcxx/include/iterator
@@ -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>


        


More information about the libcxx-commits mailing list