Class AbstractAnalysis.Worklist
java.lang.Object
org.checkerframework.dataflow.analysis.AbstractAnalysis.Worklist
- Enclosing class:
- AbstractAnalysis<V extends AbstractValue<V>,
S extends Store<S>, T extends TransferFunction<V, S>>
A worklist is a priority queue of blocks in which the order is given by depth-first ordering to
place non-loop predecessors ahead of successors.
-
Nested Class Summary
Modifier and TypeClassDescriptionclass
Comparators to allow priority queue to order blocks by their depth-first order, using by backward analysis.class
Comparators to allow priority queue to order blocks by their depth-first order, using by forward analysis. -
Field Summary
Modifier and TypeFieldDescriptionprotected final IdentityHashMap<Block,
Integer> Map all blocks in the CFG to their depth-first order.protected final PriorityQueue<Block>
The backing priority queue.Contains the same elements asqueue
, for faster lookup. -
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
Add the given block toqueue
.boolean
Check ifqueue
contains the block which is passed as the argument.boolean
isEmpty()
poll()
SeePriorityQueue.poll()
.void
process
(ControlFlowGraph cfg) Process the control flow graph.toString()
-
Field Details
-
depthFirstOrder
Map all blocks in the CFG to their depth-first order. -
queue
The backing priority queue. -
queueSet
Contains the same elements asqueue
, for faster lookup.
-
-
Constructor Details
-
Worklist
Create a Worklist.- Parameters:
direction
- the direction (forward or backward)
-
-
Method Details
-
process
Process the control flow graph.This implementation sets the depth-first order for each block, by adding the blocks to
depthFirstOrder
.- Parameters:
cfg
- the control flow graph to process
-
isEmpty
- Returns:
- true if
queue
is empty else false - See Also:
-
contains
Check ifqueue
contains the block which is passed as the argument.- Parameters:
block
- the given block to check- Returns:
- true if
queue
contains the given block
-
add
Add the given block toqueue
. Adds unconditionally: does not check containment first.- Parameters:
block
- the block to add toqueue
-
poll
SeePriorityQueue.poll()
.- Returns:
- the head of
queue
- See Also:
-
toString
-