24 #ifndef MIR_CLIENT_NO_TLS_FUTURE_INL_H_
25 #define MIR_CLIENT_NO_TLS_FUTURE_INL_H_
29 #include <condition_variable>
40 template<
class Rep,
class Period>
41 std::future_status
wait_for(std::chrono::duration<Rep, Period>
const& timeout_duration)
const
43 std::unique_lock<std::mutex> lk(mutex);
44 if (cv.wait_for(lk, timeout_duration, [
this]{ return set || broken; }))
45 return std::future_status::ready;
46 return std::future_status::timeout;
51 std::lock_guard<std::mutex> lk(mutex);
59 std::lock_guard<std::mutex> lk(mutex);
61 value = std::move(val);
67 std::unique_lock<std::mutex> lk(mutex);
68 cv.wait(lk, [
this]{
return set || broken; });
70 throw std::future_error(std::future_errc::broken_promise);
76 std::lock_guard<std::mutex> lk(mutex);
89 std::mutex
mutable mutex;
90 std::condition_variable
mutable cv;
110 state(
std::move(other.state))
116 state = std::move(other.state);
126 throw std::logic_error(
"state was not valid");
132 auto value = state->get_value();
137 template<
class Rep,
class Period>
138 std::future_status
wait_for(std::chrono::duration<Rep, Period>
const& timeout_duration)
const
141 return state->wait_for(timeout_duration);
146 return state !=
nullptr;
150 std::shared_ptr<PromiseState<T>> state;
164 if (state && !state.unique())
165 state->break_promise();
169 state(
std::move(other.state))
175 state = std::move(other.state);
183 state->set_value(value);
192 std::shared_ptr<PromiseState<T>> state;
void break_promise()
Definition: no_tls_future-inl.h:74
All things Mir.
Definition: atomic_callback.h:25
PromiseState & operator=(PromiseState const &)=delete
Definition: no_tls_future-inl.h:154
NoTLSPromise()
Definition: no_tls_future-inl.h:157
NoTLSFuture & operator=(NoTLSFuture &&other)
Definition: no_tls_future-inl.h:114
NoTLSPromise & operator=(NoTLSPromise &&other)
Definition: no_tls_future-inl.h:173
NoTLSFuture()
Definition: no_tls_future-inl.h:99
bool valid() const
Definition: no_tls_future-inl.h:144
void validate_state() const
Definition: no_tls_future-inl.h:123
std::future_status wait_for(std::chrono::duration< Rep, Period > const &timeout_duration) const
Definition: no_tls_future-inl.h:138
void set_value(T &&val)
Definition: no_tls_future-inl.h:57
NoTLSFuture(std::shared_ptr< PromiseState< T >> const &state)
Definition: no_tls_future-inl.h:104
~NoTLSPromise()
Definition: no_tls_future-inl.h:162
Definition: no_tls_future-inl.h:37
void set_value(T value)
Definition: no_tls_future-inl.h:181
NoTLSFuture(NoTLSFuture &&other)
Definition: no_tls_future-inl.h:109
T get_value()
Definition: no_tls_future-inl.h:65
Definition: no_tls_future-inl.h:97
std::future_status wait_for(std::chrono::duration< Rep, Period > const &timeout_duration) const
Definition: no_tls_future-inl.h:41
void set_value(T const &val)
Definition: no_tls_future-inl.h:49
NoTLSFuture< T > get_future()
Definition: no_tls_future-inl.h:186
NoTLSPromise(NoTLSPromise &&other)
Definition: no_tls_future-inl.h:168