readable_event.cpp 1004 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. // Copyright 2014 Citra Emulator Project
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #include <algorithm>
  5. #include "common/assert.h"
  6. #include "core/hle/kernel/errors.h"
  7. #include "core/hle/kernel/object.h"
  8. #include "core/hle/kernel/readable_event.h"
  9. #include "core/hle/kernel/thread.h"
  10. namespace Kernel {
  11. ReadableEvent::ReadableEvent(KernelCore& kernel) : WaitObject{kernel} {}
  12. ReadableEvent::~ReadableEvent() = default;
  13. bool ReadableEvent::ShouldWait(const Thread* thread) const {
  14. return !signaled;
  15. }
  16. void ReadableEvent::Acquire(Thread* thread) {
  17. ASSERT_MSG(!ShouldWait(thread), "object unavailable!");
  18. }
  19. void ReadableEvent::Signal() {
  20. if (!signaled) {
  21. signaled = true;
  22. WakeupAllWaitingThreads();
  23. };
  24. }
  25. void ReadableEvent::Clear() {
  26. signaled = false;
  27. }
  28. ResultCode ReadableEvent::Reset() {
  29. if (!signaled) {
  30. return ERR_INVALID_STATE;
  31. }
  32. Clear();
  33. return RESULT_SUCCESS;
  34. }
  35. } // namespace Kernel