Eclipse iceoryx_hoofs 概述
原文地址: iceoryx_hoofs/README.md
iceoryx hoofs(Handy Objects Optimised For Safety,方便为安全优化的对象)是我们的基本构建块——iceoryx 的基础。根据使用的位置或方式,有各种各样的构建块分组在模块中。
模块
以下部分有一个标为“internal”的列,表示该 API 不稳定,随时可能更改。您永远不应依赖它,如果使用它并且在更新后破坏了您的代码,将不提供支持。
一些模块包含不属于 C++17 标准的 STL 构造以及像“NewType”这样的便利构造。由于这些类重新实现了一些 STL 构造,因此对于此模块中的所有文件都使用 C++ STL 编码指南,以帮助用户从官方 STL 类型无痛过渡到我们的类型。
API 也应该与相应的 STL 类型相同,但我们在这里必须做出例外。例如,我们不抛出异常,尽量避免未定义的行为,并且我们不使用动态内存。在这些情况下,我们根据我们的用例调整了 API。
大多数头文件都提供了一些关于如何使用该类的示例代码。
模块结构是一种逻辑分组。它针对“concurrent”和“posix”实现进行了复制。
内存和生命周期管理(memory)
类名 | 内部 | 描述 |
---|
unique_ptr | | 提供了一个无堆的unique_ptr 实现,与 STL 不同 |
RelativePointer | | 可以存储在共享内存中的指针 |
relocatable_ptr | | |
static_storage | i | 未类型化的对齐静态存储。 |
ScopeGuard | | 这是 C++ RAII 习惯用法的抽象。有时您会有一些构造,您希望在创建时执行某些任务,然后在超出范围时再次执行,这就是ScopeGuard 的用武之地。它类似于std::lock_guard 或std::shared_ptr ,但更通用。 |
scoped_static | | 将静态或全局变量的生命周期限制在一个作用域内的辅助函数 |
BumpAllocator | | 凹凸分配器的实现 |
容器(container)
类名 | 内部 | 描述 |
---|
vector | | std::vector 的无堆且无异常的实现 |
forward_list | | std::forward_list 的无堆、可重定位且无异常的实现 |
list | | std::list 的无堆、可重定位且无异常的实现 |
FixedPositionContainer | | 固定位置容器类似于列表,但针对迭代其元素进行了优化,避免了在列表迭代期间可能出现的来回跳转。 |
UninitializedArray | | 未初始化的 C 风格数组的包装类,可以通过模板参数将其清零 |
词汇类型(vocabulary)
类名 | 内部 | 描述 |
---|
not_null | | 运行时检查包装器,确保指针不是nullptr |
optional | | std::optional 的实现 |
variant | | std::variant 的实现 |
expected | | 我们在错误处理中使用的基类。每个可能失败的函数都应该返回一个expected 。这样,用户就知道这个函数可能会失败,并且他们必须进行某种错误处理。我们受到了C++ expected 提案和rust 错误处理概念的启发。 |
string | | std::string 的无堆且无异常的实现。注意,由于字符串是基于栈的,如果分配给此字符串的std::string 或字符数组超过字符串容量,它们将被截断并以零结尾。 |
span | | std::span 的实现 |
文件系统(filesystem)
类名 | 内部 | 描述 |
---|
filesystem | | 例如iox::access_rights 和iox::perms 的 C++17 文件系统特性的实现,用于抽象文件权限 |
PosixAcl | i | 访问控制列表(ACL)的接口。 |
FileLock | | 文件锁的 C++ 包装类。 |
FileReader | | 用于打开文件并读取它们的包装器。 |
函数式(functional)
类名 | 内部 | 描述 |
---|
storable_function | i | 具有可配置后端用于内存存储的std::function 替代方案。 |
function | | 基于storable_function 的基于栈的std::function 替代品 |
function_ref | | std::function_ref 的实现,请参阅function_ref 提案。它的行为类似于std::function ,但不拥有可调用对象。 |
实用工具(utility)
类名 | 内部 | 描述 |
---|
system_configuration | i | 收集获取系统信息(如页面大小)的自由函数。 |
UniqueId | i | 进程内单调递增的 ID。 |
convert | i | 将数字转换为字符串很容易,但将其转换回来可能很难。您可以使用像strtoll 这样的函数,但您仍然必须处理像下溢和上溢这样的错误,或者将无效字符串转换为数字。在这里,我们抽象了所有的错误处理,以便您可以安全地将字符串转换为数字。 |
into | i | |
Scheduler | i | 包含支持的调度程序以及获取其优先级范围的函数。 |
serialization | i | 基于此处提出的想法ISOCPP 序列化为类实现了一个简单的序列化概念。 |
原语(primitives)
类名 | 内部 | 描述 |
---|
type_traits | | 对编译时评估类型的扩展支持。 |
types | | 声明基本的构建块类型,如byte 。 |
attributes | | C++20 和 C++23 的属性有时可通过编译器扩展使用。这里定义的属性宏确保如果编译器支持,我们能够使用它们。 |
algorithm | | 为相同类型的任意数量的值实现min 和max 。例如min(1,2,3,4,5); |
size | | 以通用方式确定大小的辅助函数 |
缓冲区(buffer)
类名 | 内部 | 描述 |
---|
SpscFifo | i | 单生产者、单消费者无锁 FIFO |
MpmcLockfreeQueue | | 多生产者、多消费者无锁 FIFO,具有类似环形缓冲区的溢出处理 |
MpmcLoFFLi | i | 基于无锁 LIFO 的索引管理器(无锁空闲列表)。我们内存管理器的一个构建块。构建后,它包含索引{0… n},您可以获取和释放。 |
SpscSofi | i | 单生产者、单消费者无锁安全溢出 FIFO(SpscSofi)。 |
MpmcResizeableLockFreeQueue | | MpmcLockfreeQueue 的可调整大小变体 |
stack | | 具有简单的压入/弹出接口的栈实现。 |
可用缓冲区的属性概述
数据结构 | 共享内存可用 | 线程安全 | 无锁 | 并发生产者:消费者 | 有界容量 | 数据类型限制 | 用例 |
---|
SpscFifo | 是 | 是 | 是 | 1:1 | 是 | 可复制 | FIFO 数据传输 |
MpmcLockfreeQueue | 是 | 是 | 是 | n:m | 是 | 可复制或可移动 | 无锁地在多个上下文之间以 FIFO 顺序传输任意数据,并处理溢出(环形缓冲区) |
MpmcLoFFLi | 是 | 是 | 是 | n:m | 是 | int32 | 管理内存访问,LIFO 顺序 |
SpscSofi | 是 | 是 | 是 | 1:1 | 是 | 平凡可复制 | 无锁地在两个上下文之间以 FIFO 顺序传输小数据(例如指针),并处理溢出(环形缓冲区) |
MpmcResizeableLockFreeQueue | 是 | 是 | 是 | n:m | 是 | 可复制或可移动 | MpmcLockfreeQueue 的可调整大小变体 |
stack | 是 | 否 | - | - | 是 | 无 | 单线程应用程序的栈 |
进程间通信(ipc)
类名 | 内部 | 描述 |
---|
UnixDomainSocket | | unix 域套接字的接口。 |
MessageQueue | | 消息队列的接口,请参阅ManPage mq_overview。 |
NamedPipe | | 基于共享内存的 IPC 通道。主要是 Windows 上UnixDomainSocket 的替代品。 |
PosixSharedMemoryObject | | 创建并将现有的共享内存映射到应用程序中。 |
PosixMemoryMap | i | mmap 、munmap 的抽象以及PosixSharedMemoryObject 的辅助类。 |
PosixSharedMemory | i | 共享内存的抽象,请参阅ManPage shm_overview以及PosixSharedMemoryObject 的辅助类。 |
线程和同步(sync)
通用设计模式和抽象(design)
类名 | 内部 | 描述 |
---|
Builder | | 生成用于构建器模式的设置器方法的宏。 |
IOX_POSIX_CALL | | 对 C 和 POSIX 函数调用的包装,执行完整的错误处理。此外,此包装器通过重复系统调用确保正确处理EINTR 。 |
functional_interface | | 轻松向对象容器添加像and_then 这样的函数式接口的构造。 |
NewType<T, Policies> | | Haskells NewType 模式的实现。 |
StaticLifetimeGuard | | 解决单例生命周期问题的静态实例管理器。 |
PolymorphicHandler | | 具有默认实例的单例处理程序,可以在运行时更改。 |
报告(reporting)
错误处理程序是收集所有错误并对其做出反应的中心实例。error-handling.hpp
包含所有错误枚举值的列表。错误处理程序具有不同的错误级别,有关更多信息,请参阅error-handling.md
有关如何使用日志记录器 API 的信息,请参阅error-handling.md。
类名 | 内部 | 描述 |
---|
errorHandler | | 用定义的错误和错误级别调用错误处理程序的自由函数,请参阅头文件以获取实际示例。 |
ErrorHandler | i | 仅用于测试目的的错误处理程序类,不应直接使用 |
logger | | |
requires | | IOX_EXPECTS /IOX_ENSURES 从 C++ 核心指南的基础 |
时间(time)
永远不要在您的代码中直接将速度或时间等物理属性作为整数或浮点数使用。
否则您会遇到像这个函数void setTimeout(int timeout)
这样的问题。参数的单位是什么,秒?分钟?如果您使用Duration
,您可以直接在代码中看到。
void setTimeout(const Duration & timeout);
setTimeout(11_s);
setTimeout(5_ms);
类名 | 内部 | 描述 |
---|
Duration | i | 表示单位时间,可转换为timespec 和timeval 。为了方便和可读性,提供了用户定义的字面量。 |
`deadline_timer | | 基于轮询的计时器,用于检查是否超过截止日期。 |
adaptive_wait | i | 实现低 CPU 负载的忙等待循环的构建块。 |
认证(auth)
类名 | 内部 | 描述 |
---|
posix_group | | 访问用户信息。 |
posix_user | | 访问组信息。 |
命令行界面(cli)
组件 | 内部 | 描述 |
---|
cli_definition | | 创建命令行界面的类和宏。 |