Files
@ 88611f9fd179
Branch filter:
Location: CSY/reowolf/testdata/examples/03_transmitting_ports_01.pdl - annotation
88611f9fd179
1.4 KiB
text/plain
Merge branch 'feat-examples' into 'master'
feat: examples
See merge request nl-cwi-csy/reowolf!12
feat: examples
See merge request nl-cwi-csy/reowolf!12
97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 97217a7b2d18 | // Since this release transmitting ports is possible. This means that we can
// send ports through ports. In fact, we can send ports that may send ports that
// may send ports. But don't be fooled by the apparent complexity. The inner
// type `T` of a port like `in<T>` simply states that that is the message type.
// Should the type `T` contain one or more ports, then we kick off a bit of code
// that takes care of the transfer of the port. Should the port inside of `T`
// itself, after being received, send a port, then we simply kick off that same
// procedure again.
//
// In the simplest case, we have someone transmitting the receiving end of a
// channel to another component, which then uses that receiving end to receive a
// value.
comp port_sender(out<in<u32>> tx, in<u32> to_transmit) {
sync put(tx, to_transmit);
}
comp port_receiver_and_value_getter(in<in<u32>> rx, u32 expected_value) {
u32 got_value = 0;
sync {
auto port = get(rx);
got_value = get(port);
}
if (expected_value == got_value) {
print("got the expected value :)");
} else {
print("got a different value :(");
}
}
comp value_sender(out<u32> tx, u32 to_send) {
sync put(tx, to_send);
}
comp main() {
u32 value = 1337_2392;
channel port_tx -> port_rx;
channel value_tx -> value_rx;
new port_sender(port_tx, value_rx);
new port_receiver_and_value_getter(port_rx, value);
new value_sender(value_tx, value);
}
|