ULRE/inc/hgl/graph/module/GraphModuleMap.h

57 lines
1.1 KiB
C
Raw Normal View History

2025-01-14 12:54:19 +08:00
#pragma once
2025-01-09 00:48:15 +08:00
#include<hgl/graph/VK.h>
#include<hgl/type/IDName.h>
VK_NAMESPACE_BEGIN
class GraphModule;
class GraphModulesMap
{
SortedSet<GraphModule *> gm_set;
2025-01-14 12:54:19 +08:00
Map<AIDName,GraphModule *> gm_map_by_name;
2025-01-09 00:48:15 +08:00
Map<size_t,GraphModule *> gm_map_by_hash;
List<GraphModule *> gm_list; //按创建顺序记录,用于倒序释放
public:
bool Add(GraphModule *gm);
const bool IsEmpty()const
{
return gm_set.IsEmpty();
}
2025-01-14 12:54:19 +08:00
GraphModule *Get(const AIDName &name)
2025-01-09 00:48:15 +08:00
{
GraphModule *gm;
if(gm_map_by_name.Get(name,gm))
return gm;
return nullptr;
}
template<typename T>
T *Get()
{
GraphModule *gm;
return gm_map_by_hash.Get(GetTypeHash<T>(),gm)?(T *)gm:nullptr;
}
template<typename T>
const bool IsLoaded()const{return gm_map_by_hash.ContainsKey(T::GetTypeHash());}
2025-01-14 12:54:19 +08:00
const bool IsLoaded(const AIDName &name)const{return gm_map_by_name.ContainsKey(name);}
2025-01-09 00:48:15 +08:00
bool Release(GraphModule *gm); ///<释放一个模块
void Destory(); ///<销毁所有模块
};//class GraphModulesMap
VK_NAMESPACE_END