Files
Atmosphere/mesosphere/include/mesosphere/core/KObjectRegistry.hpp
2019-06-03 17:41:09 -07:00

43 lines
977 B
C++

#pragma once
#include <mesosphere/core/KAutoObject.hpp>
#include <mesosphere/core/KLinkedList.hpp>
#include <mesosphere/core/Result.hpp>
#include <mesosphere/threading/KMutex.hpp>
#include <cstring>
namespace mesosphere
{
class KObjectRegistry {
public:
static KObjectRegistry &GetInstance() { return instance; }
SharedPtr<KAutoObject> Find(const char *name) const;
Result Register(SharedPtr<KAutoObject> obj, const char *name);
Result Unregister(const char *name);
private:
struct Node {
SharedPtr<KAutoObject> obj{};
char name[12] = {0};
Node() = default;
Node(SharedPtr<KAutoObject> &&obj, const char *name) : obj{obj}
{
std::strncpy(this->name, name, sizeof(this->name));
}
};
const Node *FindImpl(const char *name) const;
Node *FindImpl(const char *name);
KLinkedList<Node> nameNodes{};
mutable KMutex mutex{};
static KObjectRegistry instance;
};
}