uvco 0.1
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
uvco::StreamBase::OutStreamAwaiter_ Struct Reference
Collaboration diagram for uvco::StreamBase::OutStreamAwaiter_:
Collaboration graph
[legend]

Public Member Functions

 OutStreamAwaiter_ (StreamBase &stream, std::string_view buffer)
 
std::array< uv_buf_t, 1 > prepare_buffers () const
 
bool await_ready ()
 
bool await_suspend (std::coroutine_handle<> handle)
 
uv_status await_resume ()
 

Static Public Member Functions

static void onOutStreamWrite (uv_write_t *write, uv_status status)
 

Public Attributes

std::optional< std::coroutine_handle<> > handle_
 
std::optional< uv_statusstatus_
 
std::string_view buffer_
 
uv_write_t write_ {}
 
StreamBasestream_
 

Constructor & Destructor Documentation

◆ OutStreamAwaiter_()

uvco::StreamBase::OutStreamAwaiter_::OutStreamAwaiter_ ( StreamBase stream,
std::string_view  buffer 
)
180 : buffer_{buffer}, write_{}, stream_{stream} {}
uv_stream_t & stream()
Definition stream.h:91
StreamBase & stream_
Definition stream.h:157
uv_write_t write_
Definition stream.h:156
std::string_view buffer_
Definition stream.h:155

Member Function Documentation

◆ await_ready()

bool uvco::StreamBase::OutStreamAwaiter_::await_ready ( )
189 {
190 // Attempt early write:
191 auto bufs = prepare_buffers();
192 uv_status result = uv_try_write(&stream_.stream(), bufs.data(), bufs.size());
193 if (result > 0) {
194 status_ = result;
195 }
196 return result > 0;
197}
int uv_status
Result of a libuv operation, an errno error code.
Definition internal_utils.h:22
std::optional< uv_status > status_
Definition stream.h:152
std::array< uv_buf_t, 1 > prepare_buffers() const
Definition stream.cc:182

◆ await_resume()

uv_status uvco::StreamBase::OutStreamAwaiter_::await_resume ( )
214 {
215 // resumed due to close.
216 if (!stream_.stream_) {
217 return UV_ECANCELED;
218 }
219 BOOST_ASSERT(status_);
220 stream_.writer_.reset();
221 return *status_;
222}
std::optional< std::coroutine_handle<> > writer_
Definition stream.h:104
std::unique_ptr< uv_stream_t, UvHandleDeleter > stream_
Definition stream.h:101

◆ await_suspend()

bool uvco::StreamBase::OutStreamAwaiter_::await_suspend ( std::coroutine_handle<>  handle)
200 {
201 BOOST_ASSERT(write_.data == nullptr);
202 write_.data = this;
203 handle_ = handle;
204 // For resumption during close.
205 stream_.writer_ = handle;
206 auto bufs = prepare_buffers();
207 // TODO: move before suspension point.
208 uv_write(&write_, &stream_.stream(), bufs.data(), bufs.size(),
210
211 return true;
212}
std::optional< std::coroutine_handle<> > handle_
Definition stream.h:151
static void onOutStreamWrite(uv_write_t *write, uv_status status)
Definition stream.cc:224

◆ onOutStreamWrite()

void uvco::StreamBase::OutStreamAwaiter_::onOutStreamWrite ( uv_write_t *  write,
uv_status  status 
)
static
225 {
226 auto *awaiter = getRequestData<OutStreamAwaiter_>(write);
227 BOOST_ASSERT(awaiter != nullptr);
228 awaiter->status_ = status;
229 BOOST_ASSERT(awaiter->handle_);
230 auto handle = awaiter->handle_.value();
231 awaiter->handle_.reset();
232 Loop::enqueue(handle);
233 setData(write, (void*) nullptr);
234}
static void enqueue(std::coroutine_handle<> handle)
Definition loop.cc:73
Promise< size_t > write(std::string buf)
Definition stream.cc:69
void setData(Handle *handle, Data *data)
Definition internal_utils.h:55

◆ prepare_buffers()

std::array< uv_buf_t, 1 > uvco::StreamBase::OutStreamAwaiter_::prepare_buffers ( ) const
182 {
183 std::array<uv_buf_t, 1> bufs{};
184 bufs[0].base = const_cast<char *>(buffer_.data());
185 bufs[0].len = buffer_.size();
186 return bufs;
187}

Member Data Documentation

◆ buffer_

std::string_view uvco::StreamBase::OutStreamAwaiter_::buffer_

◆ handle_

std::optional<std::coroutine_handle<> > uvco::StreamBase::OutStreamAwaiter_::handle_

◆ status_

std::optional<uv_status> uvco::StreamBase::OutStreamAwaiter_::status_

◆ stream_

StreamBase& uvco::StreamBase::OutStreamAwaiter_::stream_

◆ write_

uv_write_t uvco::StreamBase::OutStreamAwaiter_::write_ {}
156{};

The documentation for this struct was generated from the following files: