7#include <condition_variable>
36 std::condition_variable &_cv;
38 std::atomic_bool _valid{
true };
49 wait_state_t( std::condition_variable &cv, std::mutex &m, T
const & t )
56 operator T &() {
return _value; }
57 operator T
const &()
const {
return _value; }
65 std::unique_lock<std::mutex> locker(_m);
86 std::shared_ptr< wait_state_t > _ptr;
98 std::weak_ptr< wait_state_t >
const _ptr;
100 std::shared_ptr< std::nullptr_t >
const _invalidator;
107 [weak_ptr = std::weak_ptr<
wait_state_t >( local._ptr )]( std::nullptr_t * ) {
111 if(
auto wait_state = weak_ptr.lock() )
112 wait_state->invalidate();
117 std::shared_ptr< wait_state_t >
still_alive()
const {
return _ptr.lock(); }
124 wait_state->signal( t );
133 waiting_on( std::condition_variable & cv, std::mutex & m, T
const & value )
134 : _ptr( std::make_shared<
wait_state_t >( cv, m, value ) )
141 operator T
const &()
const {
return *_ptr; }
157 template <
class U,
class L >
162 std::unique_lock< std::mutex > locker(_ptr->_m);
163 _ptr->_cv.wait_for( locker, timeout, [&]() ->
bool {
Definition: waiting-on.h:97
std::shared_ptr< wait_state_t > still_alive() const
Definition: waiting-on.h:117
in_thread_(waiting_on const &local)
Definition: waiting-on.h:103
void signal(T const &t) const
Definition: waiting-on.h:121
Definition: waiting-on.h:34
void signal(T const &t)
Definition: waiting-on.h:63
wait_state_t(std::condition_variable &cv, std::mutex &m, T const &t)
Definition: waiting-on.h:49
T const * operator->() const
Definition: waiting-on.h:60
void invalidate()
Definition: waiting-on.h:76
wait_state_t(std::condition_variable &cv, std::mutex &m)
Definition: waiting-on.h:43
T * operator->()
Definition: waiting-on.h:59
void signal()
Definition: waiting-on.h:71
Definition: waiting-on.h:27
void wait_until(U const &timeout, L const &pred)
Definition: waiting-on.h:158
T const * operator->() const
Definition: waiting-on.h:147
waiting_on(std::condition_variable &cv, std::mutex &m)
Definition: waiting-on.h:129
waiting_on(std::condition_variable &cv, std::mutex &m, T const &value)
Definition: waiting-on.h:133
in_thread_ in_thread() const
Definition: waiting-on.h:139
T * operator->()
Definition: waiting-on.h:146
Definition: stabilized-value.h:12