slot 0.0.1
A real time UI render framework
载入中...
搜索中...
未找到
ResourcePool.h
浏览该文件的文档.
1#pragma once
2
3#include "ResourceRef.h"
4
5#include <memory>
6#include <string>
7#include <unordered_map>
8#include <utility>
9#include <vector>
10
11namespace z8 {
12
19template <typename ResourceTy>
21private:
22 std::vector<std::unique_ptr<ResourceTy>> Slots;
23 std::unordered_map<std::string, ResourceRef<ResourceTy>> AssetIndex;
24
25public:
28 std::unique_ptr<ResourceTy> resource) {
29 if (!resource || assetId.empty() ||
30 AssetIndex.find(assetId) != AssetIndex.end())
31 return {};
32
33 const auto index = static_cast<uint32_t>(Slots.size());
34 Slots.push_back(std::move(resource));
35 const ResourceRef<ResourceTy> reference(index);
36 AssetIndex.emplace(std::move(assetId), reference);
37 return reference;
38 }
39
41 ResourceRef<ResourceTy> Find(const std::string &assetId) const {
42 const auto iterator = AssetIndex.find(assetId);
44 : iterator->second;
45 }
46
47 size_t Size() const { return AssetIndex.size(); }
48
51 return const_cast<ResourceTy *>(std::as_const(*this).TryGet(reference));
52 }
53
55 const ResourceTy *TryGet(ResourceRef<ResourceTy> reference) const {
56 if (!reference.IsResolved() || reference.Index >= Slots.size())
57 return nullptr;
58 return Slots[reference.Index].get();
59 }
60
62 template <typename VisitorTy>
63 void Visit(VisitorTy &&visitor) const {
64 for (uint32_t index = 0; index < Slots.size(); ++index) {
65 const auto &resource = Slots[index];
66 if (resource)
68 }
69 }
70};
71
72} // namespace z8
ResourceManager 内部使用的分类型所有权容器。
Definition ResourcePool.h:20
std::unordered_map< std::string, ResourceRef< ResourceTy > > AssetIndex
Definition ResourcePool.h:23
size_t Size() const
Definition ResourcePool.h:47
ResourceRef< ResourceTy > Find(const std::string &assetId) const
Definition ResourcePool.h:41
ResourceTy * TryGet(ResourceRef< ResourceTy > reference)
Definition ResourcePool.h:50
const ResourceTy * TryGet(ResourceRef< ResourceTy > reference) const
Definition ResourcePool.h:55
ResourceRef< ResourceTy > Add(std::string assetId, std::unique_ptr< ResourceTy > resource)
Definition ResourcePool.h:27
void Visit(VisitorTy &&visitor) const
Definition ResourcePool.h:63
std::vector< std::unique_ptr< ResourceTy > > Slots
Definition ResourcePool.h:22
资源的强类型引用,同时覆盖持久化 ID 与运行时索引两种边界。
Definition ResourceRef.h:36
uint32_t Index
Definition ResourceRef.h:42
bool IsResolved() const
Definition ResourceRef.h:54
世界矩阵 描述坐标系,左手坐标系 使用 DirectX12 坐标系的描述
Definition Application.h:15
ResourceTy
Definition ResourceRef.h:10