k_event.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. // SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include "core/hle/kernel/k_readable_event.h"
  5. #include "core/hle/kernel/slab_helpers.h"
  6. namespace Kernel {
  7. class KernelCore;
  8. class KReadableEvent;
  9. class KProcess;
  10. class KEvent final : public KAutoObjectWithSlabHeapAndContainer<KEvent, KAutoObjectWithList> {
  11. KERNEL_AUTOOBJECT_TRAITS(KEvent, KAutoObject);
  12. public:
  13. explicit KEvent(KernelCore& kernel_);
  14. ~KEvent() override;
  15. void Initialize(KProcess* owner);
  16. void Finalize() override;
  17. bool IsInitialized() const override {
  18. return m_initialized;
  19. }
  20. uintptr_t GetPostDestroyArgument() const override {
  21. return reinterpret_cast<uintptr_t>(m_owner);
  22. }
  23. KProcess* GetOwner() const override {
  24. return m_owner;
  25. }
  26. KReadableEvent& GetReadableEvent() {
  27. return m_readable_event;
  28. }
  29. static void PostDestroy(uintptr_t arg);
  30. Result Signal();
  31. Result Clear();
  32. void OnReadableEventDestroyed() {
  33. m_readable_event_destroyed = true;
  34. }
  35. private:
  36. KReadableEvent m_readable_event;
  37. KProcess* m_owner{};
  38. bool m_initialized{};
  39. bool m_readable_event_destroyed{};
  40. };
  41. } // namespace Kernel