Class BufferedOne2OneChannel<T>
- java.lang.Object
-
- org.jcsp.lang.BufferedOne2OneChannel<T>
-
- All Implemented Interfaces:
ChannelInternals<T>
,One2OneChannel<T>
class BufferedOne2OneChannel<T> extends java.lang.Object implements One2OneChannel<T>, ChannelInternals<T>
This implements a one-to-one object channel with user-definable buffering.Description
BufferedOne2OneChannel implements a one-to-one object channel with user-definable buffering. Multiple readers or multiple writers are not allowed -- these are catered for byBufferedAny2OneChannel
,BufferedOne2AnyChannel
orBufferedAny2AnyChannel
.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
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.
-
-
Field Summary
Fields Modifier and Type Field Description private Alternative
alt
private ChannelDataStore<T>
data
The ChannelDataStore used to store the data for the channelprivate java.lang.Object
rwMonitor
-
Constructor Summary
Constructors Constructor Description BufferedOne2OneChannel(ChannelDataStore<T> data)
Constructs a new BufferedOne2OneChannel with the specified ChannelDataStore.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
endRead()
AltingChannelInput<T>
in()
Returns theAltingChannelInput
to use for this channel.ChannelOutput<T>
out()
Returns theChannelOutput
object to use for this channel.T
read()
Reads an Object 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)
T
startRead()
void
write(T value)
Writes an Object to the channel.void
writerPoison(int strength)
-
-
-
Field Detail
-
data
private final ChannelDataStore<T> data
The ChannelDataStore used to store the data for the channel
-
rwMonitor
private final java.lang.Object rwMonitor
-
alt
private Alternative alt
-
-
Constructor Detail
-
BufferedOne2OneChannel
public BufferedOne2OneChannel(ChannelDataStore<T> data)
Constructs a new BufferedOne2OneChannel with the specified ChannelDataStore.- Parameters:
data
- the ChannelDataStore used to store the data for the channel
-
-
Method Detail
-
read
public T read()
Reads an Object from the channel.- Specified by:
read
in interfaceChannelInternals<T>
- Returns:
- the object read from the channel.
-
startRead
public T startRead()
- Specified by:
startRead
in interfaceChannelInternals<T>
-
endRead
public void endRead()
- Specified by:
endRead
in interfaceChannelInternals<T>
-
write
public void write(T value)
Writes an Object to the channel.- Specified by:
write
in interfaceChannelInternals<T>
- Parameters:
value
- the object to write to the channel.
-
readerEnable
public boolean readerEnable(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:
readerEnable
in interfaceChannelInternals<T>
- Parameters:
alt
- the Alternative class which will control the selection- Returns:
- true if the channel has data that can be read, else false
-
readerDisable
public boolean readerDisable()
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:
readerDisable
in interfaceChannelInternals<T>
- Returns:
- true if the channel has data that can be read, else false
-
readerPending
public boolean readerPending()
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 ()});
- Specified by:
readerPending
in interfaceChannelInternals<T>
- Returns:
- state of the channel.
-
in
public AltingChannelInput<T> in()
Returns theAltingChannelInput
to use for this channel. AsBufferedOne2OneChannel
implementsAltingChannelInput
itself, this method simply returns a reference to the object that it is called on.- Specified by:
in
in interfaceOne2OneChannel<T>
- Returns:
- the
AltingChannelInput
object to use for this channel.
-
out
public ChannelOutput<T> out()
Returns theChannelOutput
object to use for this channel. AsBufferedOne2OneChannel
implementsChannelOutput
itself, this method simply returns a reference to the object that it is called on.- Specified by:
out
in interfaceOne2OneChannel<T>
- Returns:
- the
ChannelOutput
object to use for this channel.
-
writerPoison
public void writerPoison(int strength)
- Specified by:
writerPoison
in interfaceChannelInternals<T>
-
readerPoison
public void readerPoison(int strength)
- Specified by:
readerPoison
in interfaceChannelInternals<T>
-
-