27 namespace seqan3::detail
45 template <std::ranges::input_range urng_t>
46 class view_persist :
public std::ranges::view_interface<view_persist<urng_t>>
56 view_persist() noexcept = default;
57 constexpr view_persist(view_persist const & rhs) noexcept = default;
58 constexpr view_persist(view_persist && rhs) noexcept = default;
59 constexpr view_persist & operator=(view_persist const & rhs) noexcept = default;
60 constexpr view_persist & operator=(view_persist && rhs) noexcept = default;
61 ~view_persist() noexcept = default;
66 view_persist(urng_t && _urange) :
93 auto begin() const noexcept
116 return std::ranges::end(*urange);
120 auto end() const noexcept
125 return std::ranges::cend(*urange);
132 template <
typename urng_t>
133 view_persist(urng_t &&) -> view_persist<std::remove_reference_t<urng_t>>;
142 class 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().");
233 inline auto constexpr
persist = detail::persist_fn{};