46template <
typename algorithm_executor_type>
49 static_assert(!std::is_const_v<algorithm_executor_type>,
"Cannot create an algorithm stream over a const buffer.");
52 using optional_type =
decltype(std::declval<algorithm_executor_type>().next_result());
54 using algorithm_result_type =
typename optional_type::value_type;
85 algorithm_executor_ptr{
std::make_unique<algorithm_executor_type>(
std::move(algorithm_executor))}
116 constexpr std::default_sentinel_t
end() noexcept
118 return std::default_sentinel;
122 constexpr std::default_sentinel_t
end()
const =
delete;
136 if (!algorithm_executor_ptr)
139 if (
auto opt = algorithm_executor_ptr->next_result(); opt.has_value())
141 cache = std::move(*opt);
152 algorithm_result_type cache{};
161template <
typename algorithm_executor_type>
169template <
typename algorithm_executor_type>
200 range_ptr(
std::addressof(range))
216 return range_ptr->cache;
222 return &range_ptr->cache;
232 assert(range_ptr !=
nullptr);
234 at_end = !range_ptr->next();
263 return !(lhs == rhs);
The iterator of seqan3::detail::algorithm_result_generator_range.
Definition: algorithm_result_generator_range.hpp:171
constexpr algorithm_range_iterator() noexcept=default
Defaulted.
algorithm_range_iterator & operator++()
Increments the iterator by one.
Definition: algorithm_result_generator_range.hpp:230
friend constexpr bool operator==(algorithm_range_iterator const &lhs, std::default_sentinel_t const &) noexcept
Checks whether lhs is equal to the sentinel.
Definition: algorithm_result_generator_range.hpp:249
void operator++(int)
Returns an iterator incremented by one.
Definition: algorithm_result_generator_range.hpp:239
reference operator*() const noexcept
Access the pointed-to element.
Definition: algorithm_result_generator_range.hpp:214
friend constexpr bool operator==(std::default_sentinel_t const &lhs, algorithm_range_iterator const &rhs) noexcept
Checks whether lhs is equal to rhs.
Definition: algorithm_result_generator_range.hpp:255
friend constexpr bool operator!=(std::default_sentinel_t const &lhs, algorithm_range_iterator const &rhs) noexcept
Checks whether lhs is not equal to rhs.
Definition: algorithm_result_generator_range.hpp:267
friend constexpr bool operator!=(algorithm_range_iterator const &lhs, std::default_sentinel_t const &rhs) noexcept
Checks whether *this is not equal to the sentinel.
Definition: algorithm_result_generator_range.hpp:261
algorithm_result_type value_type
Value type of container elements.
Definition: algorithm_result_generator_range.hpp:179
pointer operator->() const noexcept
Returns a pointer to the current algorithm result.
Definition: algorithm_result_generator_range.hpp:220
An input range over the algorithm results generated by the underlying algorithm executor.
Definition: algorithm_result_generator_range.hpp:48
constexpr std::default_sentinel_t end() noexcept
Returns a sentinel signaling the end of the algorithm range.
Definition: algorithm_result_generator_range.hpp:116
constexpr std::default_sentinel_t end() const =delete
This range is not const-iterable.
algorithm_result_generator_range(algorithm_executor_type const &algorithm_executor)=delete
Explicit deletion to forbid copy construction of the underlying executor.
algorithm_result_generator_range & operator=(algorithm_result_generator_range &&)=default
Defaulted.
algorithm_result_generator_range(algorithm_result_generator_range &&)=default
Defaulted.
algorithm_result_generator_range(algorithm_result_generator_range const &)=delete
This is a move-only type.
algorithm_result_generator_range & operator=(algorithm_result_generator_range const &)=delete
This is a move-only type.
bool next()
Receives the next algorithm result from the executor buffer.
Definition: algorithm_result_generator_range.hpp:134
algorithm_range_iterator begin() const =delete
This range is not const-iterable.
algorithm_result_generator_range()=default
Defaulted.
constexpr algorithm_range_iterator begin()
Returns an iterator to the first element of the algorithm range.
Definition: algorithm_result_generator_range.hpp:100
algorithm_result_generator_range(algorithm_executor_type &&algorithm_executor)
Constructs a new algorithm range by taking ownership over the passed algorithm buffer.
Definition: algorithm_result_generator_range.hpp:84
algorithm_result_generator_range(algorithm_executor_type &&) -> algorithm_result_generator_range< std::remove_reference_t< algorithm_executor_type > >
Deduces from the passed algorithm_executor_type.
~algorithm_result_generator_range()=default
Defaulted.
The main SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29
SeqAn specific customisations in the standard namespace.