Ult3D
Implementation of "Ultimate 3D Game Engine Design & Architecture" by Allan Sherrod
Loading...
Searching...
No Matches
ResourceManager.inl
Go to the documentation of this file.
1namespace Ult
2{
3
4template<typename A, typename HANDLE>
6 mObjects(),
7 mResourceHash(nullptr)
8{
9 if (hashSize > 0) {
10 mResourceHash = new HashTable<ResourceName>(hashSize);
11 }
12}
13
14template<typename A, typename HANDLE>
16{
17 DeleteAllMemory();
18}
19
20template<typename A, typename HANDLE>
21bool ResourceManager<A,HANDLE>::Create(A* res, const char* name, HANDLE* handle)
23 int index = -1;
24 if (res == nullptr) {
25 return false;
26 }
27 if (handle) {
28 handle->Nullify();
29 }
30 index = GetRegisteredIndex(name);
31 if (index == -1) {
32 mObjects.push_back(res);
33 index = (int)mObjects.size() - 1;
34 if (index < 0) {
35 return false;
36 }
37 SetRegisteredName(name, index);
38 }
39 if (handle) {
40 handle->Initialize(index);
41 }
42 return true;
43}
44
45template<typename A, typename HANDLE>
47{
48 int index = handle.GetIndex();
49 if (handle.IsNull()) {
50 return;
51 }
52 handle.Nullify();
54
55template<typename A, typename HANDLE>
58 HashItem<ResourceName> tmpHashItem;
59 ResourceName tmpRes;
60 int key = -1;
61 if (name == nullptr) {
62 return -1;
63 }
64 std::string str(name);
65 if (mResourceHash != nullptr) {
66 key = mResourceHash->HashFunction(str);
67 tmpHashItem = mResourceHash->Find(key);
68 if (tmpHashItem.GetKey() != -1) {
69 return tmpHashItem.GetObject().GetIndex();
70 }
71 }
72 return -1;
73}
74
75template<typename A, typename HANDLE>
77{
78 int index = handle.GetIndex();
79 if (index >= GetSize() || index <= HANDLE::NULL_HANDLE) {
80 return nullptr;
81 }
82 return mObjects[index];
83}
84
85template<typename A, typename HANDLE>
87{
88 return (int)mObjects.size();
89}
90
91template<typename A, typename HANDLE>
93{
94 return &mObjects;
95}
96
97template<typename A, typename HANDLE>
98void ResourceManager<A,HANDLE>::SetRegisteredName(const char* name, int index)
99{
100 if (!name || !mResourceHash|| index < 0) {
101 return;
102 }
103 HashItem<ResourceName> hashItem;
104 std::string str(name);
105
106 ResourceName resName;
107 resName.SetName(name);
108 resName.SetIndex(index);
109
110 hashItem.SetKey(mResourceHash->HashFunction(str));
111 hashItem.SetObj(resName);
112
113 mResourceHash->Insert(hashItem);
114}
115
116template<typename A, typename HANDLE>
117void ResourceManager<A,HANDLE>::DeleteAllMemory()
118{
119 for (int i = 0; i < GetSize(); i++) {
120 if (mObjects[i]) {
121 delete mObjects[i];
122 mObjects[i] = nullptr;
123 }
124 }
125 if (mResourceHash) {
126 delete mResourceHash;
127 mResourceHash = nullptr;
128 }
129}
130
131} // namespace Ult
132
Definition HashTable.h:16
T GetObject()
Definition HashTable.h:36
int GetKey() const
Definition HashTable.h:31
Definition HashTable.h:62
A * GetResource(const HANDLE &handle)
Definition ResourceManager.inl:76
int GetSize()
Definition ResourceManager.inl:86
int GetRegisteredIndex(const char *name)
Definition ResourceManager.inl:56
std::vector< A * > * GetObjects()
Definition ResourceManager.inl:92
virtual ~ResourceManager()
Definition ResourceManager.inl:15
void Release(HANDLE &handle)
Definition ResourceManager.inl:46
bool Create(A *res, const char *name, HANDLE *handle)
Definition ResourceManager.inl:21
ResourceManager(int hashSize=0)
Definition ResourceManager.inl:5
Definition ResourceName.h:13
Definition Archive.h:13