k_event.h 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. // Copyright 2021 yuzu emulator team
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #pragma once
  5. #include "core/hle/kernel/k_readable_event.h"
  6. #include "core/hle/kernel/k_writable_event.h"
  7. #include "core/hle/kernel/slab_helpers.h"
  8. namespace Kernel {
  9. class KernelCore;
  10. class KReadableEvent;
  11. class KWritableEvent;
  12. class KProcess;
  13. class KEvent final : public KAutoObjectWithSlabHeapAndContainer<KEvent, KAutoObjectWithList> {
  14. KERNEL_AUTOOBJECT_TRAITS(KEvent, KAutoObject);
  15. public:
  16. explicit KEvent(KernelCore& kernel_);
  17. ~KEvent() override;
  18. void Initialize(std::string&& name, KProcess* owner_);
  19. void Finalize() override;
  20. bool IsInitialized() const override {
  21. return initialized;
  22. }
  23. uintptr_t GetPostDestroyArgument() const override {
  24. return reinterpret_cast<uintptr_t>(owner);
  25. }
  26. KProcess* GetOwner() const override {
  27. return owner;
  28. }
  29. KReadableEvent& GetReadableEvent() {
  30. return readable_event;
  31. }
  32. KWritableEvent& GetWritableEvent() {
  33. return writable_event;
  34. }
  35. static void PostDestroy(uintptr_t arg);
  36. private:
  37. KReadableEvent readable_event;
  38. KWritableEvent writable_event;
  39. KProcess* owner{};
  40. bool initialized{};
  41. };
  42. } // namespace Kernel