Files
@ 8fa5df1e1626
Branch filter:
Location: CSY/reowolf/testdata/examples/03_transmitting_ports_01.pdl - annotation
8fa5df1e1626
1.4 KiB
text/plain
Add more examples
8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 8fa5df1e1626 | // 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);
}
|