PixelBullet  0.0.1
A C++ game engine
Loading...
Searching...
No Matches
resource_cache.h
1#pragma once
2
3#include "pixelbullet/serialization/node.h"
4
5#include <chrono>
6#include <map>
7#include <memory>
8#include <typeindex>
9#include <unordered_map>
10
11namespace pixelbullet
12{
13class Resource;
14
16{
17public:
19 ~ResourceCache() = default;
20
21 void Update();
22 [[nodiscard]] std::shared_ptr<Resource> Find(const std::type_index& typeIndex, const Node& node) const;
23
24 template <typename T>
25 [[nodiscard]] std::shared_ptr<T> Find(const Node& node) const
26 {
27 return std::dynamic_pointer_cast<T>(Find(typeid(T), node));
28 }
29
30 void Add(const Node& node, const std::shared_ptr<Resource>& resource);
31 void Remove(const std::shared_ptr<Resource>& resource);
32
33private:
34 std::unordered_map<std::type_index, std::map<Node, std::shared_ptr<Resource>>> resources_;
35 std::chrono::steady_clock::time_point last_purge_time_;
36 std::chrono::seconds purge_interval_ = std::chrono::seconds(5);
37};
38} // namespace pixelbullet
Represents a hierarchical node capable of storing various data types and supporting YAML serializatio...
Definition node.h:45
Definition resource_cache.h:16