public class SequenceSchedule extends Schedule
Each element of the schedule is represented by an instance of the ScheduleElement class. Each element may correspond to a number of firings of a single actor (represented by the Firing class) or an entire sub-schedule (represented by a hierarchically contained instance of this class). This nesting allows this concise representation of looped schedules. The nesting can be arbitrarily deep, but must be a tree where the leaf nodes represent actor firings. It is up to the scheduler to enforce this requirement.
The add() and remove() methods are used to add or remove schedule elements. Only elements of type ScheduleElement (Schedule or Firing) may be added to the schedule list. Otherwise an exception will occur.
The iteration count is set by the setIterationCount() method. If this method is not invoked, a default value of one will be used.
As an example, suppose that we have an SDF graph containing actors A, B, C, and D, with the firing order ABCBCBCDD. This firing order can be represented by a simple looped schedule. The code to create this schedule appears below.
Schedule S = new Schedule(); Firing S1 = new Firing(); Schedule S2 = new Schedule(); Firing S3 = new Firing(); S.add(S1); S.add(S2); S.add(S3); S1.setActor(A); S2.setIterationCount(3); Firing S2_1 = new Firing(); Firing S2_2 = new Firing(); S2_1.setActor(B); S2_2.setActor(C); S2.add(S2_1); S2.add(S2_2); S3.setIterationCount(2); S3.setActor(D);
Note that this implementation is not synchronized. It is therefore not safe for a thread to make modifications to the schedule structure while multiple threads are concurrently accessing the schedule.
Firing
,
ScheduleElement
Modifier and Type | Field and Description |
---|---|
protected SequenceAttribute |
_currentControlSeqAttr
Keeps track of the last-executed control actor.
|
protected int |
_schedulePosition
Keeps track of our position in the list.
|
_parent
Constructor and Description |
---|
SequenceSchedule()
Construct a schedule with iteration count of one and an
empty schedule list.
|
SequenceSchedule(java.util.List<SequenceAttribute> independentList,
java.util.Hashtable<SequenceAttribute,java.util.Hashtable> controlTable,
java.util.Hashtable<SequenceAttribute,DirectedAcyclicGraph> sequencedActorsToSubgraph)
Instantiate a new schedule based on these data structures.
|
Modifier and Type | Method and Description |
---|---|
java.util.Iterator |
firingIterator()
Return the actor invocation sequence of this schedule in the form
of a sequence of firings.
|
java.util.List<SequenceAttribute> |
getUnexecutedList()
Return the list of unexecuted actor sequence numbers
that were not executed during the schedule because their branches were not taken.
|
actorIterator, add, add, get, iterator, remove, size, toString
_getVersion, _incrementVersion, getIterationCount, setIterationCount, setParent
protected int _schedulePosition
protected SequenceAttribute _currentControlSeqAttr
public SequenceSchedule()
public SequenceSchedule(java.util.List<SequenceAttribute> independentList, java.util.Hashtable<SequenceAttribute,java.util.Hashtable> controlTable, java.util.Hashtable<SequenceAttribute,DirectedAcyclicGraph> sequencedActorsToSubgraph)
independentList
- List of independent sequence attributes.
(and, associated actors, found by calling .getContainer
on a SequenceAttribute)
There must be at least one sequence attribute in the _independentList.controlTable
- A hash table mapping a sequence actor name
to a hash table of branches and a list of dependent actors (if
any) for each branch.sequencedActorsToSubgraph
- Hash table of sequenced actor
nodes to their subgraphs Used in conjunction with the control
graph for determining the schedule.public java.util.Iterator firingIterator()
A runtime exception is thrown if the underlying schedule structure is modified while the iterator is active.
Implementation note: This method is optimized to be memory efficient. It walks the schedule tree structure as the iterator methods are invoked.
firingIterator
in class Schedule
java.util.ConcurrentModificationException
- If the
underlying schedule structure is modified while the iterator
is active.public java.util.List<SequenceAttribute> getUnexecutedList()