blob: ed488c50e96b770dc9a7f358aa8bcfcfe6bc9ee0 [file] [log] [blame]
Brian Silvermand41b4422013-09-01 14:02:33 -07001#include "aos/common/condition.h"
2
3#include <inttypes.h>
4
5#include "aos/common/type_traits.h"
6
7namespace aos {
8
Brian Silverman7f365e32014-01-01 17:59:01 -08009static_assert(shm_ok<Condition>::value,
10 "Condition should work in shared memory");
Brian Silvermand41b4422013-09-01 14:02:33 -070011
Brian Silverman08661c72013-09-01 17:24:38 -070012Condition::Condition(Mutex *m) : impl_(), m_(m) {}
Brian Silvermand41b4422013-09-01 14:02:33 -070013
Austin Schuhf4b194e2014-09-21 10:26:41 -070014bool Condition::Wait() {
Brian Silverman08661c72013-09-01 17:24:38 -070015 condition_wait(&impl_, &m_->impl_);
Austin Schuhf4b194e2014-09-21 10:26:41 -070016 return false;
Brian Silvermand41b4422013-09-01 14:02:33 -070017}
18
Brian Silverman08661c72013-09-01 17:24:38 -070019void Condition::Signal() {
Brian Silvermaneeb62ca2013-09-11 15:08:03 -070020 condition_signal(&impl_);
Brian Silvermand41b4422013-09-01 14:02:33 -070021}
Brian Silverman08661c72013-09-01 17:24:38 -070022
23void Condition::Broadcast() {
Brian Silverman797e71e2013-09-06 17:29:39 -070024 condition_broadcast(&impl_, &m_->impl_);
Brian Silvermand41b4422013-09-01 14:02:33 -070025}
26
27} // namespace aos