mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-23 22:52:11 +02:00
- added methods to get all nodes from cfg
This commit is contained in:
parent
e1b6394c31
commit
506daf12cd
2 changed files with 55 additions and 2 deletions
|
@ -14,7 +14,9 @@ import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
import java.util.LinkedHashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.eclipse.cdt.codan.provisional.core.model.cfg.IBasicBlock;
|
import org.eclipse.cdt.codan.provisional.core.model.cfg.IBasicBlock;
|
||||||
import org.eclipse.cdt.codan.provisional.core.model.cfg.IConnectorNode;
|
import org.eclipse.cdt.codan.provisional.core.model.cfg.IConnectorNode;
|
||||||
import org.eclipse.cdt.codan.provisional.core.model.cfg.IControlFlowGraph;
|
import org.eclipse.cdt.codan.provisional.core.model.cfg.IControlFlowGraph;
|
||||||
|
@ -29,6 +31,7 @@ import org.eclipse.cdt.codan.provisional.core.model.cfg.IStartNode;
|
||||||
*/
|
*/
|
||||||
public class ControlFlowGraph implements IControlFlowGraph {
|
public class ControlFlowGraph implements IControlFlowGraph {
|
||||||
private List<IExitNode> exitNodes;
|
private List<IExitNode> exitNodes;
|
||||||
|
private List<IBasicBlock> deadNodes = new ArrayList<IBasicBlock>();
|
||||||
private IStartNode start;
|
private IStartNode start;
|
||||||
|
|
||||||
public ControlFlowGraph(IStartNode start, Collection<IExitNode> exitNodes) {
|
public ControlFlowGraph(IStartNode start, Collection<IExitNode> exitNodes) {
|
||||||
|
@ -67,8 +70,10 @@ public class ControlFlowGraph implements IControlFlowGraph {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void print(IBasicBlock node) {
|
public void print(IBasicBlock node) {
|
||||||
System.out.println(node.toString());
|
System.out.println(node.getClass().getSimpleName() + ": "
|
||||||
|
+ ((AbstractBasicBlock) node).toStringData());
|
||||||
if (node instanceof IConnectorNode)
|
if (node instanceof IConnectorNode)
|
||||||
|
if (((IConnectorNode) node).hasBackwardIncoming() == false)
|
||||||
return;
|
return;
|
||||||
if (node instanceof IDecisionNode) {
|
if (node instanceof IDecisionNode) {
|
||||||
// todo
|
// todo
|
||||||
|
@ -96,4 +101,47 @@ public class ControlFlowGraph implements IControlFlowGraph {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @seeorg.eclipse.cdt.codan.provisional.core.model.cfg.IControlFlowGraph#
|
||||||
|
* getUnconnectedNodeSize()
|
||||||
|
*/
|
||||||
|
public int getUnconnectedNodeSize() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see
|
||||||
|
* org.eclipse.cdt.codan.provisional.core.model.cfg.IControlFlowGraph#getNodes
|
||||||
|
* ()
|
||||||
|
*/
|
||||||
|
public Collection<IBasicBlock> getNodes() {
|
||||||
|
Collection<IBasicBlock> result = new LinkedHashSet<IBasicBlock>();
|
||||||
|
getNodes(getStartNode(), result);
|
||||||
|
for (Iterator iterator = deadNodes.iterator(); iterator.hasNext();) {
|
||||||
|
IBasicBlock d = (IBasicBlock) iterator.next();
|
||||||
|
getNodes(d, result);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param d
|
||||||
|
* @param result
|
||||||
|
*/
|
||||||
|
private void getNodes(IBasicBlock start, Collection<IBasicBlock> result) {
|
||||||
|
if (result.contains(start))
|
||||||
|
return;
|
||||||
|
result.add(start);
|
||||||
|
for (Iterator<IBasicBlock> outgoingIterator = start
|
||||||
|
.getOutgoingIterator(); outgoingIterator.hasNext();) {
|
||||||
|
IBasicBlock b = outgoingIterator.next();
|
||||||
|
getNodes(b, result);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.codan.provisional.core.model.cfg;
|
package org.eclipse.cdt.codan.provisional.core.model.cfg;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -27,4 +28,8 @@ public interface IControlFlowGraph {
|
||||||
int getExitNodeSize();
|
int getExitNodeSize();
|
||||||
|
|
||||||
Iterator<IBasicBlock> getUnconnectedNodeIterator();
|
Iterator<IBasicBlock> getUnconnectedNodeIterator();
|
||||||
|
|
||||||
|
int getUnconnectedNodeSize();
|
||||||
|
|
||||||
|
Collection<IBasicBlock> getNodes();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue