[翻译] Iceoryx - iceoryx_hoofs 概述

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_storagei未类型化的对齐静态存储。
ScopeGuard这是 C++ RAII 习惯用法的抽象。有时您会有一些构造,您希望在创建时执行某些任务,然后在超出范围时再次执行,这就是ScopeGuard的用武之地。它类似于std::lock_guardstd::shared_ptr,但更通用。
scoped_static将静态或全局变量的生命周期限制在一个作用域内的辅助函数
BumpAllocator凹凸分配器的实现

容器(container)

类名内部描述
vectorstd::vector的无堆且无异常的实现
forward_liststd::forward_list的无堆、可重定位且无异常的实现
liststd::list的无堆、可重定位且无异常的实现
FixedPositionContainer固定位置容器类似于列表,但针对迭代其元素进行了优化,避免了在列表迭代期间可能出现的来回跳转。
UninitializedArray未初始化的 C 风格数组的包装类,可以通过模板参数将其清零

词汇类型(vocabulary)

类名内部描述
not_null运行时检查包装器,确保指针不是nullptr
optionalstd::optional的实现
variantstd::variant的实现
expected我们在错误处理中使用的基类。每个可能失败的函数都应该返回一个expected。这样,用户就知道这个函数可能会失败,并且他们必须进行某种错误处理。我们受到了C++ expected 提案rust 错误处理概念的启发。
stringstd::string的无堆且无异常的实现。注意,由于字符串是基于栈的,如果分配给此字符串的std::string或字符数组超过字符串容量,它们将被截断并以零结尾。
spanstd::span的实现

文件系统(filesystem)

类名内部描述
filesystem例如iox::access_rightsiox::perms的 C++17 文件系统特性的实现,用于抽象文件权限
PosixAcli访问控制列表(ACL)的接口。
FileLock文件锁的 C++ 包装类。
FileReader用于打开文件并读取它们的包装器。

函数式(functional)

类名内部描述
storable_functioni具有可配置后端用于内存存储的std::function替代方案。
function基于storable_function的基于栈的std::function替代品
function_refstd::function_ref的实现,请参阅function_ref 提案。它的行为类似于std::function,但不拥有可调用对象。

实用工具(utility)

类名内部描述
system_configurationi收集获取系统信息(如页面大小)的自由函数。
UniqueIdi进程内单调递增的 ID。
converti将数字转换为字符串很容易,但将其转换回来可能很难。您可以使用像strtoll这样的函数,但您仍然必须处理像下溢和上溢这样的错误,或者将无效字符串转换为数字。在这里,我们抽象了所有的错误处理,以便您可以安全地将字符串转换为数字。
intoi
Scheduleri包含支持的调度程序以及获取其优先级范围的函数。
serializationi基于此处提出的想法ISOCPP 序列化为类实现了一个简单的序列化概念。

原语(primitives)

类名内部描述
type_traits对编译时评估类型的扩展支持。
types声明基本的构建块类型,如byte
attributesC++20 和 C++23 的属性有时可通过编译器扩展使用。这里定义的属性宏确保如果编译器支持,我们能够使用它们。
algorithm为相同类型的任意数量的值实现minmax。例如min(1,2,3,4,5);
size以通用方式确定大小的辅助函数

缓冲区(buffer)

类名内部描述
SpscFifoi单生产者、单消费者无锁 FIFO
MpmcLockfreeQueue多生产者、多消费者无锁 FIFO,具有类似环形缓冲区的溢出处理
MpmcLoFFLii基于无锁 LIFO 的索引管理器(无锁空闲列表)。我们内存管理器的一个构建块。构建后,它包含索引{0… n},您可以获取和释放。
SpscSofii单生产者、单消费者无锁安全溢出 FIFO(SpscSofi)。
MpmcResizeableLockFreeQueueMpmcLockfreeQueue的可调整大小变体
stack具有简单的压入/弹出接口的栈实现。
可用缓冲区的属性概述
数据结构共享内存可用线程安全无锁并发生产者:消费者有界容量数据类型限制用例
SpscFifo1:1可复制FIFO 数据传输
MpmcLockfreeQueuen:m可复制或可移动无锁地在多个上下文之间以 FIFO 顺序传输任意数据,并处理溢出(环形缓冲区)
MpmcLoFFLin:mint32管理内存访问,LIFO 顺序
SpscSofi1:1平凡可复制无锁地在两个上下文之间以 FIFO 顺序传输小数据(例如指针),并处理溢出(环形缓冲区)
MpmcResizeableLockFreeQueuen:m可复制或可移动MpmcLockfreeQueue的可调整大小变体
stack--单线程应用程序的栈

进程间通信(ipc)

类名内部描述
UnixDomainSocketunix 域套接字的接口。
MessageQueue消息队列的接口,请参阅ManPage mq_overview
NamedPipe基于共享内存的 IPC 通道。主要是 Windows 上UnixDomainSocket的替代品。
PosixSharedMemoryObject创建并将现有的共享内存映射到应用程序中。
PosixMemoryMapimmapmunmap的抽象以及PosixSharedMemoryObject的辅助类。
PosixSharedMemoryi共享内存的抽象,请参阅ManPage shm_overview以及PosixSharedMemoryObject的辅助类。

线程和同步(sync)

类名内部描述
PeriodicTaski以可配置的时间间隔定期执行由模板参数指定的可调用对象。
smart_lock创建任意线程安全的构造,然后可以像智能指针一样使用。如果某些 STL 类型应该是线程安全的,请使用smart_lock在一行中创建线程安全版本。基于Wrapping C++ Member Function Calls中提出的一些想法
mutexi互斥锁接口,请参阅ManPage pthread_mutex_lock
UnnamedSemaphore未命名信号量接口,请参阅ManPage sem_overview
NamedSemaphore命名信号量接口,请参阅ManPage sem_overview
threadstd::thread的无堆替代品。
SignalGuard信号处理程序注册的辅助类。
SignalWatcher包含轮询和可选阻塞等待SIGINTSIGTERM的电池的信号处理。

通用设计模式和抽象(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用定义的错误和错误级别调用错误处理程序的自由函数,请参阅头文件以获取实际示例。
ErrorHandleri仅用于测试目的的错误处理程序类,不应直接使用
logger
requiresIOX_EXPECTS/IOX_ENSURES从 C++ 核心指南的基础

时间(time)

永远不要在您的代码中直接将速度或时间等物理属性作为整数或浮点数使用。
否则您会遇到像这个函数void setTimeout(int timeout)这样的问题。参数的单位是什么,秒?分钟?如果您使用Duration,您可以直接在代码中看到。

void setTimeout(const Duration & timeout);

setTimeout(11_s); // 11 秒
setTimeout(5_ms); // 5 毫秒
类名内部描述
Durationi表示单位时间,可转换为timespectimeval。为了方便和可读性,提供了用户定义的字面量。
`deadline_timer基于轮询的计时器,用于检查是否超过截止日期。
adaptive_waiti实现低 CPU 负载的忙等待循环的构建块。

认证(auth)

类名内部描述
posix_group访问用户信息。
posix_user访问组信息。

命令行界面(cli)

组件内部描述
cli_definition创建命令行界面的类和宏。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值