public final class SelectBase<T>
extends java.lang.Object
Modifier and Type | Field and Description |
---|---|
private java.util.List<SelectableChannel<? extends T>> |
channels |
private boolean[] |
disabledDFVs
Since DataflowVariables should be only read once, they need to be disabled after selecting their value
The array stores a boolean flag for each index, indicating, whether the channel/variable has been disabled
|
private int |
numberOfChannels |
private java.util.Collection<SelectRequest<T>> |
pendingRequests
Unsatisfied requests for value, each holding a list of guards and a routine to invoke once a value is available
|
private java.util.Random |
position |
Constructor and Description |
---|
SelectBase(PGroup pGroup,
java.util.List<SelectableChannel<? extends T>> channels)
Stores the input channel and registers for the wheneverBound() event on each
|
Modifier and Type | Method and Description |
---|---|
(package private) void |
boundNotification(int index,
SelectableChannel<? extends T> channel)
Invoked by the SelectCallback instances, potentially concurrently to inform about new values being available for read from channels.
|
private void |
disableDFV(int currentPosition,
SelectableChannel<? extends T> channel)
Sets the flag in the disabledDFVs array, if the channel is a DFV
|
void |
doSelect(int startIndex,
SelectRequest<T> selectRequest)
Invoked whenever the Select is asked for the next value.
|
private final java.util.List<SelectableChannel<? extends T>> channels
private final int numberOfChannels
private final boolean[] disabledDFVs
private final java.util.Collection<SelectRequest<T>> pendingRequests
private final java.util.Random position
public SelectBase(PGroup pGroup, java.util.List<SelectableChannel<? extends T>> channels)
pGroup
- The group, the thread pool of which should be used for notification message handlerschannels
- All the input channels to select onvoid boundNotification(int index, SelectableChannel<? extends T> channel) throws java.lang.InterruptedException
index
- The index of the ready channelchannel
- The channel itselfjava.lang.InterruptedException
- If the thread is interrupted during value retrieval from the channelpublic void doSelect(int startIndex, SelectRequest<T> selectRequest) throws java.lang.InterruptedException
startIndex
- The index of the channel to check first for available messages, -1 if start at a random position. Continue scanning by increasing the index, once the size is reached start from 0.selectRequest
- The request that holds the guards and expects a notification once a value is selectedjava.lang.InterruptedException
- If the thread gets interrupted while reading messages from the channelsprivate void disableDFV(int currentPosition, SelectableChannel<? extends T> channel)
currentPosition
- The position to markchannel
- The channel being considered