Faro Engine 0.0.0.b519570 (main)
Loading...
Searching...
No Matches
ResourceManager.hpp
Go to the documentation of this file.
1#pragma once
2#include <Containers/Path.hpp>
4#include <Containers/Map.hpp>
5#include "Resource.hpp"
7#include <Assert.hpp>
8#include <Thread.hpp>
9
10namespace Faro
11{
12 class ResourcePackage;
13
15 {
16 friend class IResource;
17 public:
18 void Init();
19 void Destroy();
20
21 DataStream* GetFile(Path path);
22
23 template<class T>
25 {
26 DebugBuildAssert(RequireSubClass(IResource, T), "Expected subclass of IResource");
27
28 if (resources.Contains(path))
29 {
30 return resources[path];
31 }
32
33 DataStream* stream = GetFile(path);
34 if (stream != nullptr)
35 {
36 T* resource = MemoryManager::New<T>(stream);
37 resources.Add(path, static_cast<IResource*>(resource));
38 return resource;
39 }
40
41 return nullptr;
42 }
43
45
46 protected:
47 void OnResourceClaimChanged(IResource* resource);
48
49 private:
51 Map<Path, IResource*> resources;
52 Array<ResourcePackage*> loadedPackages;
53
54 class ResourceLoaderThread : public IThread
55 {
56 protected:
57 void ThreadInit() override;
58 void ThreadUpdate() override;
59 void ThreadDestroy() override;
60
61 public:
62 String GetThreadId() override;
63
64 static ThreadSafe<Array<IResource*>> loadQueue;
65 };
66 Array<ResourceLoaderThread*> loaderThreads;
67
68 void SetLoaderThreadCount(uint16 count);
69 };
70 extern ResourceManager GResources;
71}
#define RequireSubClass(BaseClass, SubClass)
Definition Assert.hpp:55
Definition Array.hpp:11
Interface that reads and writes data to and from a stream.
Definition Stream.hpp:21
Definition Resource.hpp:19
Base class for a thread.
Definition Thread.hpp:56
Definition Map.hpp:9
Definition Path.hpp:14
Definition ResourceManager.hpp:15
void Init()
Definition ResourceManager.cpp:11
void Destroy()
Definition ResourceManager.cpp:26
DataStream * GetFile(Path path)
Definition ResourceManager.cpp:42
T * GetResource(Path path)
Definition ResourceManager.hpp:24
void AddPackage(ResourcePackage *)
Definition ResourceManager.cpp:52
void OnResourceClaimChanged(IResource *resource)
Definition ResourceManager.cpp:70
Definition ResourcePackage.hpp:12
Definition String.hpp:12
Container class providing thread-safe access to the internal object.
Definition ThreadSafety.hpp:24
Definition Array.hpp:8
uint16_t uint16
Definition Primitives.hpp:9
ResourceManager GResources
Definition ResourceManager.cpp:7