|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectorg.jcsp.nxt.lang.Guard
org.jcsp.nxt.lang.AltingChannelInput
org.jcsp.nxt.lang.One2OneChannelImpl
public class One2OneChannelImpl
This implements a one-to-one object channel.
Any2OneChannelImpl,
One2AnyChannelImpl or
Any2AnyChannelImpl.
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 create method allows the user to create
a 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.
Other static create methods allows the user to create fully initialised arrays of channels, including plug-ins if required.
org.jcsp.lang.Alternative,
org.jcsp.lang.Any2OneChannelImpl,
org.jcsp.lang.One2AnyChannelImpl,
org.jcsp.lang.Any2AnyChannelImpl,
org.jcsp.util.ChannelDataStore,
Serialized Form| Field Summary | |
|---|---|
protected Alternative |
alt
The Alternative class that controls the selection |
protected java.lang.Object |
rwMonitor
The monitor synchronising reader and writer on this channel |
| Constructor Summary | |
|---|---|
One2OneChannelImpl()
|
|
| Method Summary | |
|---|---|
(package private) boolean |
disable()
turns off Alternative selection for the channel. |
(package private) boolean |
enable(Alternative alt)
turns on Alternative selection for the channel. |
AltingChannelInput |
in()
Returns the AltingChannelInput to use for this channel. |
ChannelOutput |
out()
Returns the ChannelOutput object to use for this channel. |
boolean |
pending()
Returns whether there is data pending on this channel. |
java.lang.Object |
read()
Reads an Object from the channel. |
void |
write(java.lang.Object value)
Writes an Object to the channel. |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
protected java.lang.Object rwMonitor
protected Alternative alt
| Constructor Detail |
|---|
public One2OneChannelImpl()
| Method Detail |
|---|
public AltingChannelInput in()
AltingChannelInput to use for this channel.
As One2OneChannelImpl implements
AltingChannelInput itself, this method simply returns
a reference to the object that it is called on.
in in interface One2OneChannelAltingChannelInput object to use for this
channel.public ChannelOutput out()
ChannelOutput object to use for this channel.
As One2OneChannelImpl implements
ChannelOutput itself, this method simply returns
a reference to the object that it is called on.
out in interface One2OneChannelChannelOutput object to use for this
channel.public void write(java.lang.Object value)
write in interface ChannelOutputvalue - the object to write to the channel.public java.lang.Object read()
read in interface ChannelInputboolean enable(Alternative alt)
Note: this method should only be called by the Alternative class
enable in class Guardalt - the Alternative class which will control the selection
boolean disable()
Note: this method should only be called by the Alternative class
disable in class Guardpublic boolean pending()
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 ()});
pending in class AltingChannelInput
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||