uvco 0.1
Loading...
Searching...
No Matches
uvco::TimerAwaiter Class Reference

Public Member Functions

 TimerAwaiter (const Loop &loop, uint64_t millis, bool repeating=false)
 TimerAwaiter (const TimerAwaiter &)=delete
 TimerAwaiter (TimerAwaiter &&other)=delete
TimerAwaiteroperator= (const TimerAwaiter &)=delete
TimerAwaiteroperator= (TimerAwaiter &&other)=delete
 ~TimerAwaiter ()
void close ()
bool await_ready ()
std::coroutine_handle await_suspend (std::coroutine_handle<> handle)
bool await_resume ()
bool isReady ()
void stop ()
void resume ()

Private Attributes

std::unique_ptr< uv_timer_t > timer_
std::coroutine_handle handle_
bool closed_ = false
bool stopped_ = false

Constructor & Destructor Documentation

◆ TimerAwaiter() [1/3]

uvco::TimerAwaiter::TimerAwaiter ( const Loop & loop,
uint64_t millis,
bool repeating = false )
inline
28 : timer_{std::make_unique<uv_timer_t>()} {
29 uv_timer_init(loop.uvloop(), timer_.get());
30 setData(timer_.get(), this);
31 if (repeating) {
32 uv_timer_start(timer_.get(), onMultiTimerFired, millis, millis);
33 } else {
34 uv_timer_start(timer_.get(), onSingleTimerDone, millis, 0);
35 }
36 }
std::unique_ptr< uv_timer_t > timer_
Definition timer.cc:88
void setData(Handle *handle, Data *data)
Obtain data pointer set on request with type cast. Data may be nullptr.
Definition internal_utils.h:77
void onMultiTimerFired(uv_timer_t *handle)
Definition timer.cc:106
void onSingleTimerDone(uv_timer_t *handle)
Definition timer.cc:100

◆ TimerAwaiter() [2/3]

uvco::TimerAwaiter::TimerAwaiter ( const TimerAwaiter & )
delete

◆ TimerAwaiter() [3/3]

uvco::TimerAwaiter::TimerAwaiter ( TimerAwaiter && other)
delete

◆ ~TimerAwaiter()

uvco::TimerAwaiter::~TimerAwaiter ( )
inline
41 {
42 stop();
43 close();
44 }
void close()
Definition timer.cc:46
void stop()
Definition timer.cc:74

Member Function Documentation

◆ await_ready()

bool uvco::TimerAwaiter::await_ready ( )
inline
60{ return isReady(); }
bool isReady()
Definition timer.cc:70

◆ await_resume()

bool uvco::TimerAwaiter::await_resume ( )
inlinenodiscard
65 {
66 handle_ = nullptr;
67 return !stopped_;
68 }
std::coroutine_handle handle_
Definition timer.cc:89
bool stopped_
Definition timer.cc:91

◆ await_suspend()

std::coroutine_handle uvco::TimerAwaiter::await_suspend ( std::coroutine_handle<> handle)
inline
61 {
62 handle_ = handle;
63 return Loop::getNext();
64 }
static std::coroutine_handle getNext()
Definition loop.cc:108

◆ close()

void uvco::TimerAwaiter::close ( )
inline
46 {
47 if (!timer_ || closed_) {
48 return;
49 }
50 closed_ = true;
51 // If the timer is already closing, we don't need to close it again.
52 // This would cause an error in libuv.
53 if (timer_ != nullptr && isClosed(timer_.get())) {
54 return;
55 }
56 stop();
57 closeHandle(timer_.release());
58 }
bool closed_
Definition timer.cc:90
bool isClosed(const Handle *h)
Definition close.h:19
void closeHandle(Handle *handle, void(*closer)(CloserArg *, void(*)(uv_handle_t *)))
Definition close.h:37

◆ isReady()

bool uvco::TimerAwaiter::isReady ( )
inline
70 {
71 uint64_t due = uv_timer_get_due_in(timer_.get());
72 return due == 0;
73 }

◆ operator=() [1/2]

TimerAwaiter & uvco::TimerAwaiter::operator= ( const TimerAwaiter & )
delete

◆ operator=() [2/2]

TimerAwaiter & uvco::TimerAwaiter::operator= ( TimerAwaiter && other)
delete

◆ resume()

void uvco::TimerAwaiter::resume ( )
inline
80 {
81 if (handle_) {
83 handle_ = nullptr;
84 }
85 }
static void enqueue(std::coroutine_handle<> handle)
Definition loop.cc:94

◆ stop()

void uvco::TimerAwaiter::stop ( )
inline
74 {
75 if (!stopped_) {
76 uv_timer_stop(timer_.get());
77 stopped_ = true;
78 }
79 }

Member Data Documentation

◆ closed_

bool uvco::TimerAwaiter::closed_ = false
private

◆ handle_

std::coroutine_handle uvco::TimerAwaiter::handle_
private

◆ stopped_

bool uvco::TimerAwaiter::stopped_ = false
private

◆ timer_

std::unique_ptr<uv_timer_t> uvco::TimerAwaiter::timer_
private

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