#include "aos/ipc_lib/event.h"

#include <chrono>

#include "glog/logging.h"

#include "aos/type_traits/type_traits.h"

namespace aos {

Event::Event() : impl_(0) {
  static_assert(shm_ok<Event>::value,
                "Event is not safe for use in shared memory.");
}

void Event::Wait() {
  while (__atomic_load_n(&impl_, __ATOMIC_SEQ_CST) == 0) {
    const int ret = futex_wait(&impl_);
    if (ret != 0) {
      CHECK_EQ(-1, ret);
      PLOG(FATAL) << "futex_wait(" << &impl_ << ") failed";
    }
  }
}

bool Event::WaitTimeout(monotonic_clock::duration timeout) {
  ::std::chrono::seconds sec =
      ::std::chrono::duration_cast<::std::chrono::seconds>(timeout);
  ::std::chrono::nanoseconds nsec =
      ::std::chrono::duration_cast<::std::chrono::nanoseconds>(timeout - sec);
  struct timespec timeout_timespec;
  timeout_timespec.tv_sec = sec.count();
  timeout_timespec.tv_nsec = nsec.count();
  while (true) {
    if (__atomic_load_n(&impl_, __ATOMIC_SEQ_CST) != 0) {
      return true;
    }
    const int ret = futex_wait_timeout(&impl_, &timeout_timespec);
    if (ret != 0) {
      if (ret == 2) return false;
      CHECK_EQ(-1, ret);
      PLOG(FATAL) << "futex_wait(" << &impl_ << ") failed";
    }
  }
}

// We're not going to expose the number woken because that's not easily portable
// to condition variable-based implementations.
void Event::Set() {
  if (futex_set(&impl_) == -1) {
    PLOG(FATAL) << "futex_set(" << &impl_ << ") failed";
  }
}

bool Event::Clear() { return !futex_unset(&impl_); }

}  // namespace aos
