readable_event.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // Copyright 2014 Citra Emulator Project
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #pragma once
  5. #include "core/hle/kernel/object.h"
  6. #include "core/hle/kernel/wait_object.h"
  7. namespace Kernel {
  8. class KernelCore;
  9. class WritableEvent;
  10. class ReadableEvent final : public WaitObject {
  11. friend class WritableEvent;
  12. public:
  13. ~ReadableEvent() override;
  14. std::string GetTypeName() const override {
  15. return "ReadableEvent";
  16. }
  17. std::string GetName() const override {
  18. return name;
  19. }
  20. static const HandleType HANDLE_TYPE = HandleType::Event;
  21. HandleType GetHandleType() const override {
  22. return HANDLE_TYPE;
  23. }
  24. bool ShouldWait(Thread* thread) const override;
  25. void Acquire(Thread* thread) override;
  26. void WakeupAllWaitingThreads() override;
  27. void AddWaitingThread(SharedPtr<Thread> thread) override;
  28. void RemoveWaitingThread(Thread* thread) override;
  29. void Signal();
  30. void Clear();
  31. SharedPtr<WritableEvent> PromoteToWritable() const {
  32. return writable_event;
  33. }
  34. private:
  35. explicit ReadableEvent(KernelCore& kernel);
  36. SharedPtr<WritableEvent> writable_event; ///< WritableEvent associated with this ReadableEvent
  37. std::string name; ///< Name of event (optional)
  38. };
  39. } // namespace Kernel