25namespace seqan3::detail
43template <std::ranges::input_range urng_t>
44class view_persist :
public std::ranges::view_interface<view_persist<urng_t>>
54 view_persist() noexcept = default;
55 constexpr view_persist(view_persist const & rhs) noexcept = default;
56 constexpr view_persist(view_persist && rhs) noexcept = default;
57 constexpr view_persist & operator=(view_persist const & rhs) noexcept = default;
58 constexpr view_persist & operator=(view_persist && rhs) noexcept = default;
59 ~view_persist() noexcept = default;
64 view_persist(urng_t && _urange) :
65 urange{
new urng_t{std::move(_urange)}}
91 auto begin() const noexcept
114 return std::ranges::end(*urange);
118 auto end() const noexcept
123 return std::ranges::cend(*urange);
130template <
typename urng_t>
131view_persist(urng_t &&) -> view_persist<std::remove_reference_t<urng_t>>;
141class persist_fn :
public adaptor_base<persist_fn>
145 using base_t = adaptor_base<persist_fn>;
149 using base_t::base_t;
158 template <std::ranges::viewable_range urng_t>
159 static auto impl(urng_t && urange)
161 return std::views::all(std::forward<urng_t>(urange));
167 template <std::ranges::range urng_t>
168 static auto impl(urng_t && urange)
170 static_assert(!std::is_lvalue_reference_v<urng_t>,
"BUG: lvalue-reference in persist_fn::impl().");
171 return view_persist{std::move(urange)};
223inline auto constexpr persist = persist_fn{};
Provides seqan3::detail::adaptor_base and seqan3::detail::combined_adaptor.
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 various transformation traits for use on iterators.
The <ranges> header from C++20's standard library.
Additional non-standard concepts for ranges.