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:
[legend]

Data Structures

struct  AliasEntry
 

Public Member Functions

template<typename... Entries>
constexpr HardwareContainer (Entries &&... entries)
 
template<typename T >
T * Find (const char *alias) const
 
template<typename T >
T * Find (std::initializer_list< const char * > aliases) const
 
template<typename T >
T * FindOrExit (std::initializer_list< const char * > aliases) const
 
template<typename T >
void Register (Entry< T > &&entry)
 注册一个硬件条目
 

Private Attributes

LibXR::LockFreeList alias_list_
 

Detailed Description

硬件容器类 / Hardware container

Definition at line 27 of file app_framework.hpp.

Constructor & Destructor Documentation

◆ HardwareContainer()

template<typename... Entries>
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 (Register(std::forward<Entries>(entries)), ...);
38 }
void Register(Entry< T > &&entry)
注册一个硬件条目

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.

◆ 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 }
T * Find(const char *alias) const

◆ 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 ( Entry< T > && entry)
inline

注册一个硬件条目

Register a hardware entry

Definition at line 93 of file app_framework.hpp.

94 {
95 for (const auto& alias : entry.aliases)
96 {
97 auto node = new (std::align_val_t(LIBXR_CACHE_LINE_SIZE))
98 LibXR::LockFreeList::Node<AliasEntry>{alias, static_cast<void*>(&entry.object),
100 alias_list_.Add(*node);
101 }
102 }
数据节点模板,继承自 BaseNode,用于存储具体数据类型。 Template data node that inherits from BaseNode to store specific data...
void Add(BaseNode &data)
向链表添加一个节点。 Adds a node to the linked list.
static ID GetID()
获取类型的唯一标识符

Field Documentation

◆ alias_list_

LibXR::LockFreeList LibXR::HardwareContainer::alias_list_
mutableprivate

Definition at line 112 of file app_framework.hpp.


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