uvco 0.1
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
uvco::anonymous_namespace{fs.cc}::FileOpAwaiter_ Class Reference

Public Member Functions

 FileOpAwaiter_ ()=default
 
 FileOpAwaiter_ (const FileOpAwaiter_ &)=delete
 
 FileOpAwaiter_ (FileOpAwaiter_ &&)=delete
 
FileOpAwaiter_operator= (const FileOpAwaiter_ &)=delete
 
FileOpAwaiter_operator= (FileOpAwaiter_ &&)=delete
 
 ~FileOpAwaiter_ ()
 
uv_fs_t & req ()
 Obtain the uv_fs_t struct to fill in before starting the operation.
 
bool await_ready () const noexcept
 
bool await_suspend (std::coroutine_handle<> handle)
 
void await_resume ()
 

Static Public Member Functions

static uv_fs_cb uvCallback ()
 

Private Member Functions

void schedule ()
 

Static Private Member Functions

static void onFileOpDone (uv_fs_t *req)
 

Private Attributes

uv_fs_t req_ = {}
 
std::optional< std::coroutine_handle<> > handle_
 
std::optional< ssize_t > result_ = std::nullopt
 

Constructor & Destructor Documentation

◆ FileOpAwaiter_() [1/3]

uvco::anonymous_namespace{fs.cc}::FileOpAwaiter_::FileOpAwaiter_ ( )
default

◆ FileOpAwaiter_() [2/3]

uvco::anonymous_namespace{fs.cc}::FileOpAwaiter_::FileOpAwaiter_ ( const FileOpAwaiter_ )
delete

◆ FileOpAwaiter_() [3/3]

uvco::anonymous_namespace{fs.cc}::FileOpAwaiter_::FileOpAwaiter_ ( FileOpAwaiter_ &&  )
delete

◆ ~FileOpAwaiter_()

uvco::anonymous_namespace{fs.cc}::FileOpAwaiter_::~FileOpAwaiter_ ( )
inline
49{ uv_fs_req_cleanup(&req_); }

Member Function Documentation

◆ await_ready()

bool uvco::anonymous_namespace{fs.cc}::FileOpAwaiter_::await_ready ( ) const
inlinenoexcept
55 {
56 return result_.has_value();
57 }
std::optional< ssize_t > result_
Definition fs.cc:83

◆ await_resume()

void uvco::anonymous_namespace{fs.cc}::FileOpAwaiter_::await_resume ( )
inline

The callback is guaranteed to have been called once the awaiting coroutine is resumed.

69 {
70 BOOST_ASSERT(result_);
71 if (result_ && result_.value() < 0) {
72 throw UvcoException(static_cast<uv_status>(result_.value()),
73 "file operation failed");
74 } else if (!result_) {
75 throw UvcoException(UV_EAGAIN,
76 "file operation not yet finished (this is a bug)");
77 }
78 }
int uv_status
Result of a libuv operation, an errno error code.
Definition internal_utils.h:22

◆ await_suspend()

bool uvco::anonymous_namespace{fs.cc}::FileOpAwaiter_::await_suspend ( std::coroutine_handle<>  handle)
inline
59 {
60 BOOST_ASSERT(!result_);
61 BOOST_ASSERT_MSG(!handle_, "FileOpAwaiter_ can only be awaited once");
62 setRequestData(&req_, this);
63 handle_ = handle;
64 return true;
65 }
std::optional< std::coroutine_handle<> > handle_
Definition fs.cc:82
void setRequestData(Request *req, Data *data)
Definition internal_utils.h:61

◆ onFileOpDone()

static void uvco::anonymous_namespace{fs.cc}::FileOpAwaiter_::onFileOpDone ( uv_fs_t *  req)
inlinestaticprivate
34 {
35 auto *awaiter = getRequestData<FileOpAwaiter_>(req);
36 awaiter->result_ = req->result;
37 awaiter->schedule();
38 }
uv_fs_t & req()
Obtain the uv_fs_t struct to fill in before starting the operation.
Definition fs.cc:52

◆ operator=() [1/2]

FileOpAwaiter_ & uvco::anonymous_namespace{fs.cc}::FileOpAwaiter_::operator= ( const FileOpAwaiter_ )
delete

◆ operator=() [2/2]

FileOpAwaiter_ & uvco::anonymous_namespace{fs.cc}::FileOpAwaiter_::operator= ( FileOpAwaiter_ &&  )
delete

◆ req()

uv_fs_t & uvco::anonymous_namespace{fs.cc}::FileOpAwaiter_::req ( )
inline

Obtain the uv_fs_t struct to fill in before starting the operation.

52{ return req_; }

◆ schedule()

void uvco::anonymous_namespace{fs.cc}::FileOpAwaiter_::schedule ( )
inlineprivate
85 {
86 if (handle_) {
87 const auto handle = handle_.value();
88 handle_ = std::nullopt;
89 Loop::enqueue(handle);
90 }
91 }
static void enqueue(std::coroutine_handle<> handle)
Definition loop.cc:73

◆ uvCallback()

static uv_fs_cb uvco::anonymous_namespace{fs.cc}::FileOpAwaiter_::uvCallback ( )
inlinestatic
53{ return onFileOpDone; }
static void onFileOpDone(uv_fs_t *req)
Definition fs.cc:34

Member Data Documentation

◆ handle_

std::optional<std::coroutine_handle<> > uvco::anonymous_namespace{fs.cc}::FileOpAwaiter_::handle_
private

◆ req_

uv_fs_t uvco::anonymous_namespace{fs.cc}::FileOpAwaiter_::req_ = {}
private
81{};

◆ result_

std::optional<ssize_t> uvco::anonymous_namespace{fs.cc}::FileOpAwaiter_::result_ = std::nullopt
private

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