22namespace seqan3::detail
43template <std::copy_constructible value_t>
44class repeat_view :
public std::ranges::view_interface<repeat_view<value_t>>
48 using base_t = std::ranges::view_interface<repeat_view<value_t>>;
51 using sentinel_type = std::default_sentinel_t;
63 using reference = value_type &;
65 using const_reference = value_type
const &;
67 using difference_type = ptrdiff_t;
71 template <
typename parent_type>
78 using iterator = basic_iterator<repeat_view>;
80 using const_iterator = basic_iterator<repeat_view const>;
84 template <
typename parent_type,
typename crtp_base>
85 friend class detail::random_access_iterator_base;
91 repeat_view() =
default;
92 repeat_view(repeat_view
const &) =
default;
93 repeat_view & operator=(repeat_view
const &) =
default;
94 repeat_view(repeat_view &&) =
default;
95 repeat_view & operator=(repeat_view &&) =
default;
96 ~repeat_view() =
default;
99 constexpr explicit repeat_view(value_t
const & value) : single_value{value}
103 constexpr explicit repeat_view(value_t && value) : single_value{
std::move(value)}
125 constexpr iterator
begin() noexcept
127 return iterator{*
this};
131 constexpr const_iterator
begin() const noexcept
133 return const_iterator{*
this};
151 constexpr sentinel_type
end() noexcept
157 constexpr sentinel_type
end() const noexcept
182 constexpr const_reference operator[](difference_type
const SEQAN3_DOXYGEN_ONLY(n))
const noexcept
184 return *single_value.begin();
188 constexpr reference operator[](difference_type
const SEQAN3_DOXYGEN_ONLY(n))
noexcept
190 return *single_value.begin();
196 single_value_t single_value;
200template <std::copy_constructible value_t>
201template <
typename parent_type>
202class repeat_view<value_t>::basic_iterator :
203 public detail::random_access_iterator_base<parent_type, basic_iterator>
206 using base_t = detail::random_access_iterator_base<parent_type, basic_iterator>;
209 using typename base_t::position_type;
213 using typename base_t::difference_type;
215 using typename base_t::value_type;
217 using typename base_t::reference;
219 using typename base_t::pointer;
221 using typename base_t::iterator_category;
226 basic_iterator() =
default;
227 basic_iterator(basic_iterator
const &) =
default;
228 basic_iterator & operator=(basic_iterator
const &) =
default;
229 basic_iterator (basic_iterator &&) =
default;
230 basic_iterator & operator=(basic_iterator &&) =
default;
231 ~basic_iterator() =
default;
236 explicit constexpr basic_iterator(parent_type & host) noexcept : base_t{host} {}
241 template <
typename parent_type2>
243 requires std::is_const_v<parent_type> && (!std::is_const_v<parent_type2>) &&
246 constexpr basic_iterator(basic_iterator<parent_type2>
const & rhs) noexcept :
255 using base_t::operator==;
257 using base_t::operator!=;
260 constexpr bool operator==(std::default_sentinel_t
const &)
const noexcept
266 constexpr bool operator!=(std::default_sentinel_t
const &)
const noexcept
272 friend constexpr bool operator==(std::default_sentinel_t
const &,
273 basic_iterator
const &)
noexcept
279 friend constexpr bool operator!=(std::default_sentinel_t
const &,
280 basic_iterator
const &)
noexcept
295 template <std::copy_constructible value_type>
296 constexpr auto operator()(value_type && value)
const
298 return detail::repeat_view{std::forward<value_type>(value)};
347constexpr inline detail::repeat_fn
repeat{};
The <algorithm> header from C++20's standard library.
Provides various transformation traits used by the range module.
@ single
The text is a single range.
Definition: concept.hpp:74
constexpr detail::repeat_fn repeat
A view factory that repeats a given value infinitely.
Definition: repeat.hpp:347
Provides various transformation traits for use on iterators.
The SeqAn namespace for views.
Definition: char_to.hpp:22
SeqAn specific customisations in the standard namespace.
Provides the seqan3::detail::random_access_iterator class.
The <ranges> header from C++20's standard library.