UdonLibrary
1.0.0
機械システム研究部 C++ ライブラリ
Toggle main menu visibility
読み取り中…
検索中…
一致する文字列を見つけられません
Forwarding.hpp
[詳解]
1
//
2
// 通信転送クラス
3
//
4
// Copyright (c) 2022 udonrobo
5
//
6
7
//
8
// Sender --[CAN ect.]--> Forwarding --[UART etc.]--> Receiver
9
// ^^^^^^^^^^
10
//
11
12
#pragma once
13
14
#include <
Udon/Utility/Show.hpp
>
15
#include <
Udon/Traits/HasMemberFunction.hpp
>
16
#include <
Udon/Traits/ReaderWriterTraits.hpp
>
17
18
namespace
Udon
19
{
20
25
template
<
26
template
<
typename
>
class
Reader,
27
template
<
typename
>
class
Writer,
28
typename
Message
>
29
class
Forwarding
30
{
31
32
static_assert
(
Udon::Traits::IsReader<Reader>::value
,
"Reader must be reader."
);
33
static_assert
(
Udon::Traits::IsWriter<Writer>::value
,
"Writer must be writer."
);
34
36
using
ReaderType = Reader<Message>;
37
39
using
WriterType = Writer<Message>;
40
42
ReaderType reader;
43
45
WriterType writer;
46
47
public
:
51
Forwarding
(ReaderType&& reader, WriterType&& writer)
52
: reader(
std
::move(reader))
53
, writer(
std
::move(writer))
54
{
55
}
56
59
void
begin
()
60
{
61
Udon::Traits::MaybeInvokeBegin
(reader);
62
Udon::Traits::MaybeInvokeBegin
(writer);
63
}
64
67
void
update
()
68
{
69
Udon::Traits::MaybeInvokeUpdate
(reader);
70
if
(
const
auto
message = reader.getMessage())
71
{
72
writer.setMessage(*message);
73
}
74
else
75
{
76
writer.setMessage({});
77
}
78
Udon::Traits::MaybeInvokeUpdate
(writer);
79
}
80
83
void
show
()
84
{
85
Udon::Show
(
F
(
"read: "
));
86
Udon::Traits::MaybeInvokeShow
(reader);
87
Udon::Show
(
F
(
" write: "
));
88
Udon::Traits::MaybeInvokeShow
(writer);
89
Udon::Show
(
F
(
" "
));
90
}
91
94
void
showRaw
()
95
{
96
Udon::Show
(
F
(
"read: "
));
97
Udon::Traits::MaybeInvokeShowRaw
(reader);
98
Udon::Show
(
F
(
" write: "
));
99
Udon::Traits::MaybeInvokeShowRaw
(writer);
100
Udon::Show
(
F
(
" "
));
101
}
102
105
ReaderType&
getReader
()
106
{
107
return
reader;
108
}
109
112
WriterType&
getWriter
()
113
{
114
return
writer;
115
}
116
};
117
}
// namespace Udon
HasMemberFunction.hpp
ReaderWriterTraits.hpp
Show.hpp
F
#define F(x)
Definition
Show.hpp:17
Udon::Forwarding::begin
void begin()
開始
Definition
Forwarding.hpp:59
Udon::Forwarding::showRaw
void showRaw()
通信状態を表示する
Definition
Forwarding.hpp:94
Udon::Forwarding::Forwarding
Forwarding(ReaderType &&reader, WriterType &&writer)
コンストラクタ
Definition
Forwarding.hpp:51
Udon::Forwarding::getReader
ReaderType & getReader()
受信クラスの参照を取得する
Definition
Forwarding.hpp:105
Udon::Forwarding::update
void update()
更新
Definition
Forwarding.hpp:67
Udon::Forwarding::show
void show()
通信状態を表示する
Definition
Forwarding.hpp:83
Udon::Forwarding::getWriter
WriterType & getWriter()
送信クラスの参照を取得する
Definition
Forwarding.hpp:112
Udon::Message
Definition
AirCylinder.hpp:16
Udon::Traits::MaybeInvokeShow
void MaybeInvokeShow(const HasMemberFunctionShow &rhs)
T に T::show const 関数が存在する場合呼び出す。それ以外の場合何もしない。
Definition
HasMemberFunction.hpp:57
Udon::Traits::MaybeInvokeBegin
void MaybeInvokeBegin(HasMemberFunctionBegin &rhs)
T に T::begin 関数が存在する場合呼び出す。それ以外の場合何もしない。
Definition
HasMemberFunction.hpp:30
Udon::Traits::MaybeInvokeUpdate
void MaybeInvokeUpdate(HasMemberFunctionUpdate &rhs)
T に T::update 関数が存在する場合呼び出す。それ以外の場合何もしない。
Definition
HasMemberFunction.hpp:111
Udon::Traits::MaybeInvokeShowRaw
void MaybeInvokeShowRaw(const HasMemberFunctionShowRaw &rhs)
T に T::showRaw const 関数が存在する場合呼び出す。それ以外の場合何もしない。
Definition
HasMemberFunction.hpp:84
Udon
Definition
Bit.hpp:12
Udon::Show
void Show(Args &&... args)
区切り文字ありで出力する
Definition
Show.hpp:339
std
Definition
Typedef.hpp:94
Udon::Traits::IsReader
送信クラスであるか判定
Definition
ReaderWriterTraits.hpp:42
Udon::Traits::IsWriter
送信クラスであるか判定
Definition
ReaderWriterTraits.hpp:25