[gcc(refs/users/ppalka/heads/libstdcxx-constrained-algos-adaptors)] Put _RangeAdaptor and _RangeAdaptorClosure into their own namespace

Patrick Palka ppalka@gcc.gnu.org
Thu Feb 6 23:24:00 GMT 2020


https://gcc.gnu.org/g:98ac78c0aa4979d6a323fd24896718bd2143fab5

commit 98ac78c0aa4979d6a323fd24896718bd2143fab5
Author: Patrick Palka <ppalka@redhat.com>
Date:   Thu Feb 6 17:52:22 2020 -0500

    Put _RangeAdaptor and _RangeAdaptorClosure into their own namespace

Diff:
---
 libstdc++-v3/include/std/ranges | 231 ++++++++++++++++++++--------------------
 1 file changed, 117 insertions(+), 114 deletions(-)

diff --git a/libstdc++-v3/include/std/ranges b/libstdc++-v3/include/std/ranges
index 231e429..8875c33 100644
--- a/libstdc++-v3/include/std/ranges
+++ b/libstdc++-v3/include/std/ranges
@@ -957,115 +957,118 @@ namespace __detail
 
 namespace views
 {
-  template<typename _Callable>
-    struct _RangeAdaptorClosure;
+  namespace __adaptor
+  {
+    template<typename _Callable>
+      struct _RangeAdaptorClosure;
 
-  template<typename _Callable>
-    struct _RangeAdaptor
-    {
-    protected:
-      [[no_unique_address]]
-	conditional_t<!is_default_constructible_v<_Callable>,
-		      _Callable, __detail::_Empty> _M_callable;
+    template<typename _Callable>
+      struct _RangeAdaptor
+      {
+      protected:
+	[[no_unique_address]]
+	  conditional_t<!is_default_constructible_v<_Callable>,
+			_Callable, __detail::_Empty> _M_callable;
 
-    public:
-      constexpr
-      _RangeAdaptor(const _Callable& = {})
-	requires is_default_constructible_v<_Callable>
-      { }
+      public:
+	constexpr
+	_RangeAdaptor(const _Callable& = {})
+	  requires is_default_constructible_v<_Callable>
+	{ }
 
-      constexpr
-      _RangeAdaptor(_Callable __callable)
-	requires (!is_default_constructible_v<_Callable>)
-	: _M_callable(std::move(__callable))
-      { }
+	constexpr
+	_RangeAdaptor(_Callable __callable)
+	  requires (!is_default_constructible_v<_Callable>)
+	  : _M_callable(std::move(__callable))
+	{ }
 
-      template<typename... _Args>
-	requires (sizeof...(_Args) >= 1)
-	constexpr auto
-	operator()(_Args&&... __args) const
-	{
-	  if constexpr (is_invocable_v<_Callable, _Args...>)
-	    {
-	      static_assert(sizeof...(_Args) != 1,
-			    "a _RangeAdaptor that accepts only one argument "
-			    "should be defined as a _RangeAdaptorClosure");
-	      return _Callable{}(std::forward<_Args>(__args)...);
-	    }
-	  else
-	    {
-	      auto __closure = [__args...] <typename _Range> (_Range&& __r) {
-		return _Callable{}(std::forward<_Range>(__r), __args...);
-	      };
-	      using _ClosureType = decltype(__closure);
-	      return _RangeAdaptorClosure<_ClosureType>(std::move(__closure));
-	    }
-	}
-    };
+	template<typename... _Args>
+	  requires (sizeof...(_Args) >= 1)
+	  constexpr auto
+	  operator()(_Args&&... __args) const
+	  {
+	    if constexpr (is_invocable_v<_Callable, _Args...>)
+	      {
+		static_assert(sizeof...(_Args) != 1,
+			      "a _RangeAdaptor that accepts only one argument "
+			      "should be defined as a _RangeAdaptorClosure");
+		return _Callable{}(std::forward<_Args>(__args)...);
+	      }
+	    else
+	      {
+		auto __closure = [__args...] <typename _Range> (_Range&& __r) {
+		  return _Callable{}(std::forward<_Range>(__r), __args...);
+		};
+		using _ClosureType = decltype(__closure);
+		return _RangeAdaptorClosure<_ClosureType>(std::move(__closure));
+	      }
+	  }
+      };
 
-  template<typename _Callable>
-    struct _RangeAdaptorClosure : public _RangeAdaptor<_Callable>
-    {
-      using _RangeAdaptor<_Callable>::_RangeAdaptor;
+    template<typename _Callable>
+      struct _RangeAdaptorClosure : public _RangeAdaptor<_Callable>
+      {
+	using _RangeAdaptor<_Callable>::_RangeAdaptor;
 
-      template<viewable_range _Range>
-	requires requires { declval<_Callable>()(declval<_Range>()); }
-	constexpr auto
-	operator()(_Range&& __r) const
-	{
-	  if constexpr (is_default_constructible_v<_Callable>)
-	    return _Callable{}(std::forward<_Range>(__r));
-	  else
-	    return this->_M_callable(std::forward<_Range>(__r));
-	}
+	template<viewable_range _Range>
+	  requires requires { declval<_Callable>()(declval<_Range>()); }
+	  constexpr auto
+	  operator()(_Range&& __r) const
+	  {
+	    if constexpr (is_default_constructible_v<_Callable>)
+	      return _Callable{}(std::forward<_Range>(__r));
+	    else
+	      return this->_M_callable(std::forward<_Range>(__r));
+	  }
 
-      template<viewable_range _Range>
-	requires requires { declval<_Callable>()(declval<_Range>()); }
-	friend constexpr auto
-	operator|(_Range&& __r, const _RangeAdaptorClosure& __o)
-	{ return __o(std::forward<_Range>(__r)); }
+	template<viewable_range _Range>
+	  requires requires { declval<_Callable>()(declval<_Range>()); }
+	  friend constexpr auto
+	  operator|(_Range&& __r, const _RangeAdaptorClosure& __o)
+	  { return __o(std::forward<_Range>(__r)); }
 
-      template<typename _Tp>
-	friend constexpr auto
-	operator|(const _RangeAdaptorClosure<_Tp>& __x,
-		  const _RangeAdaptorClosure& __y)
-	{
-	  if constexpr (is_default_constructible_v<_Tp>
-			&& is_default_constructible_v<_Callable>)
-	    {
-	      auto __closure = [] <typename _Up> (_Up&& __e) {
-		return std::forward<_Up>(__e) | decltype(__x){} | decltype(__y){};
-	      };
-	      return _RangeAdaptorClosure<decltype(__closure)>(__closure);
-	    }
-	  else if constexpr (is_default_constructible_v<_Tp>
-			     && !is_default_constructible_v<_Callable>)
-	    {
-	      auto __closure = [__y] <typename _Up> (_Up&& __e) {
-		return std::forward<_Up>(__e) | decltype(__x){} | __y;
-	      };
-	      return _RangeAdaptorClosure<decltype(__closure)>(__closure);
-	    }
-	  else if constexpr (!is_default_constructible_v<_Tp>
-			     && is_default_constructible_v<_Callable>)
-	    {
-	      auto __closure = [__x] <typename _Up> (_Up&& __e) {
-		return std::forward<_Up>(__e) | __x | decltype(__y){};
-	      };
-	      return _RangeAdaptorClosure<decltype(__closure)>(__closure);
-	    }
-	  else
-	    {
-	      auto __closure = [__x, __y] <typename _Up> (_Up&& __e) {
-		return std::forward<_Up>(__e) | __x | __y;
-	      };
-	      return _RangeAdaptorClosure<decltype(__closure)>(__closure);
-	    }
-	}
-    };
+	template<typename _Tp>
+	  friend constexpr auto
+	  operator|(const _RangeAdaptorClosure<_Tp>& __x,
+		    const _RangeAdaptorClosure& __y)
+	  {
+	    if constexpr (is_default_constructible_v<_Tp>
+			  && is_default_constructible_v<_Callable>)
+	      {
+		auto __closure = [] <typename _Up> (_Up&& __e) {
+		  return std::forward<_Up>(__e) | decltype(__x){} | decltype(__y){};
+		};
+		return _RangeAdaptorClosure<decltype(__closure)>(__closure);
+	      }
+	    else if constexpr (is_default_constructible_v<_Tp>
+			       && !is_default_constructible_v<_Callable>)
+	      {
+		auto __closure = [__y] <typename _Up> (_Up&& __e) {
+		  return std::forward<_Up>(__e) | decltype(__x){} | __y;
+		};
+		return _RangeAdaptorClosure<decltype(__closure)>(__closure);
+	      }
+	    else if constexpr (!is_default_constructible_v<_Tp>
+			       && is_default_constructible_v<_Callable>)
+	      {
+		auto __closure = [__x] <typename _Up> (_Up&& __e) {
+		  return std::forward<_Up>(__e) | __x | decltype(__y){};
+		};
+		return _RangeAdaptorClosure<decltype(__closure)>(__closure);
+	      }
+	    else
+	      {
+		auto __closure = [__x, __y] <typename _Up> (_Up&& __e) {
+		  return std::forward<_Up>(__e) | __x | __y;
+		};
+		return _RangeAdaptorClosure<decltype(__closure)>(__closure);
+	      }
+	  }
+      };
 
-  template<typename _Callable>
-    _RangeAdaptorClosure(_Callable) -> _RangeAdaptorClosure<_Callable>;
+    template<typename _Callable>
+      _RangeAdaptorClosure(_Callable) -> _RangeAdaptorClosure<_Callable>;
+  } // namespace __adaptor
 } // namespace views
 
   template<range _Range> requires is_object_v<_Range>
@@ -1122,7 +1125,7 @@ namespace views
 
   namespace views
   {
-    inline constexpr _RangeAdaptorClosure all
+    inline constexpr __adaptor::_RangeAdaptorClosure all
       = [] <viewable_range _Range> (_Range&& __r)
       {
 	if constexpr (view<decay_t<_Range>>)
@@ -1449,7 +1452,7 @@ namespace views
 
   namespace views
   {
-    inline constexpr _RangeAdaptor filter
+    inline constexpr __adaptor::_RangeAdaptor filter
       = [] <viewable_range _Range, typename _Pred> (_Range&& __r, _Pred&& __p)
       {
 	return filter_view{std::forward<_Range>(__r), std::forward<_Pred>(__p)};
@@ -1788,7 +1791,7 @@ namespace views
 
   namespace views
   {
-    inline constexpr _RangeAdaptor transform
+    inline constexpr __adaptor::_RangeAdaptor transform
       = [] <viewable_range _Range, typename _Fp> (_Range&& __r, _Fp&& __f)
       {
 	return transform_view{std::forward<_Range>(__r), std::forward<_Fp>(__f)};
@@ -1927,7 +1930,7 @@ namespace views
 
   namespace views
   {
-    inline constexpr _RangeAdaptor take
+    inline constexpr __adaptor::_RangeAdaptor take
       = [] <viewable_range _Range, typename _Tp> (_Range&& __r, _Tp&& __n)
       {
 	return take_view{std::forward<_Range>(__r), std::forward<_Tp>(__n)};
@@ -2019,7 +2022,7 @@ namespace views
 
   namespace views
   {
-    inline constexpr _RangeAdaptor take_while
+    inline constexpr __adaptor::_RangeAdaptor take_while
       = [] <viewable_range _Range, typename _Pred> (_Range&& __r, _Pred&& __p)
       {
 	return take_while_view{std::forward<_Range>(__r), std::forward<_Pred>(__p)};
@@ -2096,7 +2099,7 @@ namespace views
 
   namespace views
   {
-    inline constexpr _RangeAdaptor drop
+    inline constexpr __adaptor::_RangeAdaptor drop
       = [] <viewable_range _Range, typename _Tp> (_Range&& __r, _Tp&& __n)
       {
 	return drop_view{std::forward<_Range>(__r), std::forward<_Tp>(__n)};
@@ -2150,7 +2153,7 @@ namespace views
 
   namespace views
   {
-    inline constexpr _RangeAdaptor drop_while
+    inline constexpr __adaptor::_RangeAdaptor drop_while
       = [] <viewable_range _Range, typename _Pred> (_Range&& __r, _Pred&& __p)
       {
 	return drop_while_view{std::forward<_Range>(__r),
@@ -2474,7 +2477,7 @@ namespace views
 
   namespace views
   {
-    inline constexpr _RangeAdaptorClosure join
+    inline constexpr __adaptor::_RangeAdaptorClosure join
       = [] <viewable_range _Range> (_Range&& __r)
       {
 	return join_view{std::forward<_Range>(__r)};
@@ -2865,7 +2868,7 @@ namespace views
 
   namespace views
   {
-    inline constexpr _RangeAdaptor split
+    inline constexpr __adaptor::_RangeAdaptor split
       = [] <viewable_range _Range, typename _Fp> (_Range&& __r, _Fp&& __f)
       {
 	return split_view{std::forward<_Range>(__r), std::forward<_Fp>(__f)};
@@ -2976,7 +2979,7 @@ namespace views
 
   namespace views
   {
-    inline constexpr _RangeAdaptorClosure common
+    inline constexpr __adaptor::_RangeAdaptorClosure common
       = [] <viewable_range _Range> (_Range&& __r)
       {
 	if constexpr (common_range<_Range>
@@ -3076,7 +3079,7 @@ namespace views
 	inline constexpr bool __is_reverse_view<reverse_view<_Vp>> = true;
     }
 
-    inline constexpr _RangeAdaptorClosure reverse
+    inline constexpr __adaptor::_RangeAdaptorClosure reverse
       = [] <viewable_range _Range> (_Range&& __r)
       {
 	using _Tp = remove_cvref_t<_Range>;
@@ -3335,14 +3338,14 @@ namespace views
   namespace views
   {
     template<size_t _Nm>
-    inline constexpr _RangeAdaptorClosure elements
+    inline constexpr __adaptor::_RangeAdaptorClosure elements
       = [] <viewable_range _Range> (_Range&& __r)
       {
 	return elements_view<all_view<_Range>, _Nm>{std::forward<_Range>(__r)};
       };
 
-    inline constexpr _RangeAdaptorClosure keys = elements<0>;
-    inline constexpr _RangeAdaptorClosure values = elements<1>;
+    inline constexpr __adaptor::_RangeAdaptorClosure keys = elements<0>;
+    inline constexpr __adaptor::_RangeAdaptorClosure values = elements<1>;
   } // namespace views
 
 } // namespace ranges



More information about the Libstdc++-cvs mailing list