From c61d2a28413bd149d58b1173fa89a250ddce03c4 Mon Sep 17 00:00:00 2001 From: Zach Hilman Date: Mon, 26 Nov 2018 18:32:13 -0500 Subject: kernel: Add named event table Used to store ReadableEvents of all events on the system. --- src/core/hle/kernel/kernel.cpp | 19 +++++++++++++++++++ src/core/hle/kernel/kernel.h | 11 +++++++++++ 2 files changed, 30 insertions(+) (limited to 'src/core/hle/kernel') diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp index e441c5bc6..9cd714586 100644 --- a/src/core/hle/kernel/kernel.cpp +++ b/src/core/hle/kernel/kernel.cpp @@ -17,9 +17,11 @@ #include "core/hle/kernel/handle_table.h" #include "core/hle/kernel/kernel.h" #include "core/hle/kernel/process.h" +#include "core/hle/kernel/readable_event.h" #include "core/hle/kernel/resource_limit.h" #include "core/hle/kernel/thread.h" #include "core/hle/kernel/timer.h" +#include "core/hle/kernel/writable_event.h" #include "core/hle/lock.h" #include "core/hle/result.h" @@ -175,6 +177,10 @@ struct KernelCore::Impl { // allowing us to simply use a pool index or similar. Kernel::HandleTable thread_wakeup_callback_handle_table; + /// Map of named events managed by the kernel, which are retrieved when HLE services need to + /// return an event to the system. + NamedEventTable named_events; + /// Map of named ports managed by the kernel, which can be retrieved using /// the ConnectToPort SVC. NamedPortTable named_ports; @@ -221,6 +227,19 @@ const Process* KernelCore::CurrentProcess() const { return impl->current_process; } +void KernelCore::AddNamedEvent(std::string name, SharedPtr event) { + impl->named_events.emplace(std::move(name), std::move(event)); +} + +KernelCore::NamedEventTable::iterator KernelCore::FindNamedEvent(const std::string& name) { + return impl->named_events.find(name); +} + +KernelCore::NamedEventTable::const_iterator KernelCore::FindNamedEvent( + const std::string& name) const { + return impl->named_events.find(name); +} + void KernelCore::AddNamedPort(std::string name, SharedPtr port) { impl->named_ports.emplace(std::move(name), std::move(port)); } diff --git a/src/core/hle/kernel/kernel.h b/src/core/hle/kernel/kernel.h index ea00c89f5..f12d061eb 100644 --- a/src/core/hle/kernel/kernel.h +++ b/src/core/hle/kernel/kernel.h @@ -20,6 +20,7 @@ namespace Kernel { class ClientPort; class HandleTable; class Process; +class ReadableEvent; class ResourceLimit; class Thread; class Timer; @@ -27,6 +28,7 @@ class Timer; /// Represents a single instance of the kernel. class KernelCore { private: + using NamedEventTable = std::unordered_map>; using NamedPortTable = std::unordered_map>; public: @@ -66,6 +68,15 @@ public: /// Retrieves a const pointer to the current process. const Process* CurrentProcess() const; + /// Adds an event to the named event table + void AddNamedEvent(std::string name, SharedPtr event); + + /// Finds an event within the named event table wit the given name. + NamedEventTable::iterator FindNamedEvent(const std::string& name); + + /// Finds an event within the named event table wit the given name. + NamedEventTable::const_iterator FindNamedEvent(const std::string& name) const; + /// Adds a port to the named port table void AddNamedPort(std::string name, SharedPtr port); -- cgit v1.2.3