LkEngine 0.1.2
 
Loading...
Searching...
No Matches
MetadataRegistry.h
1#pragma once
2
4
5namespace LkEngine {
6
7 /* TODO: Refactor/Move. */
9 {
10 std::vector<std::string> Properties{};
11
12 FClassMetadata() = default;
13 };
14
19 {
20 public:
21 FORCEINLINE static LMetadataRegistry& Get()
22 {
23 static LMetadataRegistry MetadataRegistry;
24 return MetadataRegistry;
25 }
26
27 LMetadataRegistry(const LMetadataRegistry& Other) = delete;
28 LMetadataRegistry(LMetadataRegistry&& Other) = delete;
29 LMetadataRegistry& operator=(const LMetadataRegistry& Other) = delete;
30
31 template<typename T>
32 void Register(std::string_view InClassName, const T* ObjectPtr)
33 {
34 if (ObjectPtr)
35 {
36 std::printf("[MetadataRegistry] Registering class: \"%s\", TypeID=\"%s\" Derived=\"%s\"\n",
37 InClassName.data(), typeid(ObjectPtr).name(), typeid(*ObjectPtr).name());
38 if (StaticClassRegistry.find(InClassName.data()) == StaticClassRegistry.end())
39 {
40 StaticClassRegistry[InClassName.data()] = {};
41 }
42 }
43 else
44 {
45 std::printf("[MetadataRegistry] [ERROR] Failed to register: \"%s\"\n", InClassName.data());
46 }
47 }
48
49 template<typename T>
50 void RegisterObject(std::string_view ObjectVariableName, const T& ObjectToRegister);
51
52 FORCEINLINE int GetClassRegistrySize() const
53 {
54 return static_cast<int>(StaticClassRegistry.size());
55 }
56
57 FORCEINLINE const std::unordered_map<std::string, FClassMetadata>& GetStaticClassRegistry() const
58 {
59 return StaticClassRegistry;
60 }
61
62 FORCEINLINE const std::unordered_map<std::string, std::pair<std::string, std::time_t>>& GetLiveCollection() const
63 {
64 return LiveCollection;
65 }
66
67 private:
68 LMetadataRegistry() = default;
69
70 private:
71 std::unordered_map<std::string, FClassMetadata> StaticClassRegistry{};
72 std::unordered_map<std::string, std::pair<std::string, std::time_t>> LiveCollection{};
73 };
74
75}
76
77#include "MetadataRegistry.tpp"
Core header.
Definition MetadataRegistry.h:19
Definition Asset.h:11
Definition MetadataRegistry.h:9