|
GKD.RoboCtrl
|
IO的基础组件。 更多...
IO的基础组件。
提供基础的IO处理类,包括裸IO和带键值的IO。 我们把电控中的IO分为两类:裸IO和带键值的IO。
在文件 base.hpp 中定义.
#include <algorithm>#include <array>#include <concepts>#include <cstddef>#include <cstring>#include <span>#include <tuple>#include <type_traits>#include <map>#include <memory>#include <utility>#include "core/async.hpp"#include "utils/callback.hpp"#include "utils/utils.hpp"#include "utils/concepts.hpp"类 | |
| class | roboctrl::io::bare_io_base |
| 裸IO组件。 更多... | |
| class | roboctrl::io::keyed_io_base< TK > |
| 带 key 的 IO 基类,根据键值派发数据。 更多... | |
| struct | roboctrl::io::combined_parser< parser_types > |
| 组合式解析器,可顺序堆叠多个数据解析单元。 更多... | |
| struct | roboctrl::io::nbytes< N > |
| 固定长度字节解析器。 更多... | |
| struct | roboctrl::io::struct_data< T > |
| 平凡结构体解析器。 更多... | |
| struct | roboctrl::io::fixed_data< bytes > |
| 固定内容匹配解析器。 更多... | |
| struct | roboctrl::io::other_all |
| 吃掉剩余全部数据的解析器。 更多... | |
概念 | |
| concept | roboctrl::io::bare_io |
| 裸 IO 概念,要求具备 send/task 协程接口。 | |
| concept | roboctrl::io::keyed_io |
| 带 key 的 IO 概念,要求具备 send/task 协程接口。 | |
| concept | roboctrl::io::data_parser |
| 数据解析器概念,负责按需消费字节并返回结果。 | |
类型定义 | |
| using | roboctrl::io::data_ptr = std::shared_ptr< std::vector< std::byte > > |
| 数据指针,实际上是一个std::shared_ptr<std::vector<std::byte>>; | |
| using | roboctrl::io::byte_span = std::span< std::byte > |
| byte span,实际上就是一个std::span<std::byte>; | |
函数 | |
| template<utils::byte_container T> | |
| data_ptr | roboctrl::io::make_shared_from (const T &t) |
| 将任意满足 byte_container 的数据拷贝到共享缓冲。 | |
| template<bare_io io_type> | |
| awaitable< void > | roboctrl::io::send (io_type &io, byte_span data) |
| 发送原始字节流,适配任意裸 IO。 | |
| template<bare_io io_type> | |
| awaitable< void > | roboctrl::io::send (const typename io_type::info_type::key_type &key, byte_span data) |
| 发送原始字节流,适配任意裸 IO。 | |
| template<bare_io io_type, utils::package T> | |
| awaitable< void > | roboctrl::io::send (io_type &io, const T &pkg) |
| 发送平凡类型数据,会自动转为字节流发送。 | |
| template<bare_io io_type, utils::package T> | |
| awaitable< void > | roboctrl::io::send (const typename io_type::info_type::key_type &key, const T &pkg) |
| 发送平凡类型数据,会自动转为字节流发送。 | |
| using roboctrl::io::byte_span = typedef std::span<std::byte> |
| using roboctrl::io::data_ptr = typedef std::shared_ptr<std::vector<std::byte> > |
| data_ptr roboctrl::io::make_shared_from | ( | const T & | t | ) |
将任意满足 byte_container 的数据拷贝到共享缓冲。
| t | 输入缓冲 |
引用了 roboctrl::io::make_shared_from().
被这些函数引用 roboctrl::io::bare_io_base::dispatch(), roboctrl::io::keyed_io_base< TK >::dispatch() , 以及 roboctrl::io::make_shared_from().
| awaitable< void > roboctrl::io::send | ( | const typename io_type::info_type::key_type & | key, |
| byte_span | data | ||
| ) |
| awaitable< void > roboctrl::io::send | ( | const typename io_type::info_type::key_type & | key, |
| const T & | pkg | ||
| ) |
发送平凡类型数据,会自动转为字节流发送。
示例:
发送原始字节流,适配任意裸 IO。
示例:
引用了 roboctrl::io::send().
被这些函数引用 roboctrl::io::send(), roboctrl::io::send(), roboctrl::io::send() , 以及 roboctrl::io::send().