Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 38 additions & 38 deletions source/ranges.tex
Original file line number Diff line number Diff line change
Expand Up @@ -562,16 +562,16 @@

namespace views { inline constexpr @\unspec@ cache_latest = @\unspec@; }

// \ref{range.to.input}, to input view
// \ref{range.as.input}, as input view
template<@\libconcept{input_range}@ V>
requires @\libconcept{view}@<V>
class to_input_view;
class as_input_view;

template<class V>
constexpr bool enable_borrowed_range<to_input_view<V>> =
constexpr bool enable_borrowed_range<as_input_view<V>> =
enable_borrowed_range<V>;

namespace views { inline constexpr @\unspec@ to_input = @\unspec@; }
namespace views { inline constexpr @\unspec@ as_input = @\unspec@; }
}

namespace std {
Expand Down Expand Up @@ -17752,12 +17752,12 @@
\tcode{x.\exposid{end_} - y.\exposid{current_}}.
\end{itemdescr}

\rSec2[range.to.input]{To input view}
\rSec2[range.as.input]{As input view}

\rSec3[range.to.input.overview]{Overview}
\rSec3[range.as.input.overview]{Overview}

\pnum
\tcode{to_input_view} presents a view of an underlying sequence
\tcode{as_input_view} presents a view of an underlying sequence
as an input-only non-common range.
\begin{note}
This is useful to avoid overhead
Expand All @@ -17766,36 +17766,36 @@
\end{note}

\pnum
The name \tcode{views::to_input} denotes
The name \tcode{views::as_input} denotes
a range adaptor object\iref{range.adaptor.object}.
Let \tcode{E} be an expression and let \tcode{T} be \tcode{decltype((E))}.
The expression \tcode{views::to_input(E)} is expression-equivalent to:
The expression \tcode{views::as_input(E)} is expression-equivalent to:
\begin{itemize}
\item
\tcode{views::all(E)}
if \tcode{T} models \libconcept{input_range},
does not satisfy \libconcept{common_range}, and
does not satisfy \libconcept{forward_range}.
\item
Otherwise, \tcode{to_input_view(E)}.
Otherwise, \tcode{as_input_view(E)}.
\end{itemize}

\rSec3[range.to.input.view]{Class template \tcode{to_input_view}}
\rSec3[range.as.input.view]{Class template \tcode{as_input_view}}

\indexlibraryglobal{to_input_view}%
\indexlibraryglobal{as_input_view}%
\begin{codeblock}
namespace std::ranges {
template<@\libconcept{input_range}@ V>
requires @\libconcept{view}@<V>
class to_input_view : public view_interface<to_input_view<V>> {
class as_input_view : public view_interface<as_input_view<V>> {
V @\exposid{base_}@ = V(); // \expos

// \ref{range.to.input.iterator}, class template \tcode{to_input_view::\exposid{iterator}}
// \ref{range.as.input.iterator}, class template \tcode{as_input_view::\exposid{iterator}}
template<bool Const> class @\exposid{iterator}@; // \expos

public:
to_input_view() requires @\libconcept{default_initializable}@<V> = default;
constexpr explicit to_input_view(V base);
as_input_view() requires @\libconcept{default_initializable}@<V> = default;
constexpr explicit as_input_view(V base);

constexpr V base() const & requires @\libconcept{copy_constructible}@<V> { return @\exposid{base_}@; }
constexpr V base() && { return std::move(@\exposid{base_}@); }
Expand All @@ -17814,13 +17814,13 @@
};

template<class R>
to_input_view(R&&) -> to_input_view<views::all_t<R>>;
as_input_view(R&&) -> as_input_view<views::all_t<R>>;
}
\end{codeblock}

\indexlibraryctor{to_input_view}%
\indexlibraryctor{as_input_view}%
\begin{itemdecl}
constexpr explicit to_input_view(V base);
constexpr explicit as_input_view(V base);
\end{itemdecl}

\begin{itemdescr}
Expand All @@ -17829,7 +17829,7 @@
Initializes \exposid{base_} with \tcode{std::move(base)}.
\end{itemdescr}

\indexlibrarymember{begin}{to_input_view}%
\indexlibrarymember{begin}{as_input_view}%
\begin{itemdecl}
constexpr auto begin() requires (!@\exposconcept{simple-view}@<V>);
\end{itemdecl}
Expand All @@ -17840,7 +17840,7 @@
Equivalent to: \tcode{return \exposid{iterator}<false>(ranges::begin(\exposid{base_}));}
\end{itemdescr}

\indexlibrarymember{begin}{to_input_view}%
\indexlibrarymember{begin}{as_input_view}%
\begin{itemdecl}
constexpr auto begin() const requires @\libconcept{range}@<const V>;
\end{itemdecl}
Expand All @@ -17851,7 +17851,7 @@
Equivalent to: \tcode{return \exposid{iterator}<true>(ranges::begin(\exposid{base_}));}
\end{itemdescr}

\indexlibrarymember{end}{to_input_view}%
\indexlibrarymember{end}{as_input_view}%
\begin{itemdecl}
constexpr auto end() requires (!@\exposconcept{simple-view}@<V>);
constexpr auto end() const requires @\libconcept{range}@<const V>;
Expand All @@ -17863,7 +17863,7 @@
Equivalent to: \tcode{return ranges::end(\exposid{base_});}
\end{itemdescr}

\indexlibrarymember{size}{to_input_view}%
\indexlibrarymember{size}{as_input_view}%
\begin{itemdecl}
constexpr auto size() requires @\libconcept{sized_range}@<V>;
constexpr auto size() const requires @\libconcept{sized_range}@<const V>;
Expand All @@ -17875,7 +17875,7 @@
Equivalent to: \tcode{return ranges::size(\exposid{base_});}
\end{itemdescr}

\indexlibrarymember{reserve_hint}{to_input_view}%
\indexlibrarymember{reserve_hint}{as_input_view}%
\begin{itemdecl}
constexpr auto reserve_hint() requires @\libconcept{approximately_sized_range}@<V>;
constexpr auto reserve_hint() const requires @\libconcept{approximately_sized_range}@<const V>;
Expand All @@ -17887,15 +17887,15 @@
Equivalent to: \tcode{return ranges::reserve_hint(\exposid{base_});}
\end{itemdescr}

\rSec3[range.to.input.iterator]{Class template \tcode{to_input_view::\exposid{iterator}}}
\rSec3[range.as.input.iterator]{Class template \tcode{as_input_view::\exposid{iterator}}}

\indexlibraryglobal{to_input_view::\exposid{iterator}}%
\indexlibraryglobal{as_input_view::\exposid{iterator}}%
\begin{codeblock}
namespace std::ranges {
template<@\libconcept{input_range}@ V>
requires @\libconcept{view}@<V>
template<bool Const>
class to_input_view<V>::@\exposid{iterator}@ {
class as_input_view<V>::@\exposid{iterator}@ {
using @\exposid{Base}@ = @\exposid{maybe-const}@<Const, V>; // \expos

iterator_t<@\exposid{Base}@> @\exposid{current_}@ = iterator_t<@\exposid{Base}@>(); // \expos
Expand Down Expand Up @@ -17940,7 +17940,7 @@
}
\end{codeblock}

\indexlibraryctor{to_input_view::\exposid{iterator}}%
\indexlibraryctor{as_input_view::\exposid{iterator}}%
\begin{itemdecl}
constexpr explicit @\exposid{iterator}@(iterator_t<@\exposid{Base}@> current);
\end{itemdecl}
Expand All @@ -17951,7 +17951,7 @@
Initializes \exposid{current_} with \tcode{std::move(current)}.
\end{itemdescr}

\indexlibraryctor{to_input_view::\exposid{iterator}}%
\indexlibraryctor{as_input_view::\exposid{iterator}}%
\begin{itemdecl}
constexpr @\exposid{iterator}@(@\exposid{iterator}@<!Const> i)
requires Const && @\libconcept{convertible_to}@<iterator_t<V>, iterator_t<@\exposid{Base}@>>;
Expand All @@ -17963,7 +17963,7 @@
Initializes \exposid{current_} with \tcode{std::move(i.\exposid{current_})}.
\end{itemdescr}

\indexlibrarymember{base}{to_input_view::\exposid{iterator}}%
\indexlibrarymember{base}{as_input_view::\exposid{iterator}}%
\begin{itemdecl}
constexpr iterator_t<@\exposid{Base}@> base() &&;
\end{itemdecl}
Expand All @@ -17974,7 +17974,7 @@
\tcode{std::move(\exposid{current_})}.
\end{itemdescr}

\indexlibrarymember{base}{to_input_view::\exposid{iterator}}%
\indexlibrarymember{base}{as_input_view::\exposid{iterator}}%
\begin{itemdecl}
constexpr const iterator_t<@\exposid{Base}@>& base() const & noexcept;
\end{itemdecl}
Expand All @@ -17985,7 +17985,7 @@
\exposid{current_}.
\end{itemdescr}

\indexlibrarymember{operator++}{to_input_view::\exposid{iterator}}%
\indexlibrarymember{operator++}{as_input_view::\exposid{iterator}}%
\begin{itemdecl}
constexpr @\exposid{iterator}@& operator++();
\end{itemdecl}
Expand All @@ -18000,7 +18000,7 @@
\end{codeblock}
\end{itemdescr}

\indexlibrarymember{operator++}{to_input_view::\exposid{iterator}}%
\indexlibrarymember{operator++}{as_input_view::\exposid{iterator}}%
\begin{itemdecl}
constexpr void operator++(int);
\end{itemdecl}
Expand All @@ -18011,7 +18011,7 @@
Equivalent to: \tcode{++*this;}
\end{itemdescr}

\indexlibrarymember{operator==}{to_input_view::\exposid{iterator}}%
\indexlibrarymember{operator==}{as_input_view::\exposid{iterator}}%
\begin{itemdecl}
friend constexpr bool operator==(const @\exposid{iterator}@& x, const sentinel_t<@\exposid{Base}@>& y);
\end{itemdecl}
Expand All @@ -18022,7 +18022,7 @@
\tcode{x.\exposid{current_} == y}.
\end{itemdescr}

\indexlibrarymember{operator-}{to_input_view::\exposid{iterator}}%
\indexlibrarymember{operator-}{as_input_view::\exposid{iterator}}%
\begin{itemdecl}
friend constexpr difference_type operator-(const sentinel_t<@\exposid{Base}@>& y, const @\exposid{iterator}@& x)
requires @\libconcept{sized_sentinel_for}@<sentinel_t<@\exposid{Base}@>, iterator_t<@\exposid{Base}@>>;
Expand All @@ -18034,7 +18034,7 @@
\tcode{y - x.\exposid{current_}}.
\end{itemdescr}

\indexlibrarymember{operator-}{to_input_view::\exposid{iterator}}%
\indexlibrarymember{operator-}{as_input_view::\exposid{iterator}}%
\begin{itemdecl}
friend constexpr difference_type operator-(const @\exposid{iterator}@& x, const sentinel_t<@\exposid{Base}@>& y)
requires @\libconcept{sized_sentinel_for}@<sentinel_t<@\exposid{Base}@>, iterator_t<@\exposid{Base}@>>;
Expand All @@ -18046,7 +18046,7 @@
\tcode{x.\exposid{current_} - y}.
\end{itemdescr}

\indexlibrarymember{iter_move}{to_input_view::\exposid{iterator}}%
\indexlibrarymember{iter_move}{as_input_view::\exposid{iterator}}%
\begin{itemdecl}
friend constexpr range_rvalue_reference_t<@\exposid{Base}@> iter_move(const @\exposid{iterator}@& i)
noexcept(noexcept(ranges::iter_move(i.@\exposid{current_}@)));
Expand All @@ -18058,7 +18058,7 @@
Equivalent to: \tcode{return ranges::iter_move(i.\exposid{current_});}
\end{itemdescr}

\indexlibrarymember{iter_swap}{to_input_view::\exposid{iterator}}%
\indexlibrarymember{iter_swap}{as_input_view::\exposid{iterator}}%
\begin{itemdecl}
friend constexpr void iter_swap(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y)
noexcept(noexcept(ranges::iter_swap(x.@\exposid{current_}@, y.@\exposid{current_}@)))
Expand Down
2 changes: 1 addition & 1 deletion source/support.tex
Original file line number Diff line number Diff line change
Expand Up @@ -789,6 +789,7 @@
#define @\defnlibxname{cpp_lib_ranges}@ 202406L
// also in \libheader{algorithm}, \libheader{functional}, \libheader{iterator}, \libheader{memory}, \libheader{ranges}
#define @\defnlibxname{cpp_lib_ranges_as_const}@ 202311L // freestanding, also in \libheader{ranges}
#define @\defnlibxname{cpp_lib_ranges_as_input}@ 202502L // freestanding, also in \libheader{ranges}
#define @\defnlibxname{cpp_lib_ranges_as_rvalue}@ 202207L // freestanding, also in \libheader{ranges}
#define @\defnlibxname{cpp_lib_ranges_cache_latest}@ 202411L // freestanding, also in \libheader{ranges}
#define @\defnlibxname{cpp_lib_ranges_cartesian_product}@ 202207L // freestanding, also in \libheader{ranges}
Expand All @@ -809,7 +810,6 @@
#define @\defnlibxname{cpp_lib_ranges_starts_ends_with}@ 202106L // freestanding, also in \libheader{algorithm}
#define @\defnlibxname{cpp_lib_ranges_stride}@ 202207L // freestanding, also in \libheader{ranges}
#define @\defnlibxname{cpp_lib_ranges_to_container}@ 202202L // freestanding, also in \libheader{ranges}
#define @\defnlibxname{cpp_lib_ranges_to_input}@ 202502L // freestanding, also in \libheader{ranges}
#define @\defnlibxname{cpp_lib_ranges_zip}@ 202110L
// freestanding, also in \libheader{ranges}, \libheader{tuple}, \libheader{utility}
#define @\defnlibxname{cpp_lib_ratio}@ 202306L // freestanding, also in \libheader{ratio}
Expand Down
Loading