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
9namespace 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>
22 {
23 static inline T* instance = nullptr;
24 };
25 }
26
27 template <typename T>
28 static void registerHub(T* ptr)
29 {
31 }
32
33 template <typename T>
34 static T* getHub()
35 {
37 }
38
39 template <typename... Entries>
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 {
67 hub->configure(Entry::config);
68 hub->init();
69 }
70 };
71} // namespace OF
72#endif
定义 HubManager.hpp:41
static void startAll()
定义 HubManager.hpp:43
static auto * getHubByName(std::string_view name)
定义 HubManager.hpp:48
定义 HubManager.hpp:19
定义 Mecanum.hpp:6
static void registerHub(T *ptr)
定义 HubManager.hpp:28
OF_CCM_ATTR NotifyHub hub
定义 NotifyHub.cpp:11
static T * getHub()
定义 HubManager.hpp:34
定义 HubManager.hpp:22
static T * instance
定义 HubManager.hpp:23
定义 HubManager.hpp:13
HubT Type
定义 HubManager.hpp:14
static constexpr const auto & config
定义 HubManager.hpp:15