#pragma once
#include "types.h"

namespace Common {

class Event
{
public:
  Event(bool auto_reset = false);
  ~Event();

  void Reset();
  void Signal();
  void Wait();
  bool TryWait(u32 timeout_in_ms);

  static void WaitForMultiple(Event** events, u32 num_events);

private:
#ifdef WIN32
  void* m_event_handle;
#elif defined(__linux__) || defined(__APPLE__) || defined(__HAIKU__)
  int m_pipe_fds[2];
  bool m_auto_reset;
#else
#error Unknown platform.
#endif
};

} // namespace Common
