public class DominatorTree<N> extends java.lang.Object implements java.lang.Iterable<DominatorNode<N>>
Note: DominatorTree does not currently implement DirectedGraph since it provides 4 methods of navigating the nodes where the meaning of getPredsOf and getSuccsOf diverge from the usual meaning in a DirectedGraph implementation.
If you need a DirectedGraph implementation, see DominatorTreeAdapter.
Modifier and Type | Field and Description |
---|---|
protected DominatorsFinder<N> |
dominators |
protected java.util.Map<N,DominatorNode<N>> |
godeToDode
"gode" is a node in the original graph, "dode" is a node in the
dominator tree.
|
protected DirectedGraph<N> |
graph |
protected java.util.List<DominatorNode<N>> |
heads |
protected java.util.List<DominatorNode<N>> |
tails |
Constructor and Description |
---|
DominatorTree(DominatorsFinder dominators) |
Modifier and Type | Method and Description |
---|---|
protected void |
buildTree()
Add all the necessary links between nodes to form a meaningful
tree structure.
|
protected DominatorNode<N> |
fetchDode(N gode)
Convenience method, ensures we don't create more than one
DominatorNode for a given block.
|
protected DominatorNode<N> |
fetchParent(N gode) |
java.util.List<DominatorNode<N>> |
getChildrenOf(DominatorNode<N> node) |
DominatorNode<N> |
getDode(N gode) |
DirectedGraph<N> |
getGraph() |
DominatorNode<N> |
getHead()
Gets the first head of the dominator tree.
|
java.util.List<DominatorNode<N>> |
getHeads() |
DominatorNode<N> |
getParentOf(DominatorNode<N> node) |
java.util.List<DominatorNode<N>> |
getPredsOf(DominatorNode<N> node) |
java.util.List<DominatorNode<N>> |
getSuccsOf(DominatorNode<N> node) |
java.util.List<DominatorNode<N>> |
getTails() |
boolean |
isDominatorOf(DominatorNode<N> dom,
DominatorNode<N> node) |
boolean |
isImmediateDominatorOf(DominatorNode<N> idom,
DominatorNode<N> node) |
java.util.Iterator<DominatorNode<N>> |
iterator() |
int |
size() |
protected DominatorsFinder<N> dominators
protected DirectedGraph<N> graph
protected java.util.List<DominatorNode<N>> heads
protected java.util.List<DominatorNode<N>> tails
protected java.util.Map<N,DominatorNode<N>> godeToDode
public DominatorTree(DominatorsFinder dominators)
public DirectedGraph<N> getGraph()
public java.util.List<DominatorNode<N>> getHeads()
public DominatorNode<N> getHead()
public java.util.List<DominatorNode<N>> getTails()
public DominatorNode<N> getParentOf(DominatorNode<N> node)
node
in the tree, null if the node is at
the root.public java.util.List<DominatorNode<N>> getChildrenOf(DominatorNode<N> node)
public java.util.List<DominatorNode<N>> getPredsOf(DominatorNode<N> node)
node
in the original DirectedGraphpublic java.util.List<DominatorNode<N>> getSuccsOf(DominatorNode<N> node)
node
in the original DirectedGraphpublic boolean isImmediateDominatorOf(DominatorNode<N> idom, DominatorNode<N> node)
public boolean isDominatorOf(DominatorNode<N> dom, DominatorNode<N> node)
public DominatorNode<N> getDode(N gode)
public java.util.Iterator<DominatorNode<N>> iterator()
iterator
in interface java.lang.Iterable<DominatorNode<N>>
public int size()
protected void buildTree()
protected DominatorNode<N> fetchDode(N gode)
protected DominatorNode<N> fetchParent(N gode)