Iros
 
Loading...
Searching...
No Matches
async_write_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 const> buffer, Optional<u64> offset = {}) const
17 requires(requires { async_write_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) |
23 execution::let_value([](auto& handle, Span<Byte const>& buffer, Optional<u64>& offset,
24 bool& should_stop) {
25 return execution::async_write_some(handle, buffer, offset) |
26 execution::then([&buffer, &offset, &should_stop](size_t nwritten) -> Result<void> {
27 if (nwritten == 0) {
28 return Unexpected(BasicError::ResultOutOfRange);
29 }
30 buffer = *buffer.subspan(nwritten);
31 if (offset) {
32 *offset += nwritten;
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_write_exactly.h:12
Definition bulk.h:30
constexpr auto async_write_exactly
Definition async_write_exactly.h:46
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_write_some
Definition async_write_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_write_exactly.h:13
auto operator()(File &&handle, Span< Byte const > buffer, Optional< u64 > offset={}) const -> concepts::SenderOf< SetValue()> auto requires(
Definition async_write_exactly.h:15