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 (const Entry< T > &entry)
 注册一个硬件条目
 

Protected Attributes

LibXR::LockFreeList alias_list_
 

Detailed Description

硬件容器类 / Hardware container

Definition at line 26 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 34 of file app_framework.hpp.

35 {
36 (Register(std::forward<Entries>(entries)), ...);
37 }
void Register(const 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 43 of file app_framework.hpp.

44 {
45 T* result = nullptr;
46 alias_list_.Foreach<AliasEntry>(
47 [&](AliasEntry& entry)
48 {
49 if (std::strcmp(entry.name, alias) == 0)
50 {
51 result = static_cast<T*>(entry.object);
52 return ErrorCode::FAILED;
53 }
54 return ErrorCode::OK;
55 });
56 return result;
57 }
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 63 of file app_framework.hpp.

64 {
65 for (const auto& alias : aliases)
66 {
67 if (T* obj = Find<T>(alias))
68 {
69 return obj;
70 }
71 }
72 return nullptr;
73 }
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 79 of file app_framework.hpp.

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

◆ Register()

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

注册一个硬件条目

Register a hardware entry

Definition at line 92 of file app_framework.hpp.

93 {
94 for (const auto& alias : entry.aliases)
95 {
96 auto node = new (std::align_val_t(LIBXR_CACHE_LINE_SIZE))
97 LibXR::LockFreeList::Node<AliasEntry>{alias, static_cast<void*>(&entry.object),
99 alias_list_.Add(*node);
100 }
101 }
数据节点模板,继承自 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_
mutableprotected

Definition at line 111 of file app_framework.hpp.


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