libxr 1.0
Want to be the best embedded framework
Loading...
Searching...
No Matches
LibXR::HardwareContainer Class Reference

#include <app_framework.hpp>

Collaboration diagram for LibXR::HardwareContainer:

Data Structures

struct  AliasEntry
 

Public Member Functions

template<typename... Entries>
constexpr HardwareContainer (Entries &&... entries)
 
template<typename T >
TFind (const char *alias) const
 
template<typename T >
TFind (std::initializer_list< const char * > aliases) const
 
template<typename T >
TFindOrExit (std::initializer_list< const char * > aliases) const
 
template<typename T >
void Register (const Entry< T > &entry)
 手动注册一个设备条目(及其别名)
 

Private Member Functions

template<typename T >
void RegisterAliases (const Entry< T > &entry)
 

Private Attributes

LibXR::List alias_list_
 

Detailed Description

硬件容器类 / Hardware container

Definition at line 27 of file app_framework.hpp.

Constructor & Destructor Documentation

◆ HardwareContainer()

template<typename... Entries>
constexpr LibXR::HardwareContainer::HardwareContainer ( Entries &&...  entries)
inlineconstexpr

构造并注册所有别名 / Construct and register aliases

Parameters
entries硬件条目列表 / Hardware entry list

Definition at line 35 of file app_framework.hpp.

36 {
37 (RegisterAliases(entries), ...);
38 }
constexpr auto min(T1 a, T2 b) -> typename std::common_type< T1, T2 >::type
计算两个数的最小值

Member Function Documentation

◆ Find() [1/2]

template<typename T >
T * LibXR::HardwareContainer::Find ( const char alias) const
inline

查找设备(单个别名) / Find device by alias

Definition at line 44 of file app_framework.hpp.

45 {
46 T* result = nullptr;
47 alias_list_.Foreach<AliasEntry>(
48 [&](AliasEntry& entry)
49 {
50 if (std::strcmp(entry.name, alias) == 0)
51 {
52 result = static_cast<T*>(entry.object);
53 return ErrorCode::FAILED;
54 }
55 return ErrorCode::OK;
56 });
57 return result;
58 }
ErrorCode Foreach(Func func)
遍历链表中的每个节点,并应用回调函数。 Iterates over each node in the list and applies a callback function.
Definition list.hpp:214

◆ Find() [2/2]

template<typename T >
T * LibXR::HardwareContainer::Find ( std::initializer_list< const char * >  aliases) const
inline

查找设备(多个别名) / Find device with fallback aliases

Definition at line 64 of file app_framework.hpp.

65 {
66 for (const auto& alias : aliases)
67 {
68 if (T* obj = Find<T>(alias))
69 {
70 return obj;
71 }
72 }
73 return nullptr;
74 }

◆ FindOrExit()

template<typename T >
T * LibXR::HardwareContainer::FindOrExit ( std::initializer_list< const char * >  aliases) const
inline

查找或报错 / Find or ASSERT if not found

Definition at line 80 of file app_framework.hpp.

81 {
82 T* result = Find<T>(aliases);
83 ASSERT(result != nullptr);
84 return result;
85 }

◆ Register()

template<typename T >
void LibXR::HardwareContainer::Register ( const Entry< T > &  entry)
inline

手动注册一个设备条目(及其别名)

Manually register a device entry and its aliases

Template Parameters
T设备类型 / Device type
Parameters
entry设备条目 / Device entry with aliases

Definition at line 95 of file app_framework.hpp.

96 {
97 RegisterAliases(entry);
98 }

◆ RegisterAliases()

template<typename T >
void LibXR::HardwareContainer::RegisterAliases ( const Entry< T > &  entry)
inlineprivate

Definition at line 111 of file app_framework.hpp.

112 {
113 for (const auto& alias : entry.aliases)
114 {
116 alias, static_cast<void*>(&entry.object), TypeID::GetID<T>()};
117 alias_list_.Add(*node);
118 }
119 }
数据节点模板,继承自 BaseNode,用于存储具体数据类型。 Template data node that inherits from BaseNode to store specific data...
Definition list.hpp:60
void Add(BaseNode &data)
向链表添加一个节点。 Adds a node to the linked list.
Definition list.hpp:143

Field Documentation

◆ alias_list_

LibXR::List LibXR::HardwareContainer::alias_list_
mutableprivate

Definition at line 108 of file app_framework.hpp.


The documentation for this class was generated from the following file: