uvco 0.1
Loading...
Searching...
No Matches
uvco::StreamBase::OutStreamAwaiter_ Struct Reference
Collaboration diagram for uvco::StreamBase::OutStreamAwaiter_:

Public Member Functions

 OutStreamAwaiter_ (StreamBase &stream, std::span< const char > buffer)
 ~OutStreamAwaiter_ ()
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::coroutine_handle handle_
std::optional< uv_statusstatus_
std::span< const char > buffer_
uv_write_t write_ {}
StreamBasestream_

Constructor & Destructor Documentation

◆ OutStreamAwaiter_()

uvco::StreamBase::OutStreamAwaiter_::OutStreamAwaiter_ ( StreamBase & stream,
std::span< const char > buffer )
267 : buffer_{buffer}, write_{}, stream_{stream} {}
uv_stream_t & stream()
Definition stream.h:105
StreamBase & stream_
Definition stream.cc:81
uv_write_t write_
Definition stream.cc:80
std::span< const char > buffer_
Definition stream.cc:79

◆ ~OutStreamAwaiter_()

uvco::StreamBase::OutStreamAwaiter_::~OutStreamAwaiter_ ( )
269 {
270 stream_.writer_ = nullptr;
271}

Member Function Documentation

◆ await_ready()

bool uvco::StreamBase::OutStreamAwaiter_::await_ready ( )
279 {
280 // When at this point, we must suspend in any case.
281 return false;
282}

◆ await_resume()

uv_status uvco::StreamBase::OutStreamAwaiter_::await_resume ( )
295 {
296 // resumed due to close.
297 if (!stream_.stream_) {
298 return UV_ECANCELED;
299 }
300 BOOST_ASSERT(status_);
301 stream_.writer_ = nullptr;
302 setData(&write_, (void *)nullptr);
303 return *status_;
304}
void setData(Handle *handle, Data *data)
Obtain data pointer set on request with type cast. Data may be nullptr.
Definition internal_utils.h:77
std::optional< uv_status > status_
Definition stream.cc:76

◆ await_suspend()

bool uvco::StreamBase::OutStreamAwaiter_::await_suspend ( std::coroutine_handle<> handle)
285 {
286 BOOST_ASSERT(dataIsNull(&write_));
287 setData(&write_, this);
288 handle_ = handle;
289 // For resumption during close.
290 stream_.writer_ = handle;
291
292 return true;
293}
bool dataIsNull(Handle *handle)
Check if handle data is null.
Definition internal_utils.h:101
std::coroutine_handle handle_
Definition stream.cc:75

◆ onOutStreamWrite()

void uvco::StreamBase::OutStreamAwaiter_::onOutStreamWrite ( uv_write_t * write,
uv_status status )
static
307 {
309 BOOST_ASSERT(awaiter != nullptr);
310 awaiter->status_ = status;
311 BOOST_ASSERT(awaiter->handle_);
312 Loop::enqueue(awaiter->handle_);
313 awaiter->handle_ = nullptr;
314 setData(write, (void *)nullptr);
315}
static void enqueue(std::coroutine_handle<> handle)
Definition loop.cc:94
Promise< size_t > write(std::string buf)
Definition stream.cc:114
Into * getRequestData(const Request *req)
Obtain data pointer set on request with nullptr check and type cast.
Definition internal_utils.h:59

◆ prepare_buffers()

std::array< uv_buf_t, 1 > uvco::StreamBase::OutStreamAwaiter_::prepare_buffers ( ) const
nodiscard
273 {
274 std::array<uv_buf_t, 1> bufs{};
275 bufs[0] = uv_buf_init(const_cast<char *>(buffer_.data()), buffer_.size());
276 return bufs;
277}

Member Data Documentation

◆ buffer_

std::span<const char> uvco::StreamBase::OutStreamAwaiter_::buffer_

◆ handle_

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_ {}
80{};

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