A bidirected two-phase channel.
This is a wrapper around two directed two-phase channels.
Each endpoint has an input and an output pointer,
where the input of one endpoint is connected to the output of the other endpoint via a directed channel.
A directed two-phase channel.
The channel provides two data pointers, one of which is read-only.
Data is only transmitted from the writable end to the readable end.
An undirected two-phase channel.
Both instances of the transmitted data are readable and writable,
and the data is swapped instead of being sent only in one direction.
The key used for accessing a channel pointer, such as a DirectedChannelPointer or an UndirectedChannelPointer.
Only one can simultaneously exist at any point, and only if there is no data key.
The key used for accessing a data pointer, such as a ReadOnlyDataPointer, a WritableDataPointer, or a DataPointer.
Only one can simultaneously exist at any point, and only if there is no channel key.