org.jcsp.nxt.lang
Class One2OneChannelIntImpl

java.lang.Object
  extended by org.jcsp.nxt.lang.Guard
      extended by org.jcsp.nxt.lang.AltingChannelInputInt
          extended by org.jcsp.nxt.lang.One2OneChannelIntImpl
All Implemented Interfaces:
java.io.Serializable, ChannelInputInt, ChannelOutputInt, One2OneChannelInt

public class One2OneChannelIntImpl
extends AltingChannelInputInt
implements ChannelOutputInt, One2OneChannelInt, java.io.Serializable

This implements a one-to-one integer channel.

Description

One2OneChannelIntImpl implements a one-to-one integer channel. Multiple readers or multiple writers are not allowed

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.

Author:
P.D.Austin, P.H.Welch, Alex Panayotopoulos
See Also:
, 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
One2OneChannelIntImpl()
           
 
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.
 AltingChannelInputInt in()
          Returns the AltingChannelInputInt object to use for this channel.
 ChannelOutputInt out()
          Returns the ChannelOutputInt object to use for this channel.
 boolean pending()
          Returns whether there is data pending on this channel.
 int read()
          Reads an int from the channel.
 void write(int value)
          Writes an int to the channel.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

rwMonitor

protected java.lang.Object rwMonitor
The monitor synchronising reader and writer on this channel


alt

protected Alternative alt
The Alternative class that controls the selection

Constructor Detail

One2OneChannelIntImpl

public One2OneChannelIntImpl()
Method Detail

in

public AltingChannelInputInt in()
Returns the 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.

Specified by:
in in interface One2OneChannelInt
Returns:
the AltingChannelInputInt object to use for this channel.

out

public ChannelOutputInt out()
Returns the 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.

Specified by:
out in interface One2OneChannelInt
Returns:
the ChannelOutputInt object to use for this channel.

read

public int read()
Reads an int from the channel.

Specified by:
read in interface ChannelInputInt
Returns:
the integer read from the channel.

write

public void write(int value)
Writes an int to the channel.

Specified by:
write in interface ChannelOutputInt
Parameters:
value - the integer to write to the channel.

enable

boolean enable(Alternative alt)
turns on Alternative selection for the channel. Returns true if the channel has data that can be read immediately.

Note: this method should only be called by the Alternative class

Specified by:
enable in class Guard
Parameters:
alt - the Alternative class which will control the selection
Returns:
true if the channel has data that can be read, else false

disable

boolean disable()
turns off Alternative selection for the channel. Returns true if the channel contained data that can be read.

Note: this method should only be called by the Alternative class

Specified by:
disable in class Guard
Returns:
true if the channel has data that can be read, else false

pending

public boolean pending()
Returns whether there is data pending on this channel.

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 ()});
 

Specified by:
pending in class AltingChannelInputInt
Returns:
state of the channel.