{
tuple<_Vs...> _M_views;
- template<bool _Const> class iterator;
+ template<bool _Const> class _Iterator;
public:
constexpr concat_view() = default;
: _M_views(std::move(__views)...)
{ }
- constexpr iterator<false>
+ constexpr _Iterator<false>
begin() requires (!(__detail::__simple_view<_Vs> && ...))
{
- iterator<false> __it(this, in_place_index<0>, ranges::begin(std::get<0>(_M_views)));
+ _Iterator<false> __it(this, in_place_index<0>, ranges::begin(std::get<0>(_M_views)));
__it.template _M_satisfy<0>();
return __it;
}
- constexpr iterator<true>
+ constexpr _Iterator<true>
begin() const requires (range<const _Vs> && ...) && __detail::__concatable<const _Vs...>
{
- iterator<true> __it(this, in_place_index<0>, ranges::begin(std::get<0>(_M_views)));
+ _Iterator<true> __it(this, in_place_index<0>, ranges::begin(std::get<0>(_M_views)));
__it.template _M_satisfy<0>();
return __it;
}
constexpr auto __n = sizeof...(_Vs);
if constexpr ((semiregular<iterator_t<_Vs>> && ...)
&& common_range<_Vs...[__n - 1]>)
- return iterator<false>(this, in_place_index<__n - 1>,
- ranges::end(std::get<__n - 1>(_M_views)));
+ return _Iterator<false>(this, in_place_index<__n - 1>,
+ ranges::end(std::get<__n - 1>(_M_views)));
else
return default_sentinel;
}
constexpr auto __n = sizeof...(_Vs);
if constexpr ((semiregular<iterator_t<const _Vs>> && ...)
&& common_range<const _Vs...[__n - 1]>)
- return iterator<true>(this, in_place_index<__n - 1>,
- ranges::end(std::get<__n - 1>(_M_views)));
+ return _Iterator<true>(this, in_place_index<__n - 1>,
+ ranges::end(std::get<__n - 1>(_M_views)));
else
return default_sentinel;
}
template<input_range... _Vs>
requires (view<_Vs> && ...) && (sizeof...(_Vs) > 0) && __detail::__concatable<_Vs...>
template<bool _Const>
- class concat_view<_Vs...>::iterator
+ class concat_view<_Vs...>::_Iterator
: public __detail::__concat_view_iter_cat<_Const, _Vs...>
{
static auto
}
friend concat_view;
- friend iterator<!_Const>;
+ friend _Iterator<!_Const>;
public:
// iterator_category defined in __concat_view_iter_cat
template<typename... _Args>
explicit constexpr
- iterator(__maybe_const_t<_Const, concat_view>* __parent, _Args&&... __args)
+ _Iterator(__maybe_const_t<_Const, concat_view>* __parent, _Args&&... __args)
requires constructible_from<__base_iter, _Args&&...>
: _M_parent(__parent), _M_it(std::forward<_Args>(__args)...)
{ }
public:
- iterator() = default;
+ _Iterator() = default;
constexpr
- iterator(iterator<!_Const> __it)
+ _Iterator(_Iterator<!_Const> __it)
requires _Const && (convertible_to<iterator_t<_Vs>, iterator_t<const _Vs>> && ...)
: _M_parent(__it._M_parent)
{
return std::visit([](auto&& __it) -> reference { return *__it; }, _M_it);
}
- constexpr iterator&
+ constexpr _Iterator&
operator++()
{
_M_invoke_with_runtime_index([this]<size_t _Idx>() {
operator++(int)
{ ++*this; }
- constexpr iterator
+ constexpr _Iterator
operator++(int)
requires __detail::__all_forward<_Const, _Vs...>
{
return __tmp;
}
- constexpr iterator&
+ constexpr _Iterator&
operator--()
requires __detail::__concat_is_bidirectional<_Const, _Vs...>
{
return *this;
}
- constexpr iterator
+ constexpr _Iterator
operator--(int)
requires __detail::__concat_is_bidirectional<_Const, _Vs...>
{
return __tmp;
}
- constexpr iterator&
+ constexpr _Iterator&
operator+=(difference_type __n)
requires __detail::__concat_is_random_access<_Const, _Vs...>
{
return *this;
}
- constexpr iterator&
+ constexpr _Iterator&
operator-=(difference_type __n)
requires __detail::__concat_is_random_access<_Const, _Vs...>
{
{ return *((*this) + __n); }
friend constexpr bool
- operator==(const iterator& __x, const iterator& __y)
+ operator==(const _Iterator& __x, const _Iterator& __y)
requires (equality_comparable<iterator_t<__maybe_const_t<_Const, _Vs>>> && ...)
{
__glibcxx_assert(!__x._M_it.valueless_by_exception());
}
friend constexpr bool
- operator==(const iterator& __it, default_sentinel_t)
+ operator==(const _Iterator& __it, default_sentinel_t)
{
__glibcxx_assert(!__it._M_it.valueless_by_exception());
constexpr auto __last_idx = sizeof...(_Vs) - 1;
}
friend constexpr bool
- operator<(const iterator& __x, const iterator& __y)
+ operator<(const _Iterator& __x, const _Iterator& __y)
requires __detail::__all_random_access<_Const, _Vs...>
{ return __x._M_it < __y._M_it; }
friend constexpr bool
- operator>(const iterator& __x, const iterator& __y)
+ operator>(const _Iterator& __x, const _Iterator& __y)
requires __detail::__all_random_access<_Const, _Vs...>
{ return __x._M_it > __y._M_it; }
friend constexpr bool
- operator<=(const iterator& __x, const iterator& __y)
+ operator<=(const _Iterator& __x, const _Iterator& __y)
requires __detail::__all_random_access<_Const, _Vs...>
{ return __x._M_it <= __y._M_it; }
friend constexpr bool
- operator>=(const iterator& __x, const iterator& __y)
+ operator>=(const _Iterator& __x, const _Iterator& __y)
requires __detail::__all_random_access<_Const, _Vs...>
{ return __x._M_it >= __y._M_it; }
friend constexpr auto
- operator<=>(const iterator& __x, const iterator& __y)
+ operator<=>(const _Iterator& __x, const _Iterator& __y)
requires __detail::__all_random_access<_Const, _Vs...>
&& (three_way_comparable<iterator_t<__maybe_const_t<_Const, _Vs>>> && ...)
{ return __x._M_it <=> __y._M_it; }
- friend constexpr iterator
- operator+(const iterator& __it, difference_type __n)
+ friend constexpr _Iterator
+ operator+(const _Iterator& __it, difference_type __n)
requires __detail::__concat_is_random_access<_Const, _Vs...>
{ return auto(__it) += __n; }
- friend constexpr iterator
- operator+(difference_type __n, const iterator& __it)
+ friend constexpr _Iterator
+ operator+(difference_type __n, const _Iterator& __it)
requires __detail::__concat_is_random_access<_Const, _Vs...>
{ return __it + __n; }
- friend constexpr iterator
- operator-(const iterator& __it, difference_type __n)
+ friend constexpr _Iterator
+ operator-(const _Iterator& __it, difference_type __n)
requires __detail::__concat_is_random_access<_Const, _Vs...>
{ return auto(__it) -= __n; }
friend constexpr difference_type
- operator-(const iterator& __x, const iterator& __y)
+ operator-(const _Iterator& __x, const _Iterator& __y)
requires __detail::__concat_is_random_access<_Const, _Vs...>
{
return _S_invoke_with_runtime_index([&]<size_t _Ix>() -> difference_type {
}
friend constexpr difference_type
- operator-(const iterator& __x, default_sentinel_t)
+ operator-(const _Iterator& __x, default_sentinel_t)
requires (sized_sentinel_for<sentinel_t<__maybe_const_t<_Const, _Vs>>,
iterator_t<__maybe_const_t<_Const, _Vs>>> && ...)
&& __detail::__all_but_first_sized<__maybe_const_t<_Const, _Vs>...>::value
}
friend constexpr difference_type
- operator-(default_sentinel_t, const iterator& __x)
+ operator-(default_sentinel_t, const _Iterator& __x)
requires (sized_sentinel_for<sentinel_t<__maybe_const_t<_Const, _Vs>>,
iterator_t<__maybe_const_t<_Const, _Vs>>> && ...)
&& __detail::__all_but_first_sized<__maybe_const_t<_Const, _Vs>...>::value
{ return -(__x - default_sentinel); }
friend constexpr decltype(auto)
- iter_move(const iterator& __it)
+ iter_move(const _Iterator& __it)
{
using _Res = __detail::__concat_rvalue_reference_t<__maybe_const_t<_Const, _Vs>...>;
return std::visit([](const auto& __i) -> _Res {
}
friend constexpr void
- iter_swap(const iterator& __x, const iterator& __y)
- requires swappable_with<iter_reference_t<iterator>, iter_reference_t<iterator>>
+ iter_swap(const _Iterator& __x, const _Iterator& __y)
+ requires swappable_with<iter_reference_t<_Iterator>, iter_reference_t<_Iterator>>
&& (... && indirectly_swappable<iterator_t<__maybe_const_t<_Const, _Vs>>>)
{
std::visit([&]<typename _Tp, typename _Up>(const _Tp& __it1, const _Up& __it2) {