return mapLocationToInferCompositeLocation;
}
+ public boolean contains(NTuple<Location> locTuple) {
+ return mapLocTupleToNode.containsKey(locTuple);
+ }
+
public GlobalFlowNode getFlowNode(NTuple<Location> locTuple) {
if (!mapLocTupleToNode.containsKey(locTuple)) {
GlobalFlowNode node = createNewGlobalFlowNode(locTuple);
}
private GlobalFlowNode createNewGlobalFlowNode(NTuple<Location> locTuple) {
+ if (locTuple.size() == 0) {
+ throw new Error();
+ }
GlobalFlowNode node = new GlobalFlowNode(locTuple);
return node;
}
+ public boolean contrainsInferCompositeLocationMapKey(Location loc) {
+ return mapLocationToInferCompositeLocation.containsKey(loc);
+ }
+
public void addMapLocationToInferCompositeLocation(Location loc, CompositeLocation newCompLoc) {
if (mapLocationToInferCompositeLocation.containsKey(loc)) {
// need to do a sanity check
return mapLocationToInferCompositeLocation.get(loc);
}
+ public boolean hasValueFlowEdge(NTuple<Location> fromLocTuple, NTuple<Location> toLocTuple) {
+
+ // return true if the graph already has a flow edge
+
+ if (!mapLocTupleToNode.containsKey(fromLocTuple) || !mapLocTupleToNode.containsKey(toLocTuple)) {
+ return false;
+ }
+
+ GlobalFlowNode fromNode = getFlowNode(fromLocTuple);
+ GlobalFlowNode toNode = getFlowNode(toLocTuple);
+
+ if (!mapFlowNodeToOutNodeSet.containsKey(fromNode)
+ || !mapFlowNodeToInNodeSet.containsKey(toNode)) {
+ return false;
+ }
+
+ if (mapFlowNodeToOutNodeSet.get(fromNode).contains(toNode)
+ && mapFlowNodeToInNodeSet.get(toNode).contains(fromNode)) {
+ return true;
+ }
+
+ return false;
+ }
+
public void addValueFlowEdge(NTuple<Location> fromLocTuple, NTuple<Location> toLocTuple) {
Location lastElementfromLocTuple = fromLocTuple.get(fromLocTuple.size() - 1);
for (Iterator iterator2 = outNodeSet.iterator(); iterator2.hasNext();) {
GlobalFlowNode outNode = (GlobalFlowNode) iterator2.next();
-
if (outNode.getLocTuple().startsWith(prefix)) {
incomingNodeSet.add(curNode);
recurIncomingNodeSetByPrefix(prefix, curNode, incomingNodeSet);