diff options
author | bunnei <ericbunnie@gmail.com> | 2014-04-13 03:55:36 +0200 |
---|---|---|
committer | bunnei <ericbunnie@gmail.com> | 2014-04-13 03:55:36 +0200 |
commit | 68e198476f17a026fed88f3c9a271aa768694354 (patch) | |
tree | c8b368e45afd8fd70c69ce7be7e28879eda8d8aa /src/core/hle/service/service.h | |
parent | hacked CPU interpreter to ignore branch on SVC instruction (as we are HLEing this...) (diff) | |
download | yuzu-68e198476f17a026fed88f3c9a271aa768694354.tar yuzu-68e198476f17a026fed88f3c9a271aa768694354.tar.gz yuzu-68e198476f17a026fed88f3c9a271aa768694354.tar.bz2 yuzu-68e198476f17a026fed88f3c9a271aa768694354.tar.lz yuzu-68e198476f17a026fed88f3c9a271aa768694354.tar.xz yuzu-68e198476f17a026fed88f3c9a271aa768694354.tar.zst yuzu-68e198476f17a026fed88f3c9a271aa768694354.zip |
Diffstat (limited to 'src/core/hle/service/service.h')
-rw-r--r-- | src/core/hle/service/service.h | 57 |
1 files changed, 55 insertions, 2 deletions
diff --git a/src/core/hle/service/service.h b/src/core/hle/service/service.h index f15099982..3fd855dee 100644 --- a/src/core/hle/service/service.h +++ b/src/core/hle/service/service.h @@ -4,6 +4,8 @@ #pragma once +#include <vector> +#include <map> #include <string> #include "common/common_types.h" @@ -14,10 +16,13 @@ namespace Service { -typedef s32 NativeUID; +typedef s32 NativeUID; ///< Native handle for a service + +class Manager; /// Interface to a CTROS service class Interface { + friend class Manager; public: virtual ~Interface() { @@ -43,7 +48,7 @@ public: * Gets the string name used by CTROS for a service * @return Port name of service */ - virtual std::string GetPort() { + virtual std::string GetPortName() { return "[UNKNOWN SERVICE PORT]"; } @@ -57,4 +62,52 @@ private: u32 m_uid; }; +/// Simple class to manage accessing services from ports and UID handles +class Manager { + +public: + Manager(); + + ~Manager(); + + /// Add a service to the manager (does not create it though) + void AddService(Interface* service); + + /// Removes a service from the manager (does not delete it though) + void DeleteService(std::string port_name); + + /// Get a Service Interface from its UID + Interface* FetchFromUID(u32 uid); + + /// Get a Service Interface from its port + Interface* FetchFromPortName(std::string port_name); + +private: + + /// Convert an index into m_services vector into a UID + static u32 GetUIDFromIndex(const int index) { + return index | 0x10000000; + } + + /// Convert a UID into an index into m_services + static int GetIndexFromUID(const u32 uid) { + return uid & 0x0FFFFFFF; + } + + std::vector<Interface*> m_services; + std::map<std::string, u32> m_port_map; + + DISALLOW_COPY_AND_ASSIGN(Manager); +}; + +/// Initialize ServiceManager +void Init(); + +/// Shutdown ServiceManager +void Shutdown(); + + +extern Manager* g_manager; ///< Service manager + + } // namespace |