Iros
 
Loading...
Searching...
No Matches
async_read_exactly.h
Go to the documentation of this file.
1#pragma once
2
10
11namespace di::execution {
13 struct Function {
14 template<typename File>
15 auto operator()(File&& handle, Span<Byte> buffer, Optional<u64> offset = {}) const
17 requires(requires { async_read_some(util::forward<File>(handle), buffer, offset); })
18 {
20 return function::tag_invoke(*this, util::forward<File>(handle), buffer, offset);
21 } else {
22 return execution::just(util::forward<File>(handle), buffer, offset, false) |
24 [](auto& handle, Span<Byte>& buffer, Optional<u64>& offset, bool& should_stop) {
25 return execution::async_read_some(handle, buffer, offset) |
26 execution::then([&buffer, &offset, &should_stop](size_t nread) -> Result<void> {
27 if (nread == 0) {
28 return Unexpected(BasicError::ResultOutOfRange);
29 }
30 buffer = *buffer.subspan(nread);
31 if (offset) {
32 *offset += nread;
33 }
34 should_stop = buffer.empty();
35 return {};
36 }) |
37 execution::repeat_effect_until([&should_stop] {
38 return should_stop;
39 });
40 });
41 }
42 }
43 };
44}
45
47}
Definition optional_forward_declaration.h:5
Definition span_forward_declaration.h:10
Definition unexpected.h:14
Definition sender_of.h:26
Definition tag_invoke.h:33
Definition async_read_exactly.h:12
Definition bulk.h:30
constexpr auto let_value
Definition let.h:208
constexpr auto then
A sender that maps values into another value.
Definition then.h:276
constexpr auto repeat_effect_until
Definition repeat_effect_until.h:130
constexpr auto async_read_exactly
Definition async_read_exactly.h:46
constexpr auto async_read_some
Definition async_read_some.h:31
constexpr auto just
Definition just.h:86
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
Expected< T, Error > Result
Definition result.h:8
Definition set_value.h:6
Definition async_read_exactly.h:13
auto operator()(File &&handle, Span< Byte > buffer, Optional< u64 > offset={}) const -> concepts::SenderOf< SetValue()> auto requires(
Definition async_read_exactly.h:15