blob: d1ad3a930d3d8459355908916aca55535695ba02 [file] [log] [blame]
#include "aos/condition.h"
#include <inttypes.h>
#include <assert.h>
#include "aos/type_traits/type_traits.h"
#include "aos/mutex/mutex.h"
namespace aos {
static_assert(shm_ok<Condition>::value,
"Condition should work in shared memory");
Condition::Condition(Mutex *m) : impl_(), m_(m) {}
bool Condition::Wait() {
const int ret = condition_wait(&impl_, &m_->impl_);
assert(__builtin_expect(ret == 0 || ret == 1, 1));
return ret == 1;
}
void Condition::Signal() {
condition_signal(&impl_, &m_->impl_);
}
void Condition::Broadcast() {
condition_broadcast(&impl_, &m_->impl_);
}
} // namespace aos