readable_event.cpp 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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. } // namespace Kernel