CSP for Java
(JCSP) 1.0-rc7

jcsp.lang
Class One2OneChannel

java.lang.Object
  |
  +--jcsp.lang.Guard
        |
        +--jcsp.lang.AltingChannelInput
              |
              +--jcsp.lang.One2OneChannel
All Implemented Interfaces:
ChannelInput, ChannelOutput, Serializable

public class One2OneChannel
extends AltingChannelInput
implements ChannelOutput, Serializable

This implements a one-to-one object channel.

Description

One2OneChannel implements a one-to-one object channel. Multiple readers or multiple writers are not allowed -- these are catered for by Any2OneChannel, One2AnyChannel or Any2AnyChannel.

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 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.

Author:
P.D.Austin and P.H.Welch
See Also:
Alternative, Any2OneChannel, One2AnyChannel, Any2AnyChannel, ChannelDataStore, Serialized Form

Field Summary
protected  Alternative alt
          The Alternative class that controls the selection
protected  Object rwMonitor
          The monitor synchronising reader and writer on this channel
 
Constructor Summary
One2OneChannel()
           
 
Method Summary
static One2OneChannel create(ChannelDataStore store)
          Creates a One2OneChannel using the specified ChannelDataStore.
static One2OneChannel[] create(int n)
          Creates an array of One2OneChannels.
static One2OneChannel[] create(int n, ChannelDataStore store)
          Creates an array of One2OneChannels using the specified ChannelDataStore.
 boolean pending()
          Returns whether there is data pending on this channel.
 Object read()
          Reads an Object from the channel.
 void write(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

rwMonitor

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

alt

protected Alternative alt
The Alternative class that controls the selection
Constructor Detail

One2OneChannel

public One2OneChannel()
Method Detail

read

public Object read()
Reads an Object from the channel.
Returns:
the object read from the channel.

write

public void write(Object value)
Writes an Object to the channel.
Specified by:
write in interface ChannelOutput
Parameters:
value - the object to write to the channel.

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 ()) {
     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 ()});
 
Overrides:
pending in class AltingChannelInput
Returns:
state of the channel.

create

public static One2OneChannel[] create(int n)
Creates an array of One2OneChannels.
Parameters:
n - the number of channels to create in the array
Returns:
the array of One2OneChannel

create

public static One2OneChannel create(ChannelDataStore store)
Creates a One2OneChannel using the specified ChannelDataStore.
Returns:
the One2OneChannel

create

public static One2OneChannel[] create(int n,
                                      ChannelDataStore store)
Creates an array of One2OneChannels using the specified ChannelDataStore.
Parameters:
n - the number of channels to create in the array
Returns:
the array of One2OneChannel

CSP for Java
(JCSP) 1.0-rc7

Submit a bug or feature to jcsp-team@kent.ac.uk
Version 1.0-rc7 of the JCSP API Specification (Copyright 1997-2006 P.D.Austin and P.H.Welch - All Rights Reserved)
Java is a trademark or registered trademark of Sun Microsystems, Inc. in the US and other countries.