24 #ifndef MIR_CLIENT_NO_TLS_FUTURE_INL_H_ 25 #define MIR_CLIENT_NO_TLS_FUTURE_INL_H_ 29 #include <condition_variable> 31 #include <boost/throw_exception.hpp> 41 template<
class Rep,
class Period>
42 std::future_status
wait_for(std::chrono::duration<Rep, Period>
const& timeout_duration)
const 44 std::unique_lock<std::mutex> lk(mutex);
45 if (cv.wait_for(lk, timeout_duration, [
this]{ return set || broken; }))
46 return std::future_status::ready;
47 return std::future_status::timeout;
52 std::lock_guard<std::mutex> lk(mutex);
60 std::lock_guard<std::mutex> lk(mutex);
62 value = std::move(val);
68 std::unique_lock<std::mutex> lk(mutex);
69 cv.wait(lk, [
this]{
return set || broken; });
73 BOOST_THROW_EXCEPTION(std::runtime_error(
"broken_promise"));
80 std::lock_guard<std::mutex> lk(mutex);
93 std::mutex
mutable mutex;
94 std::condition_variable
mutable cv;
114 state(
std::move(other.state))
120 state = std::move(other.state);
130 throw std::logic_error(
"state was not valid");
136 auto value = state->get_value();
141 template<
class Rep,
class Period>
142 std::future_status
wait_for(std::chrono::duration<Rep, Period>
const& timeout_duration)
const 145 return state->wait_for(timeout_duration);
150 return state !=
nullptr;
154 std::shared_ptr<PromiseState<T>> state;
168 if (state && !state.unique())
169 state->break_promise();
173 state(
std::move(other.state))
179 state = std::move(other.state);
187 state->set_value(value);
196 std::shared_ptr<PromiseState<T>> state;
void break_promise()
Definition: no_tls_future-inl.h:78
All things Mir.
Definition: atomic_callback.h:25
PromiseState & operator=(PromiseState const &)=delete
Definition: no_tls_future-inl.h:158
NoTLSPromise()
Definition: no_tls_future-inl.h:161
NoTLSFuture & operator=(NoTLSFuture &&other)
Definition: no_tls_future-inl.h:118
NoTLSPromise & operator=(NoTLSPromise &&other)
Definition: no_tls_future-inl.h:177
NoTLSFuture()
Definition: no_tls_future-inl.h:103
bool valid() const
Definition: no_tls_future-inl.h:148
void validate_state() const
Definition: no_tls_future-inl.h:127
std::future_status wait_for(std::chrono::duration< Rep, Period > const &timeout_duration) const
Definition: no_tls_future-inl.h:142
void set_value(T &&val)
Definition: no_tls_future-inl.h:58
NoTLSFuture(std::shared_ptr< PromiseState< T >> const &state)
Definition: no_tls_future-inl.h:108
~NoTLSPromise()
Definition: no_tls_future-inl.h:166
Definition: no_tls_future-inl.h:38
void set_value(T value)
Definition: no_tls_future-inl.h:185
NoTLSFuture(NoTLSFuture &&other)
Definition: no_tls_future-inl.h:113
T get_value()
Definition: no_tls_future-inl.h:66
Definition: no_tls_future-inl.h:101
std::future_status wait_for(std::chrono::duration< Rep, Period > const &timeout_duration) const
Definition: no_tls_future-inl.h:42
void set_value(T const &val)
Definition: no_tls_future-inl.h:50
NoTLSFuture< T > get_future()
Definition: no_tls_future-inl.h:190
NoTLSPromise(NoTLSPromise &&other)
Definition: no_tls_future-inl.h:172