diff options
author | Zach Hilman <zachhilman@gmail.com> | 2018-11-27 00:31:22 +0100 |
---|---|---|
committer | Zach Hilman <zachhilman@gmail.com> | 2018-11-29 14:42:26 +0100 |
commit | c7133838161ce0c17276ef96c0decfb855510165 (patch) | |
tree | 35041d92a238d3c2952f0ef486da0214cdc7e267 /src/core/hle/kernel/readable_event.cpp | |
parent | kernel/object: Add descriptions to ResetTypes (diff) | |
download | yuzu-c7133838161ce0c17276ef96c0decfb855510165.tar yuzu-c7133838161ce0c17276ef96c0decfb855510165.tar.gz yuzu-c7133838161ce0c17276ef96c0decfb855510165.tar.bz2 yuzu-c7133838161ce0c17276ef96c0decfb855510165.tar.lz yuzu-c7133838161ce0c17276ef96c0decfb855510165.tar.xz yuzu-c7133838161ce0c17276ef96c0decfb855510165.tar.zst yuzu-c7133838161ce0c17276ef96c0decfb855510165.zip |
Diffstat (limited to 'src/core/hle/kernel/readable_event.cpp')
-rw-r--r-- | src/core/hle/kernel/readable_event.cpp | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/core/hle/kernel/readable_event.cpp b/src/core/hle/kernel/readable_event.cpp new file mode 100644 index 000000000..164cffbdb --- /dev/null +++ b/src/core/hle/kernel/readable_event.cpp @@ -0,0 +1,48 @@ +// Copyright 2014 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include <algorithm> +#include "common/assert.h" +#include "core/hle/kernel/object.h" +#include "core/hle/kernel/readable_event.h" +#include "core/hle/kernel/thread.h" +#include "core/hle/kernel/writable_event.h" + +namespace Kernel { + +ReadableEvent::ReadableEvent(KernelCore& kernel) : WaitObject{kernel} {} +ReadableEvent::~ReadableEvent() = default; + +bool ReadableEvent::ShouldWait(Thread* thread) const { + return !writable_event->IsSignaled(); +} + +void ReadableEvent::Acquire(Thread* thread) { + ASSERT_MSG(!ShouldWait(thread), "object unavailable!"); + + writable_event->ResetOnAcquire(); +} + +void ReadableEvent::AddWaitingThread(SharedPtr<Thread> thread) { + writable_event->AddWaitingThread(thread); +} + +void ReadableEvent::RemoveWaitingThread(Thread* thread) { + writable_event->RemoveWaitingThread(thread); +} + +void ReadableEvent::Signal() { + writable_event->Signal(); +} + +void ReadableEvent::Clear() { + writable_event->Clear(); +} + +void ReadableEvent::WakeupAllWaitingThreads() { + writable_event->WakeupAllWaitingThreads(); + writable_event->ResetOnWakeup(); +} + +} // namespace Kernel |