Cytopia  0.3
A city building simulation game
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ResourceManager.hxx
Go to the documentation of this file.
1 #ifndef RESOURCE_MANAGER_HXX_
2 #define RESOURCE_MANAGER_HXX_
3 
4 #include <unordered_map>
5 #include <string>
6 
7 #ifdef USE_AUDIO
8 #include "audio/AudioConfig.hxx"
9 #include "audio/Soundtrack.hxx"
10 #endif // USE_AUDIO
11 #include "../util/Singleton.hxx"
12 #include "../util/Meta.hxx"
13 
14 template <typename Key, typename Value> using Mapping = std::unordered_map<Key, Value>;
15 
16 class ResourceManager : public Singleton<ResourceManager>
17 {
18 
19  template <typename ResourceType> struct ResourceItem
20  {
21  ResourceType resource;
22  uint32_t age;
23  };
24 
25 #ifdef USE_AUDIO
26  using SoundtrackResource = ResourceItem<SoundtrackUPtr>;
27 
28  AudioConfig m_audioConfig;
30 #endif // USE_AUDIO
31 
32  uint32_t m_Age;
33  uint32_t m_CacheSize;
34 
35  /* Maximum of 150MB */
37 
38  template <typename Iterator> struct AgeIterator
39  {
40  using value_type = decltype(ResourceItem<nullptr_t>().age);
41  using difference_type = size_t;
42  using pointer = value_type *;
43  using reference = const value_type &;
44  using iterator_category = typename Iterator::iterator_category;
45  AgeIterator(Iterator it) : it(it) {}
46  reference operator*() const { return (it->second).age; }
48  {
49  ++it;
50  return *this;
51  }
52  bool operator!=(const AgeIterator &other) const { return other.it != it; }
53  bool operator==(const AgeIterator &other) const { return other.it == it; }
54 
55  private:
56  Iterator it;
57  };
58 
59 public:
60  template <typename ResourceID> struct resource_type;
61 
67 
68 #ifdef USE_AUDIO
69 
74  void fetch(SoundtrackID);
75 
83  int LoadAudioWithOggVorbis(std::string path, DecodedAudioData &dAudioBuffer);
84 
85 #endif // USE_AUDIO
86 
91  template <typename ResourceID> typename resource_type<ResourceID>::type get(const ResourceID &);
92 
96  void prune();
97 };
98 
99 #include "ResourceManager.inl.hxx"
100 
101 #endif
ResourceManager::AgeIterator::reference
const value_type & reference
Definition: ResourceManager.hxx:43
StrongType< string, struct SoundtrackIDTag >
ResourceManager::AgeIterator::operator++
AgeIterator & operator++()
Definition: ResourceManager.hxx:47
Constant
Constant::value returns the value.
ResourceManager::AgeIterator::iterator_category
typename Iterator::iterator_category iterator_category
Definition: ResourceManager.hxx:44
ResourceManager::AgeIterator::operator!=
bool operator!=(const AgeIterator &other) const
Definition: ResourceManager.hxx:52
ResourceManager::prune
void prune()
Cleans up the cache of unused resources.
Definition: ResourceManager.cxx:171
AudioConfig
Definition: AudioConfig.hxx:22
ResourceManager.inl.hxx
ResourceManager::ResourceManager
ResourceManager()
Creates the ResourceManager.
Definition: ResourceManager.cxx:36
AudioConfig.hxx
ResourceManager::AgeIterator
Definition: ResourceManager.hxx:38
ResourceManager::AgeIterator::it
Iterator it
Definition: ResourceManager.hxx:56
ResourceManager::resource_type
Definition: ResourceManager.hxx:60
Soundtrack.hxx
ResourceManager::m_Age
uint32_t m_Age
Definition: ResourceManager.hxx:32
ResourceManager::m_CacheSize
uint32_t m_CacheSize
Definition: ResourceManager.hxx:33
ResourceManager::AgeIterator::operator*
reference operator*() const
Definition: ResourceManager.hxx:46
ResourceManager::AgeIterator::pointer
value_type * pointer
Definition: ResourceManager.hxx:42
ResourceManager
Definition: ResourceManager.hxx:16
Mapping
std::unordered_map< Key, Value > Mapping
Definition: AudioConfig.hxx:13
ResourceManager::ResourceItem::age
uint32_t age
Definition: ResourceManager.hxx:22
ResourceManager::AgeIterator::AgeIterator
AgeIterator(Iterator it)
Definition: ResourceManager.hxx:45
Singleton
Abstract Singleton implementation.
Definition: Singleton.hxx:8
DecodedAudioData
Container for raw pcm data that read from .ogg sound file.
Definition: Soundtrack.hxx:25
ResourceManager::AgeIterator::operator==
bool operator==(const AgeIterator &other) const
Definition: ResourceManager.hxx:53
ResourceManager::AgeIterator::value_type
decltype(ResourceItem< nullptr_t >().age) value_type
Definition: ResourceManager.hxx:40
ResourceManager::ResourceItem::resource
ResourceType resource
Definition: ResourceManager.hxx:21
ResourceManager::ResourceItem
Definition: ResourceManager.hxx:19
ResourceManager::get
resource_type< ResourceID >::type get(const ResourceID &)
Fetches and return a Soundtrack.
Definition: ResourceManager.inl.hxx:14
string
std::string string
Definition: AudioConfig.hxx:14
ResourceManager::AgeIterator::difference_type
size_t difference_type
Definition: ResourceManager.hxx:41