One Framework
0.1.0
RoboMaster嵌入式框架“一键”解决方案,为你的“创意”服务。
载入中...
搜索中...
未找到
Topic.hpp
浏览该文件的文档.
1
#ifndef OF_LIB_NODE_TOPIC_HPP
2
#define OF_LIB_NODE_TOPIC_HPP
3
4
#include <string>
5
6
#include <
OF/utils/NBuf.hpp
>
7
#include <
OF/lib/Node/Descriptor.hpp
>
8
9
10
namespace
OF
11
{
12
template
<
typename
T>
13
concept
Printable
=
requires
14
{
15
{ std::declval<T>().format() } -> std::convertible_to<std::string&&>;
16
};
17
18
template
<
typename
T>
19
class
Topic
20
{
21
public
:
22
void
write
(
const
T& data)
23
{
24
m_buf.write(data);
25
}
26
27
template
<
typename
Func>
28
void
manipulate
(
const
Func& func)
29
{
30
m_buf.manipulate(func);
31
}
32
33
std::optional<T>
try_read
()
34
{
35
return
m_buf.try_read();
36
}
37
38
T
read
()
39
{
40
return
m_buf.read();
41
}
42
43
static
void
print_stub
(
const
topic_desc
* desc)
44
{
45
auto
* self =
static_cast<
Topic
*
>
(desc->
topic_instance
);
46
T val = self->
read
();
47
printk(
"Topic: %-15s | Size: %d | "
, desc->
name
,
sizeof
(T));
48
if
constexpr
(
Printable<T>
)
49
{
50
printk(
"%s"
, val.format().c_str());
51
}
52
printk(
"\n"
);
53
}
54
55
private
:
56
NBuf<T, CONFIG_TOPIC_BUFFER_N>
m_buf;
57
};
58
}
59
60
#endif
//OF_LIB_NODE_TOPIC_HPP
Descriptor.hpp
NBuf.hpp
OF::NBuf
定义
NBuf.hpp:19
OF::Topic
定义
Topic.hpp:20
OF::Topic::write
void write(const T &data)
定义
Topic.hpp:22
OF::Topic::read
T read()
定义
Topic.hpp:38
OF::Topic::manipulate
void manipulate(const Func &func)
定义
Topic.hpp:28
OF::Topic::try_read
std::optional< T > try_read()
定义
Topic.hpp:33
OF::Topic::print_stub
static void print_stub(const topic_desc *desc)
定义
Topic.hpp:43
OF::Printable
定义
Topic.hpp:13
OF
定义
Mecanum.hpp:6
OF::topic_desc
定义
Descriptor.hpp:19
OF::topic_desc::topic_instance
void * topic_instance
定义
Descriptor.hpp:21
OF::topic_desc::name
const char * name
定义
Descriptor.hpp:20
OF
lib
Node
Topic.hpp
制作者
1.13.2