blob: 62ede1c2338638a3f722dc533f264b98dcbe3731 [file] [log] [blame]
Brian Silvermand41b4422013-09-01 14:02:33 -07001#include "aos/common/condition.h"
2
3#include <inttypes.h>
Brian Silvermandc1eb272014-08-19 14:25:59 -04004#include <assert.h>
Brian Silvermand41b4422013-09-01 14:02:33 -07005
6#include "aos/common/type_traits.h"
Brian Silvermandc1eb272014-08-19 14:25:59 -04007#include "aos/common/mutex.h"
Brian Silvermand41b4422013-09-01 14:02:33 -07008
9namespace aos {
10
Brian Silverman7f365e32014-01-01 17:59:01 -080011static_assert(shm_ok<Condition>::value,
12 "Condition should work in shared memory");
Brian Silvermand41b4422013-09-01 14:02:33 -070013
Brian Silverman08661c72013-09-01 17:24:38 -070014Condition::Condition(Mutex *m) : impl_(), m_(m) {}
Brian Silvermand41b4422013-09-01 14:02:33 -070015
Austin Schuhf4b194e2014-09-21 10:26:41 -070016bool Condition::Wait() {
Brian Silvermandc1eb272014-08-19 14:25:59 -040017 const int ret = condition_wait(&impl_, &m_->impl_);
18 assert(__builtin_expect(ret == 0 || ret == 1, 1));
19 return ret == 1;
Brian Silvermand41b4422013-09-01 14:02:33 -070020}
21
Brian Silverman08661c72013-09-01 17:24:38 -070022void Condition::Signal() {
Brian Silvermandc1eb272014-08-19 14:25:59 -040023 condition_signal(&impl_, &m_->impl_);
Brian Silvermand41b4422013-09-01 14:02:33 -070024}
Brian Silverman08661c72013-09-01 17:24:38 -070025
26void Condition::Broadcast() {
Brian Silverman797e71e2013-09-06 17:29:39 -070027 condition_broadcast(&impl_, &m_->impl_);
Brian Silvermand41b4422013-09-01 14:02:33 -070028}
29
30} // namespace aos