Skip to content

Commit 21a4b65

Browse files
committed
input to reactor bank input port wiring added
1 parent 294f2a2 commit 21a4b65

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed

include/reactor-sdk/InputPort.hh

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,16 @@ class Input : public reactor::Input<T> {
2323
origin.connect_fanout (input);
2424
}
2525

26+
template <typename OtherReactorType>
27+
void operator>(ReactorBankInputPortOffset<OtherReactorType, T> &&other_bank_ports) {
28+
origin.connect(std::move(other_bank_ports));
29+
}
30+
31+
template <typename OtherReactorType>
32+
void operator>>(ReactorBankInputPortOffset<OtherReactorType, T> &&other_bank_ports) {
33+
origin.connect_fanout(std::move(other_bank_ports));
34+
}
35+
2636
private:
2737
Input& origin;
2838
};
@@ -31,6 +41,12 @@ class Input : public reactor::Input<T> {
3141
void connect(MultiportInput<T>& input);
3242
void connect_fanout(MultiportInput<T>& input);
3343

44+
template <typename ReactorType>
45+
void connect(ReactorBankInputPortOffset<ReactorType, T> &&other_bank_ports);
46+
47+
template <typename ReactorType>
48+
void connect_fanout(ReactorBankInputPortOffset<ReactorType, T> &&other_bank_ports);
49+
3450
public:
3551
using value_type = T;
3652
Input(const std::string& name, reactor::Reactor* container)

include/reactor-sdk/impl/InputPort_wiring_impl.hh

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,5 +42,39 @@ void Input<T>::connect_fanout(MultiportInput<T>& input) {
4242
}
4343
connect_fanout_ (left_ports, right_ports, reactor::ConnectionProperties{});
4444
}
45+
46+
template <typename T>
47+
template <typename ReactorType>
48+
void Input<T>::connect(ReactorBankInputPortOffset<ReactorType, T> &&other_bank_ports) {
49+
std::set<reactor::Port<T>*> left_ports;
50+
std::set<reactor::Port<T>*> right_ports;
51+
bool result = left_ports.insert(this).second;
52+
reactor_assert(result);
53+
for (auto &p_reactor : other_bank_ports) {
54+
auto *reactor = p_reactor.get();
55+
char* reactor_base = reinterpret_cast<char*>(reactor);
56+
Input<T>* port = reinterpret_cast<Input<T>*>(reactor_base + other_bank_ports.get_offset());
57+
result = right_ports.insert(port).second;
58+
reactor_assert(result);
59+
}
60+
connect_ (left_ports, right_ports, reactor::ConnectionProperties{});
61+
}
62+
63+
template <typename T>
64+
template <typename ReactorType>
65+
void Input<T>::connect_fanout(ReactorBankInputPortOffset<ReactorType, T> &&other_bank_ports) {
66+
std::set<reactor::Port<T>*> left_ports;
67+
std::set<reactor::Port<T>*> right_ports;
68+
bool result = left_ports.insert(this).second;
69+
reactor_assert(result);
70+
for (auto &p_reactor : other_bank_ports) {
71+
auto *reactor = p_reactor.get();
72+
char* reactor_base = reinterpret_cast<char*>(reactor);
73+
Input<T>* port = reinterpret_cast<Input<T>*>(reactor_base + other_bank_ports.get_offset());
74+
result = right_ports.insert(port).second;
75+
reactor_assert(result);
76+
}
77+
connect_fanout_ (left_ports, right_ports, reactor::ConnectionProperties{});
78+
}
4579

4680
} // namespace sdk

0 commit comments

Comments
 (0)