class One2OneChannelIntImpl extends java.lang.Object implements ChannelInternalsInt, One2OneChannelInt
Any2OneChannelIntImpl
,
One2AnyChannelIntImpl
or
Any2AnyChannelIntImpl
.
The reading process may ALT
on this channel.
The writing process is committed (i.e. it may not back off).
The default semantics of the channel is that of CSP -- i.e. it is zero-buffered and fully synchronised. The reading process must wait for a matching writer and vice-versa.
However, the static methods of Channel
allow the creation of
a 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.ints 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 boolean |
empty
The synchronisation flag
|
private int |
hold
The (invisible-to-users) buffer used to store the data for the channel
|
private java.lang.Object |
rwMonitor
The monitor synchronising reader and writer on this channel
|
private boolean |
spuriousWakeUp
Flag to deal with a spurious wakeup during a write
|
Constructor and Description |
---|
One2OneChannelIntImpl() |
Modifier and Type | Method and Description |
---|---|
static One2OneChannelInt |
create(ChannelDataStoreInt store)
Creates a One2OneChannelIntImpl using the specified ChannelDataStoreInt.
|
static One2OneChannelInt[] |
create(int n)
Creates an array of One2OneChannelInts.
|
static One2OneChannelInt[] |
create(int n,
ChannelDataStoreInt store)
Creates an array of One2OneChannelInts using the specified ChannelDataStoreInt.
|
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 int hold
private boolean empty
private Alternative alt
private boolean spuriousWakeUp
public 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 One2OneChannelInt
AltingChannelInputInt
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 One2OneChannelInt
ChannelOutputInt
object to use for this
channel.public int read()
read
in interface ChannelInternalsInt
public int startRead()
startRead
in interface ChannelInternalsInt
public void endRead()
endRead
in interface ChannelInternalsInt
public void write(int value)
write
in interface ChannelInternalsInt
value
- 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 ChannelInternalsInt
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 ChannelInternalsInt
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 ()) { 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 ChannelInternalsInt
public static One2OneChannelInt[] create(int n)
n
- the number of channels to create in the arraypublic static One2OneChannelInt create(ChannelDataStoreInt store)
public static One2OneChannelInt[] create(int n, ChannelDataStoreInt store)
n
- the number of channels to create in the arraypublic void readerPoison(int strength)
readerPoison
in interface ChannelInternalsInt
public void writerPoison(int strength)
writerPoison
in interface ChannelInternalsInt