aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/hle/service/service.cpp
diff options
context:
space:
mode:
authorGravatar bunnei <ericbunnie@gmail.com>2014-05-18 21:43:29 -0400
committerGravatar bunnei <ericbunnie@gmail.com>2014-05-18 21:43:29 -0400
commiteab6fd01d7d2e9b7434a8c5654d424cb563c3784 (patch)
tree8fcef16c0a2d6fdc078a9c49d55a7caa6c02a755 /src/core/hle/service/service.cpp
parent725d240bf7b9cb48de7a66f8696695ef7aabc889 (diff)
- updated service(s) to be KernelObject's
- various cleanups
Diffstat (limited to 'src/core/hle/service/service.cpp')
-rw-r--r--src/core/hle/service/service.cpp22
1 files changed, 7 insertions, 15 deletions
diff --git a/src/core/hle/service/service.cpp b/src/core/hle/service/service.cpp
index 5601e59a..b3e414e0 100644
--- a/src/core/hle/service/service.cpp
+++ b/src/core/hle/service/service.cpp
@@ -7,12 +7,15 @@
#include "common/string_util.h"
#include "core/hle/hle.h"
+
#include "core/hle/service/service.h"
#include "core/hle/service/apt.h"
#include "core/hle/service/gsp.h"
#include "core/hle/service/hid.h"
#include "core/hle/service/srv.h"
+#include "core/hle/kernel/kernel.h"
+
namespace Service {
Manager* g_manager = NULL; ///< Service manager
@@ -31,32 +34,21 @@ Manager::~Manager() {
/// Add a service to the manager (does not create it though)
void Manager::AddService(Interface* service) {
- int index = m_services.size();
- Handle handle = GetHandleFromIndex(index);
-
+ m_port_map[service->GetPortName()] = g_kernel_objects.Create(service);
m_services.push_back(service);
-
- m_port_map[service->GetPortName()] = handle;
- service->m_handle = handle;
}
/// Removes a service from the manager, also frees memory
void Manager::DeleteService(std::string port_name) {
- auto service = FetchFromPortName(port_name);
-
- m_services.erase(m_services.begin() + GetIndexFromHandle(service->m_handle));
+ Interface* service = FetchFromPortName(port_name);
+ m_services.erase(std::remove(m_services.begin(), m_services.end(), service), m_services.end());
m_port_map.erase(port_name);
-
delete service;
}
/// Get a Service Interface from its Handle
Interface* Manager::FetchFromHandle(Handle handle) {
- int index = GetIndexFromHandle(handle);
- if (index < (int)m_services.size()) {
- return m_services[index];
- }
- return NULL;
+ return g_kernel_objects.GetFast<Interface>(handle);
}
/// Get a Service Interface from its port