One Framework
0.1.0
RoboMaster嵌入式框架“一键”解决方案,为你的“创意”服务。
载入中...
搜索中...
未找到
HubManager.hpp
浏览该文件的文档.
1
#ifndef OF_LIB_HUBMANAGER_HPP
2
#define OF_LIB_HUBMANAGER_HPP
3
4
#include "
HubBase.hpp
"
5
#include <frozen/string.h>
6
#include <frozen/unordered_map.h>
7
#include <string_view>
8
9
namespace
OF
10
{
11
template
<
typename
HubT, const auto& ConfigObj>
12
struct
HubEntry
13
{
14
using
Type
= HubT;
15
static
constexpr
const
auto
&
config
= ConfigObj;
16
};
17
18
namespace
GlobalCtx
19
{
20
template
<
typename
T>
21
struct
HubStorage
22
{
23
static
inline
T*
instance
=
nullptr
;
24
};
25
}
26
27
template
<
typename
T>
28
static
void
registerHub
(T* ptr)
29
{
30
GlobalCtx::HubStorage<T>::instance
= ptr;
31
}
32
33
template
<
typename
T>
34
static
T*
getHub
()
35
{
36
return
GlobalCtx::HubStorage<T>::instance
;
37
}
38
39
template
<
typename
... Entries>
40
class
HubManager
41
{
42
public
:
43
static
void
startAll
()
44
{
45
(startOne<Entries>(), ...);
46
}
47
48
static
auto
*
getHubByName
(std::string_view name)
49
{
50
51
static
constexpr
auto
map = frozen::make_unordered_map<frozen::string, IHub*>(
52
{{Entries::Type::name,
getHub<typename Entries::Type>
()}...});
53
54
auto
it = map.find(name);
55
if
(it != map.end())
56
{
57
return
(it->second)();
58
}
59
return
nullptr
;
60
}
61
62
private
:
63
template
<
typename
Entry>
64
static
void
startOne()
65
{
66
auto
*
hub
=
getHub<typename Entry::Type>
();
67
hub
->configure(Entry::config);
68
hub
->init();
69
}
70
};
71
}
// namespace OF
72
#endif
HubBase.hpp
OF::HubManager
定义
HubManager.hpp:41
OF::HubManager::startAll
static void startAll()
定义
HubManager.hpp:43
OF::HubManager::getHubByName
static auto * getHubByName(std::string_view name)
定义
HubManager.hpp:48
OF::GlobalCtx
定义
HubManager.hpp:19
OF
定义
Mecanum.hpp:6
OF::registerHub
static void registerHub(T *ptr)
定义
HubManager.hpp:28
OF::hub
OF_CCM_ATTR NotifyHub hub
定义
NotifyHub.cpp:11
OF::getHub
static T * getHub()
定义
HubManager.hpp:34
OF::GlobalCtx::HubStorage
定义
HubManager.hpp:22
OF::GlobalCtx::HubStorage::instance
static T * instance
定义
HubManager.hpp:23
OF::HubEntry
定义
HubManager.hpp:13
OF::HubEntry::Type
HubT Type
定义
HubManager.hpp:14
OF::HubEntry::config
static constexpr const auto & config
定义
HubManager.hpp:15
OF
lib
HubManager
HubManager.hpp
制作者
1.13.2