1 // Copyright 2014 Citra Emulator Project 2 // Licensed under GPLv2 or any later version 3 // Refer to the license.txt file included. 4 5 #pragma once 6 7 #include <memory> 8 9 #include "core/hle/kernel/object.h" 10 11 namespace Kernel { 12 13 class KernelCore; 14 class ReadableEvent; 15 class WritableEvent; 16 17 struct EventPair { 18 std::shared_ptr<ReadableEvent> readable; 19 std::shared_ptr<WritableEvent> writable; 20 }; 21 22 class WritableEvent final : public Object { 23 public: 24 ~WritableEvent() override; 25 26 /** 27 * Creates an event 28 * @param kernel The kernel instance to create this event under. 29 * @param name Optional name of event 30 */ 31 static EventPair CreateEventPair(KernelCore& kernel, std::string name = "Unknown"); 32 GetTypeName()33 std::string GetTypeName() const override { 34 return "WritableEvent"; 35 } GetName()36 std::string GetName() const override { 37 return name; 38 } 39 40 static constexpr HandleType HANDLE_TYPE = HandleType::WritableEvent; GetHandleType()41 HandleType GetHandleType() const override { 42 return HANDLE_TYPE; 43 } 44 45 std::shared_ptr<ReadableEvent> GetReadableEvent() const; 46 47 void Signal(); 48 void Clear(); 49 bool IsSignaled() const; 50 51 private: 52 explicit WritableEvent(KernelCore& kernel); 53 54 std::shared_ptr<ReadableEvent> readable; 55 56 std::string name; ///< Name of event (optional) 57 }; 58 59 } // namespace Kernel 60