Service: Clean-up Interface

This commit is contained in:
Yuri Kunde Schlesner 2015-01-30 16:56:49 -02:00
parent 8779b31fe6
commit a79d21c83e
46 changed files with 54 additions and 67 deletions

View file

@ -5,11 +5,12 @@
#pragma once
#include <algorithm>
#include <map>
#include <string>
#include <unordered_map>
#include <vector>
#include <boost/container/flat_map.hpp>
#include "common/common.h"
#include "common/string_util.h"
#include "core/mem_map.h"
@ -69,21 +70,6 @@ public:
return "[UNKNOWN SERVICE PORT]";
}
/// Allocates a new handle for the service
Handle CreateHandle(Kernel::Object *obj) {
// TODO(yuriks): Fix error reporting
Handle handle = Kernel::g_handle_table.Create(obj).ValueOr(INVALID_HANDLE);
m_handles.push_back(handle);
return handle;
}
/// Frees a handle from the service
template <class T>
void DeleteHandle(const Handle handle) {
Kernel::g_handle_table.Close(handle);
m_handles.erase(std::remove(m_handles.begin(), m_handles.end(), handle), m_handles.end());
}
ResultVal<bool> SyncRequest() override {
u32* cmd_buff = Kernel::GetCommandBuffer();
auto itr = m_functions.find(cmd_buff[0]);
@ -109,16 +95,17 @@ protected:
/**
* Registers the functions in the service
*/
void Register(const FunctionInfo* functions, int len) {
for (int i = 0; i < len; i++) {
m_functions[functions[i].id] = functions[i];
template <size_t N>
void Register(const FunctionInfo (&functions)[N]) {
m_functions.reserve(N);
for (auto& fn : functions) {
// Usually this array is sorted by id already, so hint to instead at the end
m_functions.emplace_hint(m_functions.cend(), fn.id, fn);
}
}
private:
std::vector<Handle> m_handles;
std::map<u32, FunctionInfo> m_functions;
boost::container::flat_map<u32, FunctionInfo> m_functions;
};