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) : urange{
new urng_t{std::move(_urange)}}
91 auto begin() const noexcept
112 return std::ranges::end(*urange);
116 auto end() const noexcept
119 return std::ranges::cend(*urange);
126template <
typename urng_t>
127view_persist(urng_t &&) -> view_persist<std::remove_reference_t<urng_t>>;
137class persist_fn :
public adaptor_base<persist_fn>
141 using base_t = adaptor_base<persist_fn>;
145 using base_t::base_t;
154 template <std::ranges::viewable_range urng_t>
155 static auto impl(urng_t && urange)
157 return std::views::all(std::forward<urng_t>(urange));
163 template <std::ranges::range urng_t>
164 static auto impl(urng_t && urange)
166 static_assert(!std::is_lvalue_reference_v<urng_t>,
"BUG: lvalue-reference in persist_fn::impl().");
167 return view_persist{std::move(urange)};
219inline constexpr auto 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.
Additional non-standard concepts for ranges.