readable_event.cpp 1.2 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 "common/logging/log.h"
  7. #include "core/hle/kernel/errors.h"
  8. #include "core/hle/kernel/object.h"
  9. #include "core/hle/kernel/readable_event.h"
  10. #include "core/hle/kernel/thread.h"
  11. namespace Kernel {
  12. ReadableEvent::ReadableEvent(KernelCore& kernel) : SynchronizationObject{kernel} {}
  13. ReadableEvent::~ReadableEvent() = default;
  14. bool ReadableEvent::ShouldWait(const Thread* thread) const {
  15. return !is_signaled;
  16. }
  17. void ReadableEvent::Acquire(Thread* thread) {
  18. ASSERT_MSG(IsSignaled(), "object unavailable!");
  19. }
  20. void ReadableEvent::Signal() {
  21. if (is_signaled) {
  22. return;
  23. }
  24. is_signaled = true;
  25. SynchronizationObject::Signal();
  26. }
  27. void ReadableEvent::Clear() {
  28. is_signaled = false;
  29. }
  30. ResultCode ReadableEvent::Reset() {
  31. if (!is_signaled) {
  32. LOG_TRACE(Kernel, "Handle is not signaled! object_id={}, object_type={}, object_name={}",
  33. GetObjectId(), GetTypeName(), GetName());
  34. return ERR_INVALID_STATE;
  35. }
  36. Clear();
  37. return RESULT_SUCCESS;
  38. }
  39. } // namespace Kernel