Class BufferedOne2OneChannelIntImpl
- All Implemented Interfaces:
ChannelInternalsInt, One2OneChannelInt
Description
BufferedOne2OneChannelIntImpl implements a one-to-one integer channel with user-definable buffering. Multiple readers or multiple writers are not allowed -- these are catered for byBufferedAny2OneChannel,
BufferedOne2AnyChannel or BufferedAny2AnyChannel.
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
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 package, but
careful users may write their own.
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate AlternativeThe Alternative class that controls the selectionprivate final ChannelDataStoreIntThe ChannelDataStoreInt used to store the data for the channelprivate ObjectThe monitor synchronising reader and writer on this channel -
Constructor Summary
ConstructorsConstructorDescriptionConstructs a new BufferedOne2OneChannelIntImpl with the specified ChannelDataStoreInt. -
Method Summary
Modifier and TypeMethodDescriptionvoidendRead()in()Returns theAltingChannelInputIntobject to use for this channel.out()Returns theChannelOutputIntobject to use for this channel.intread()Reads an int from the channel.booleanturns off Alternative selection for the channel.booleanreaderEnable(Alternative alt) turns on Alternative selection for the channel.booleanReturns whether there is data pending on this channel.voidreaderPoison(int strength) intvoidwrite(int value) Writes an int to the channel.voidwriterPoison(int strength)
-
Field Details
-
rwMonitor
The monitor synchronising reader and writer on this channel -
alt
The Alternative class that controls the selection -
data
The ChannelDataStoreInt used to store the data for the channel
-
-
Constructor Details
-
BufferedOne2OneChannelIntImpl
Constructs a new BufferedOne2OneChannelIntImpl with the specified ChannelDataStoreInt.- Parameters:
data- the ChannelDataStoreInt used to store the data for the channel
-
-
Method Details
-
in
Returns theAltingChannelInputIntobject to use for this channel. AsOne2OneChannelIntImplimplementsAltingChannelInputIntitself, this method simply returns a reference to the object that it is called on.- Specified by:
inin interfaceOne2OneChannelInt- Returns:
- the
AltingChannelInputIntobject to use for this channel.
-
out
Returns theChannelOutputIntobject to use for this channel. AsOne2OneChannelIntImplimplementsChannelOutputIntitself, this method simply returns a reference to the object that it is called on.- Specified by:
outin interfaceOne2OneChannelInt- Returns:
- the
ChannelOutputIntobject to use for this channel.
-
read
public int read()Reads an int from the channel.- Specified by:
readin interfaceChannelInternalsInt- Returns:
- the integer read from the channel.
-
startRead
public int startRead()- Specified by:
startReadin interfaceChannelInternalsInt
-
endRead
public void endRead()- Specified by:
endReadin interfaceChannelInternalsInt
-
write
public void write(int value) Writes an int to the channel.- Specified by:
writein interfaceChannelInternalsInt- Parameters:
value- the integer to write to the channel.
-
readerEnable
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:
readerEnablein interfaceChannelInternalsInt- 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:
readerDisablein interfaceChannelInternalsInt- 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 ()) { 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:
readerPendingin interfaceChannelInternalsInt- Returns:
- state of the channel.
-
writerPoison
public void writerPoison(int strength) - Specified by:
writerPoisonin interfaceChannelInternalsInt
-
readerPoison
public void readerPoison(int strength) - Specified by:
readerPoisonin interfaceChannelInternalsInt
-