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

Classes

struct  UvWriteWithBuffer

Public Member Functions

 OutStreamAwaiter_ (StreamBase &stream, std::string buffer)
 ~OutStreamAwaiter_ ()
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_
std::unique_ptr< UvWriteWithBufferwrite_
StreamBasestream_

Constructor & Destructor Documentation

◆ OutStreamAwaiter_()

uvco::StreamBase::OutStreamAwaiter_::OutStreamAwaiter_ ( StreamBase & stream,
std::string buffer )
282 : buffer_{buffer}, write_{std::make_unique<UvWriteWithBuffer>()},
283 stream_{stream} {
284 write_->buffer = std::move(buffer);
285}
uv_stream_t & stream()
Definition stream.h:104
std::unique_ptr< UvWriteWithBuffer > write_
Definition stream.cc:89
StreamBase & stream_
Definition stream.cc:90
std::span< const char > buffer_
Definition stream.cc:86

◆ ~OutStreamAwaiter_()

uvco::StreamBase::OutStreamAwaiter_::~OutStreamAwaiter_ ( )
287 {
288 stream_.writer_ = nullptr;
289}

Member Function Documentation

◆ await_ready()

bool uvco::StreamBase::OutStreamAwaiter_::await_ready ( )
291 {
292 // When at this point, we must suspend in any case.
293 return false;
294}

◆ await_resume()

uv_status uvco::StreamBase::OutStreamAwaiter_::await_resume ( )
305 {
306 // resumed due to close.
307 if (!stream_.stream_) {
308 return UV_ECANCELED;
309 }
310 BOOST_ASSERT(status_);
311 stream_.writer_ = nullptr;
312 return *status_;
313}
std::optional< uv_status > status_
Definition stream.cc:83

◆ await_suspend()

bool uvco::StreamBase::OutStreamAwaiter_::await_suspend ( std::coroutine_handle<> handle)
297 {
298 handle_ = handle;
299 // For resumption during close.
300 stream_.writer_ = handle;
301
302 return true;
303}
std::coroutine_handle handle_
Definition stream.cc:82

◆ onOutStreamWrite()

void uvco::StreamBase::OutStreamAwaiter_::onOutStreamWrite ( uv_write_t * write,
uv_status status )
static
316 {
317 const std::unique_ptr<UvWriteWithBuffer> req{(UvWriteWithBuffer *)write};
318 auto *awaiter = getRequestDataOrNull<OutStreamAwaiter_>(req.get());
319 if (awaiter == nullptr) {
320 return;
321 }
322 BOOST_ASSERT(awaiter != nullptr);
323 awaiter->status_ = status;
324 BOOST_ASSERT(awaiter->handle_);
325 Loop::enqueue(awaiter->handle_);
326 awaiter->handle_ = nullptr;
327 setData(write, (void *)nullptr);
328}
static void enqueue(std::coroutine_handle<> handle)
Definition loop.cc:94
Promise< void > write(std::string buf)
Definition stream.cc:123
void setData(Handle *handle, Data *data)
Obtain data pointer set on request with type cast. Data may be nullptr.
Definition internal_utils.h:77
Into * getRequestDataOrNull(const Request *req)
Definition internal_utils.h:69

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_

std::unique_ptr<UvWriteWithBuffer> uvco::StreamBase::OutStreamAwaiter_::write_

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