class BufferedOne2OneChannelIntImpl extends java.lang.Object implements One2OneChannelInt, ChannelInternalsInt
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
ChannelDataStoreInt
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
The Alternative class that controls the selection
|
private ChannelDataStoreInt |
data
The ChannelDataStoreInt used to store the data for the channel
|
private java.lang.Object |
rwMonitor
The monitor synchronising reader and writer on this channel
|
| Constructor and Description |
|---|
BufferedOne2OneChannelIntImpl(ChannelDataStoreInt data)
Constructs a new BufferedOne2OneChannelIntImpl with the specified ChannelDataStoreInt.
|
| Modifier and Type | Method and Description |
|---|---|
void |
endRead() |
AltingChannelInputInt |
in()
Returns the
AltingChannelInputInt object to use for this
channel. |
ChannelOutputInt |
out()
Returns the
ChannelOutputInt object to use for this
channel. |
int |
read()
Reads an int 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) |
int |
startRead() |
void |
write(int value)
Writes an int to the channel.
|
void |
writerPoison(int strength) |
private java.lang.Object rwMonitor
private Alternative alt
private final ChannelDataStoreInt data
public BufferedOne2OneChannelIntImpl(ChannelDataStoreInt data)
data - the ChannelDataStoreInt used to store the data for the channelpublic AltingChannelInputInt in()
AltingChannelInputInt object to use for this
channel. As One2OneChannelIntImpl implements
AltingChannelInputInt itself, this method simply returns
a reference to the object that it is called on.in in interface One2OneChannelIntAltingChannelInputInt object to use for this
channel.public ChannelOutputInt out()
ChannelOutputInt object to use for this
channel. As One2OneChannelIntImpl implements
ChannelOutputInt itself, this method simply returns
a reference to the object that it is called on.out in interface One2OneChannelIntChannelOutputInt object to use for this
channel.public int read()
read in interface ChannelInternalsIntpublic int startRead()
startRead in interface ChannelInternalsIntpublic void endRead()
endRead in interface ChannelInternalsIntpublic void write(int value)
write in interface ChannelInternalsIntvalue - the integer to write to the channel.public boolean readerEnable(Alternative alt)
Note: this method should only be called by the Alternative class
readerEnable in interface ChannelInternalsIntalt - the Alternative class which will control the selectionpublic boolean readerDisable()
Note: this method should only be called by the Alternative class
readerDisable in interface ChannelInternalsIntpublic 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 ()) {
int x = c.read ();
... do something with x
} else (
... do something else
}
is equivalent to:
if (c_pending.priSelect () == 0) {
int 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 ChannelInternalsIntpublic void writerPoison(int strength)
writerPoison in interface ChannelInternalsIntpublic void readerPoison(int strength)
readerPoison in interface ChannelInternalsInt