Commit aca60ecf by Jonathan Wakely

libstdc++: Add ranges_size_t and rename all_view (LWG 3335)

	* include/bits/range_access.h (range_size_t): Define alias template.
	* include/std/ranges (all_view): Rename to views::all_t (LWG 3335).
	* testsuite/std/ranges/adaptors/filter.cc: Adjust to new name.
parent 4cc3b275
2020-02-19 Jonathan Wakely <jwakely@redhat.com> 2020-02-19 Jonathan Wakely <jwakely@redhat.com>
* include/bits/range_access.h (range_size_t): Define alias template.
* include/std/ranges (all_view): Rename to views::all_t (LWG 3335).
* testsuite/std/ranges/adaptors/filter.cc: Adjust to new name.
* include/std/ranges (filter_view, transform_view, take_view) * include/std/ranges (filter_view, transform_view, take_view)
(join_view, split_view, reverse_view): Remove commented-out converting (join_view, split_view, reverse_view): Remove commented-out converting
constructors (LWG 3280). constructors (LWG 3280).
......
...@@ -905,6 +905,9 @@ namespace ranges ...@@ -905,6 +905,9 @@ namespace ranges
concept sized_range = range<_Tp> concept sized_range = range<_Tp>
&& requires(_Tp& __t) { ranges::size(__t); }; && requires(_Tp& __t) { ranges::size(__t); };
template<sized_range _Range>
using range_size_t = decltype(ranges::size(std::declval<_Range&>()));
// [range.refinements] // [range.refinements]
/// A range for which ranges::begin returns an output iterator. /// A range for which ranges::begin returns an output iterator.
......
...@@ -1236,10 +1236,11 @@ namespace views ...@@ -1236,10 +1236,11 @@ namespace views
else else
return subrange{std::forward<_Range>(__r)}; return subrange{std::forward<_Range>(__r)};
}; };
} // namespace views
template<viewable_range _Range> template<viewable_range _Range>
using all_view = decltype(views::all(declval<_Range>())); using all_t = decltype(all(std::declval<_Range>()));
} // namespace views
// XXX: the following algos are copied from ranges_algo.h to avoid a circular // XXX: the following algos are copied from ranges_algo.h to avoid a circular
// dependency with that header. // dependency with that header.
...@@ -1503,7 +1504,7 @@ namespace views ...@@ -1503,7 +1504,7 @@ namespace views
}; };
template<typename _Range, typename _Pred> template<typename _Range, typename _Pred>
filter_view(_Range&&, _Pred) -> filter_view<all_view<_Range>, _Pred>; filter_view(_Range&&, _Pred) -> filter_view<views::all_t<_Range>, _Pred>;
namespace views namespace views
{ {
...@@ -1836,7 +1837,7 @@ namespace views ...@@ -1836,7 +1837,7 @@ namespace views
}; };
template<typename _Range, typename _Fp> template<typename _Range, typename _Fp>
transform_view(_Range&&, _Fp) -> transform_view<all_view<_Range>, _Fp>; transform_view(_Range&&, _Fp) -> transform_view<views::all_t<_Range>, _Fp>;
namespace views namespace views
{ {
...@@ -1974,7 +1975,7 @@ namespace views ...@@ -1974,7 +1975,7 @@ namespace views
template<range _Range> template<range _Range>
take_view(_Range&&, range_difference_t<_Range>) take_view(_Range&&, range_difference_t<_Range>)
-> take_view<all_view<_Range>>; -> take_view<views::all_t<_Range>>;
namespace views namespace views
{ {
...@@ -2066,7 +2067,7 @@ namespace views ...@@ -2066,7 +2067,7 @@ namespace views
template<typename _Range, typename _Pred> template<typename _Range, typename _Pred>
take_while_view(_Range&&, _Pred) take_while_view(_Range&&, _Pred)
-> take_while_view<all_view<_Range>, _Pred>; -> take_while_view<views::all_t<_Range>, _Pred>;
namespace views namespace views
{ {
...@@ -2143,7 +2144,7 @@ namespace views ...@@ -2143,7 +2144,7 @@ namespace views
template<typename _Range> template<typename _Range>
drop_view(_Range&&, range_difference_t<_Range>) drop_view(_Range&&, range_difference_t<_Range>)
-> drop_view<all_view<_Range>>; -> drop_view<views::all_t<_Range>>;
namespace views namespace views
{ {
...@@ -2199,7 +2200,7 @@ namespace views ...@@ -2199,7 +2200,7 @@ namespace views
template<typename _Range, typename _Pred> template<typename _Range, typename _Pred>
drop_while_view(_Range&&, _Pred) drop_while_view(_Range&&, _Pred)
-> drop_while_view<all_view<_Range>, _Pred>; -> drop_while_view<views::all_t<_Range>, _Pred>;
namespace views namespace views
{ {
...@@ -2450,7 +2451,7 @@ namespace views ...@@ -2450,7 +2451,7 @@ namespace views
// XXX: _M_inner is "present only when !is_reference_v<_InnerRange>" // XXX: _M_inner is "present only when !is_reference_v<_InnerRange>"
[[no_unique_address]] [[no_unique_address]]
conditional_t<!is_reference_v<_InnerRange>, conditional_t<!is_reference_v<_InnerRange>,
all_view<_InnerRange>, __detail::_Empty> _M_inner; views::all_t<_InnerRange>, __detail::_Empty> _M_inner;
public: public:
join_view() = default; join_view() = default;
...@@ -2514,7 +2515,7 @@ namespace views ...@@ -2514,7 +2515,7 @@ namespace views
}; };
template<typename _Range> template<typename _Range>
explicit join_view(_Range&&) -> join_view<all_view<_Range>>; explicit join_view(_Range&&) -> join_view<views::all_t<_Range>>;
namespace views namespace views
{ {
...@@ -2838,7 +2839,7 @@ namespace views ...@@ -2838,7 +2839,7 @@ namespace views
{ } { }
template<input_range _Range> template<input_range _Range>
requires constructible_from<_Vp, all_view<_Range>> requires constructible_from<_Vp, views::all_t<_Range>>
&& constructible_from<_Pattern, single_view<range_value_t<_Range>>> && constructible_from<_Pattern, single_view<range_value_t<_Range>>>
constexpr constexpr
split_view(_Range&& __r, range_value_t<_Range> __e) split_view(_Range&& __r, range_value_t<_Range> __e)
...@@ -2893,11 +2894,11 @@ namespace views ...@@ -2893,11 +2894,11 @@ namespace views
template<typename _Range, typename _Pred> template<typename _Range, typename _Pred>
split_view(_Range&&, _Pred&&) split_view(_Range&&, _Pred&&)
-> split_view<all_view<_Range>, all_view<_Pred>>; -> split_view<views::all_t<_Range>, views::all_t<_Pred>>;
template<input_range _Range> template<input_range _Range>
split_view(_Range&&, range_value_t<_Range>) split_view(_Range&&, range_value_t<_Range>)
-> split_view<all_view<_Range>, single_view<range_value_t<_Range>>>; -> split_view<views::all_t<_Range>, single_view<range_value_t<_Range>>>;
namespace views namespace views
{ {
...@@ -2945,7 +2946,7 @@ namespace views ...@@ -2945,7 +2946,7 @@ namespace views
/* XXX: LWG 3280 didn't remove this constructor, but I think it should? /* XXX: LWG 3280 didn't remove this constructor, but I think it should?
template<viewable_range _Range> template<viewable_range _Range>
requires (!common_range<_Range>) requires (!common_range<_Range>)
&& constructible_from<_Vp, all_view<_Range>> && constructible_from<_Vp, views::all_t<_Range>>
constexpr explicit constexpr explicit
common_view(_Range&& __r) common_view(_Range&& __r)
: _M_base(views::all(std::forward<_Range>(__r))) : _M_base(views::all(std::forward<_Range>(__r)))
...@@ -3010,7 +3011,7 @@ namespace views ...@@ -3010,7 +3011,7 @@ namespace views
}; };
template<typename _Range> template<typename _Range>
common_view(_Range&&) -> common_view<all_view<_Range>>; common_view(_Range&&) -> common_view<views::all_t<_Range>>;
namespace views namespace views
{ {
...@@ -3083,7 +3084,7 @@ namespace views ...@@ -3083,7 +3084,7 @@ namespace views
}; };
template<typename _Range> template<typename _Range>
reverse_view(_Range&&) -> reverse_view<all_view<_Range>>; reverse_view(_Range&&) -> reverse_view<views::all_t<_Range>>;
namespace views namespace views
{ {
...@@ -3356,10 +3357,10 @@ namespace views ...@@ -3356,10 +3357,10 @@ namespace views
}; };
template<typename _Range> template<typename _Range>
using keys_view = elements_view<all_view<_Range>, 0>; using keys_view = elements_view<views::all_t<_Range>, 0>;
template<typename _Range> template<typename _Range>
using values_view = elements_view<all_view<_Range>, 1>; using values_view = elements_view<views::all_t<_Range>, 1>;
namespace views namespace views
{ {
...@@ -3367,7 +3368,8 @@ namespace views ...@@ -3367,7 +3368,8 @@ namespace views
inline constexpr __adaptor::_RangeAdaptorClosure elements inline constexpr __adaptor::_RangeAdaptorClosure elements
= [] <viewable_range _Range> (_Range&& __r) = [] <viewable_range _Range> (_Range&& __r)
{ {
return elements_view<all_view<_Range>, _Nm>{std::forward<_Range>(__r)}; using _El = elements_view<views::all_t<_Range>, _Nm>;
return _El{std::forward<_Range>(__r)};
}; };
inline constexpr __adaptor::_RangeAdaptorClosure keys = elements<0>; inline constexpr __adaptor::_RangeAdaptorClosure keys = elements<0>;
......
...@@ -43,7 +43,7 @@ test01() ...@@ -43,7 +43,7 @@ test01()
static_assert(!ranges::sized_range<R>); static_assert(!ranges::sized_range<R>);
static_assert(ranges::bidirectional_range<R>); static_assert(ranges::bidirectional_range<R>);
static_assert(!ranges::random_access_range<R>); static_assert(!ranges::random_access_range<R>);
static_assert(ranges::range<ranges::all_view<R>>); static_assert(ranges::range<views::all_t<R>>);
VERIFY( ranges::equal(v, (int[]){1,3,5}) ); VERIFY( ranges::equal(v, (int[]){1,3,5}) );
VERIFY( ranges::equal(v | views::reverse, (int[]){5,3,1}) ); VERIFY( ranges::equal(v | views::reverse, (int[]){5,3,1}) );
VERIFY( v.pred()(3) == true ); VERIFY( v.pred()(3) == true );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment