26namespace seqan3::detail
44template <std::ranges::input_range urng_t>
45class view_persist :
public std::ranges::view_interface<view_persist<urng_t>>
55 view_persist() noexcept = default;
56 constexpr view_persist(view_persist const & rhs) noexcept = default;
57 constexpr view_persist(view_persist && rhs) noexcept = default;
58 constexpr view_persist & operator=(view_persist const & rhs) noexcept = default;
59 constexpr view_persist & operator=(view_persist && rhs) noexcept = default;
60 ~view_persist() noexcept = default;
65 view_persist(urng_t && _urange) :
66 urange{
new urng_t{std::move(_urange)}}
92 auto begin() const noexcept
115 return std::ranges::end(*urange);
119 auto end() const noexcept
124 return std::ranges::cend(*urange);
131template <
typename urng_t>
132view_persist(urng_t &&) -> view_persist<std::remove_reference_t<urng_t>>;
142class persist_fn :
public adaptor_base<persist_fn>
146 using base_t = adaptor_base<persist_fn>;
150 using base_t::base_t;
159 template <std::ranges::viewable_range urng_t>
160 static auto impl(urng_t && urange)
162 return std::views::all(std::forward<urng_t>(urange));
168 template <std::ranges::range urng_t>
169 static auto impl(urng_t && urange)
171 static_assert(!std::is_lvalue_reference_v<urng_t>,
"BUG: lvalue-reference in persist_fn::impl().");
172 return view_persist{std::move(urange)};
224inline auto constexpr persist = persist_fn{};
Provides seqan3::detail::adaptor_base and seqan3::detail::combined_adaptor.
The <algorithm> header from C++20's standard library.
The <concepts> header from C++20's standard library.
Provides various transformation traits used by the range module.
Specifies requirements of an input range type for which the const version of that type satisfies the ...
Provides exceptions used in the I/O module.
Provides various transformation traits for use on iterators.
The <ranges> header from C++20's standard library.
Additional non-standard concepts for ranges.