class BufferedOne2OneChannel<T> extends java.lang.Object implements One2OneChannel<T>, ChannelInternals<T>
BufferedAny2OneChannel
,
BufferedOne2AnyChannel
or BufferedAny2AnyChannel
.
The reading process may ALT
on this channel.
The writing process is committed (i.e. it may not back off).
The constructor requires the user to provide
the channel with a plug-in driver conforming to the
ChannelDataStore
interface. This allows a variety of different channel semantics to be
introduced -- including buffered channels of user-defined capacity
(including infinite), overwriting channels (with various overwriting
policies) etc..
Standard examples are given in the org.jcsp.util package, but
careful users may write their own.
Modifier and Type | Field and Description |
---|---|
private Alternative |
alt |
private ChannelDataStore<T> |
data
The ChannelDataStore used to store the data for the channel
|
private java.lang.Object |
rwMonitor |
Constructor and Description |
---|
BufferedOne2OneChannel(ChannelDataStore<T> data)
Constructs a new BufferedOne2OneChannel with the specified ChannelDataStore.
|
Modifier and Type | Method and Description |
---|---|
void |
endRead() |
AltingChannelInput<T> |
in()
Returns the
AltingChannelInput to use for this channel. |
ChannelOutput<T> |
out()
Returns the
ChannelOutput object to use for this channel. |
T |
read()
Reads an Object from the channel.
|
boolean |
readerDisable()
turns off Alternative selection for the channel.
|
boolean |
readerEnable(Alternative alt)
turns on Alternative selection for the channel.
|
boolean |
readerPending()
Returns whether there is data pending on this channel.
|
void |
readerPoison(int strength) |
T |
startRead() |
void |
write(T value)
Writes an Object to the channel.
|
void |
writerPoison(int strength) |
private final ChannelDataStore<T> data
private final java.lang.Object rwMonitor
private Alternative alt
public BufferedOne2OneChannel(ChannelDataStore<T> data)
data
- the ChannelDataStore used to store the data for the channelpublic T read()
read
in interface ChannelInternals<T>
public T startRead()
startRead
in interface ChannelInternals<T>
public void endRead()
endRead
in interface ChannelInternals<T>
public void write(T value)
write
in interface ChannelInternals<T>
value
- the object to write to the channel.public boolean readerEnable(Alternative alt)
Note: this method should only be called by the Alternative class
readerEnable
in interface ChannelInternals<T>
alt
- the Alternative class which will control the selectionpublic boolean readerDisable()
Note: this method should only be called by the Alternative class
readerDisable
in interface ChannelInternals<T>
public boolean readerPending()
Note: if there is, it won't go away until you read it. But if there isn't, there may be some by the time you check the result of this method.
This method is provided for convenience. Its functionality can be provided by Pri Alting the channel against a SKIP guard, although at greater run-time and syntactic cost. For example, the following code fragment:
if (c.pending ()) { Object x = c.read (); ... do something with x } else ( ... do something else }is equivalent to:
if (c_pending.priSelect () == 0) { Object x = c.read (); ... do something with x } else ( ... do something else }where earlier would have had to have been declared:
final Alternative c_pending = new Alternative (new Guard[] {c, new Skip ()});
readerPending
in interface ChannelInternals<T>
public AltingChannelInput<T> in()
AltingChannelInput
to use for this channel.
As BufferedOne2OneChannel
implements
AltingChannelInput
itself, this method simply returns
a reference to the object that it is called on.in
in interface One2OneChannel<T>
AltingChannelInput
object to use for this
channel.public ChannelOutput<T> out()
ChannelOutput
object to use for this channel.
As BufferedOne2OneChannel
implements
ChannelOutput
itself, this method simply returns
a reference to the object that it is called on.out
in interface One2OneChannel<T>
ChannelOutput
object to use for this
channel.public void writerPoison(int strength)
writerPoison
in interface ChannelInternals<T>
public void readerPoison(int strength)
readerPoison
in interface ChannelInternals<T>