readable_event.cpp 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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(Thread* thread) const {
  14. return !signaled;
  15. }
  16. void ReadableEvent::Acquire(Thread* thread) {
  17. ASSERT_MSG(!ShouldWait(thread), "object unavailable!");
  18. if (reset_type == ResetType::OneShot)
  19. signaled = false;
  20. }
  21. void ReadableEvent::Signal() {
  22. signaled = true;
  23. WakeupAllWaitingThreads();
  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. void ReadableEvent::WakeupAllWaitingThreads() {
  36. WaitObject::WakeupAllWaitingThreads();
  37. }
  38. } // namespace Kernel