k_event.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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/slab_helpers.h"
  6. namespace Kernel {
  7. class KernelCore;
  8. class KReadableEvent;
  9. class KWritableEvent;
  10. class Process;
  11. class KEvent final : public KAutoObjectWithSlabHeapAndContainer<KEvent, KAutoObjectWithList> {
  12. KERNEL_AUTOOBJECT_TRAITS(KEvent, KAutoObject);
  13. public:
  14. explicit KEvent(KernelCore& kernel);
  15. ~KEvent() override;
  16. void Initialize(std::string&& name);
  17. virtual void Finalize() override;
  18. virtual bool IsInitialized() const override {
  19. return initialized;
  20. }
  21. virtual uintptr_t GetPostDestroyArgument() const override {
  22. return reinterpret_cast<uintptr_t>(owner);
  23. }
  24. static void PostDestroy(uintptr_t arg);
  25. std::string GetTypeName() const override {
  26. return "KEvent";
  27. }
  28. static constexpr HandleType HANDLE_TYPE = HandleType::Event;
  29. HandleType GetHandleType() const override {
  30. return HANDLE_TYPE;
  31. }
  32. KReadableEvent* GetReadableEvent() {
  33. return readable_event.get();
  34. }
  35. std::shared_ptr<KWritableEvent>& GetWritableEvent() {
  36. return writable_event;
  37. }
  38. const std::shared_ptr<KReadableEvent>& GetReadableEvent() const {
  39. return readable_event;
  40. }
  41. const std::shared_ptr<KWritableEvent>& GetWritableEvent() const {
  42. return writable_event;
  43. }
  44. private:
  45. std::shared_ptr<KReadableEvent> readable_event;
  46. std::shared_ptr<KWritableEvent> writable_event;
  47. Process* owner{};
  48. bool initialized{};
  49. };
  50. } // namespace Kernel