40template <std::ranges::range urng_t>
44 static_assert(std::ranges::input_range<urng_t>,
45 "The range parameter to async_input_buffer_view must be at least a std::ranges::input_range.");
46 static_assert(std::ranges::view<urng_t>,
47 "The range parameter to async_input_buffer_view must model std::ranges::view.");
48 static_assert(std::movable<std::ranges::range_value_t<urng_t>>,
49 "The range parameter to async_input_buffer_view must have a value_type that is std::movable.");
51 std::constructible_from<std::ranges::range_value_t<urng_t>,
53 "The range parameter to async_input_buffer_view must have a value_type that is constructible by a moved "
54 "value of its reference type.");
66 contrib::fixed_buffer_queue<std::ranges::range_value_t<urng_t>>
buffer;
92 auto deleter = [](
state * p)
103 new state{std::move(_urng),
104 contrib::fixed_buffer_queue<std::ranges::range_value_t<urng_t>>{buffer_size},
111 if (
state.
buffer.wait_push(std::move(val)) == contrib::queue_op_status::closed)
121 template <
typename other_urng_t>
124 std::ranges::viewable_range<other_urng_t>
155 std::default_sentinel_t
end()
157 return std::default_sentinel;
161 std::default_sentinel_t
end()
const =
delete;
166template <std::ranges::range urng_t>
173 contrib::fixed_buffer_queue<std::ranges::range_value_t<urng_t>> * buffer_ptr =
nullptr;
213 iterator(contrib::fixed_buffer_queue<
std::ranges::range_value_t<urng_t>> & buffer) noexcept : buffer_ptr{&buffer}
244 assert(buffer_ptr !=
nullptr);
246 if (buffer_ptr->wait_pop(cached_value) == contrib::queue_op_status::closed)
271 return rhs == std::default_sentinel_t{};
277 return !(lhs == std::default_sentinel_t{});
283 return rhs != std::default_sentinel_t{};
294template <std::ranges::viewable_range urng_t>
316 template <std::ranges::range urng_t>
317 constexpr auto operator()(urng_t && urange,
size_t const buffer_size)
const
319 static_assert(std::ranges::input_range<urng_t>,
320 "The range parameter to views::async_input_buffer must be at least a std::ranges::input_range.");
321 static_assert(std::ranges::viewable_range<urng_t>,
322 "The range parameter to views::async_input_buffer cannot be a temporary of a non-view range.");
323 static_assert(std::movable<std::ranges::range_value_t<urng_t>>,
324 "The range parameter to views::async_input_buffer must have a value_type that is std::movable.");
326 std::constructible_from<std::ranges::range_value_t<urng_t>,
328 "The range parameter to views::async_input_buffer must have a value_type that is constructible by a moved "
329 "value of its reference type.");
331 if (buffer_size == 0)
Provides seqan3::detail::adaptor_from_functor.
Provides seqan3::buffer_queue.
Template for range adaptor closure objects that store arguments and wrap a proto-adaptor.
Definition: adaptor_from_functor.hpp:57
typename iter_pointer< it_t >::type iter_pointer_t
Return the pointer type of the input type (transformation_trait shortcut).
Definition: iterator_traits.hpp:166
constexpr auto all
Returns a view that includes all elements of the range argument.
Definition: all_view.hpp:204
constexpr auto async_input_buffer
A view adapter that returns a concurrent-queue-like view over the underlying range.
Definition: async_input_buffer.hpp:481
The internal SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29
The SeqAn namespace for views.
Definition: char_strictly_to.hpp:22
SeqAn specific customisations in the standard namespace.