GKD.RoboCtrl
载入中...
搜索中...
未找到
base.hpp 文件参考

IO的基础组件。 更多...

详细描述

IO的基础组件。

作者
Junity

提供基础的IO处理类,包括裸IO和带键值的IO。 我们把电控中的IO分为两类:裸IO和带键值的IO。

版本
0.1
日期
2025-11-09

在文件 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< voidroboctrl::io::send (io_type &io, byte_span data)
 发送原始字节流,适配任意裸 IO。
 
template<bare_io io_type>
awaitable< voidroboctrl::io::send (const typename io_type::info_type::key_type &key, byte_span data)
 发送原始字节流,适配任意裸 IO。
 
template<bare_io io_type, utils::package T>
awaitable< voidroboctrl::io::send (io_type &io, const T &pkg)
 发送平凡类型数据,会自动转为字节流发送。
 
template<bare_io io_type, utils::package T>
awaitable< voidroboctrl::io::send (const typename io_type::info_type::key_type &key, const T &pkg)
 发送平凡类型数据,会自动转为字节流发送。
 

类型定义说明

◆ byte_span

using roboctrl::io::byte_span = typedef std::span<std::byte>

byte span,实际上就是一个std::span<std::byte>;

在文件 base.hpp42 行定义.

◆ data_ptr

using roboctrl::io::data_ptr = typedef std::shared_ptr<std::vector<std::byte> >

数据指针,实际上是一个std::shared_ptr<std::vector<std::byte>>;

在文件 base.hpp37 行定义.

函数说明

◆ make_shared_from()

template<utils::byte_container T>
data_ptr roboctrl::io::make_shared_from ( const T &  t)

将任意满足 byte_container 的数据拷贝到共享缓冲。

参数
t输入缓冲

在文件 base.hpp49 行定义.

引用了 roboctrl::io::make_shared_from().

被这些函数引用 roboctrl::io::bare_io_base::dispatch(), roboctrl::io::keyed_io_base< TK >::dispatch() , 以及 roboctrl::io::make_shared_from().

◆ send() [1/4]

template<bare_io io_type>
awaitable< void > roboctrl::io::send ( const typename io_type::info_type::key_type &  key,
byte_span  data 
)

发送原始字节流,适配任意裸 IO。

示例:

co_await send<io::udp>("xxx",data);

在文件 base.hpp348 行定义.

引用了 roboctrl::io::send().

◆ send() [2/4]

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 
)

发送平凡类型数据,会自动转为字节流发送。

示例:

co_await send<io::udp>("xxx",pkg);

在文件 base.hpp375 行定义.

引用了 roboctrl::io::send() , 以及 roboctrl::utils::to_bytes().

◆ send() [3/4]

template<bare_io io_type>
awaitable< void > roboctrl::io::send ( io_type io,
byte_span  data 
)

发送原始字节流,适配任意裸 IO。

示例:

co_await send(io,data);

在文件 base.hpp335 行定义.

引用了 roboctrl::io::send().

被这些函数引用 roboctrl::io::send(), roboctrl::io::send(), roboctrl::io::send() , 以及 roboctrl::io::send().

◆ send() [4/4]

template<bare_io io_type, utils::package T>
awaitable< void > roboctrl::io::send ( io_type io,
const T &  pkg 
)

发送平凡类型数据,会自动转为字节流发送。

示例:

co_await send(io,pkg);

在文件 base.hpp362 行定义.

引用了 roboctrl::io::send() , 以及 roboctrl::utils::to_bytes().