Class PoisonableOne2OneChannelIntImpl
java.lang.Object
org.jcsp.lang.PoisonableOne2OneChannelIntImpl
- All Implemented Interfaces:
ChannelInternalsInt, One2OneChannelInt
class PoisonableOne2OneChannelIntImpl
extends Object
implements One2OneChannelInt, ChannelInternalsInt
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate AlternativeThe Alternative class that controls the selectionprivate booleanThis flag indicates that the last transfer went OK.private booleanThe synchronisation flagprivate intThe (invisible-to-users) buffer used to store the data for the channelprivate intImmunity is passed to the channel-ends, and is not used directly by the channel algorithmsprivate int0 means unpoisonedprivate ObjectThe monitor synchronising reader and writer on this channelprivate booleanFlag to deal with a spurious wakeup during a write -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidendRead()in()Returns theAltingChannelInputto use for this channel.private booleanout()Returns theChannelOutputobject to use for this channel.intread()Reads an Object 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 Object to the channel.voidwriterPoison(int strength)
-
Field Details
-
rwMonitor
The monitor synchronising reader and writer on this channel -
hold
private int holdThe (invisible-to-users) buffer used to store the data for the channel -
empty
private boolean emptyThe synchronisation flag -
done
private boolean doneThis flag indicates that the last transfer went OK. The purpose is to not throw a PoisonException to the writer side when the last transfer went OK, but the reader side injected poison before the writer side finished processing of the last write transfer. -
poisonStrength
private int poisonStrength0 means unpoisoned -
immunity
private int immunityImmunity is passed to the channel-ends, and is not used directly by the channel algorithms -
alt
The Alternative class that controls the selection -
spuriousWakeUp
private boolean spuriousWakeUpFlag to deal with a spurious wakeup during a write
-
-
Constructor Details
-
PoisonableOne2OneChannelIntImpl
PoisonableOne2OneChannelIntImpl(int _immunity)
-
-
Method Details
-
isPoisoned
private boolean isPoisoned() -
in
Returns theAltingChannelInputto use for this channel. AsOne2OneChannelImplimplementsAltingChannelInputitself, this method simply returns a reference to the object that it is called on.- Specified by:
inin interfaceOne2OneChannelInt- Returns:
- the
AltingChannelInputobject to use for this channel.
-
out
Returns theChannelOutputobject to use for this channel. AsOne2OneChannelImplimplementsChannelOutputitself, this method simply returns a reference to the object that it is called on.- Specified by:
outin interfaceOne2OneChannelInt- Returns:
- the
ChannelOutputobject to use for this channel.
-
write
public void write(int value) Writes an Object to the channel.- Specified by:
writein interfaceChannelInternalsInt- Parameters:
value- the object to write to the channel.
-
read
public int read()Reads an Object from the channel.- Specified by:
readin interfaceChannelInternalsInt- Returns:
- the object read from the channel.
-
startRead
public int startRead()- Specified by:
startReadin interfaceChannelInternalsInt
-
endRead
public void endRead()- Specified by:
endReadin interfaceChannelInternalsInt
-
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 ()) { 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:
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
-