more changes
[IRC.git] / Robust / src / Analysis / Pointer / Graph.java
index a835e911351015bf4eaec6674ad48b945e32f2d4..0efc690f3c98bcd329129e3e48489d145d71de46 100644 (file)
@@ -9,19 +9,30 @@ public class Graph {
    * graph. */
 
   Graph parent;
-  HashMap<AllocNode, HashSet<Edge>> nodeMap;
-  HashMap<TempDescriptor, HashSet<Edge>> varMap;
-  HashMap<AllocNode, HashSet<Edge>> backMap;
-  HashSet<Edge> strongUpdateSet;
+  HashMap<AllocNode, MySet<Edge>> nodeMap;
+  HashMap<TempDescriptor, MySet<Edge>> varMap;
+  HashMap<AllocNode, MySet<Edge>> backMap;
+  MySet<Edge> strongUpdateSet;
+  MySet<Edge> reachEdge;
+  HashSet<AllocNode> reachNode;
+
+  /* Need this information for mapping in callee results */
+  HashSet<AllocNode> nodeAges;
+  HashMap<AllocNode, Boolean> oldNodes;
 
   public Graph(Graph parent) {
-    nodeMap=new HashMap<AllocNode, HashSet<Edge>>();
-    backMap=new HashMap<AllocNode, HashSet<Edge>>();
-    varMap=new HashMap<TempDescriptor, HashSet<Edge>>();
+    nodeMap=new HashMap<AllocNode, MySet<Edge>>();
+    varMap=new HashMap<TempDescriptor, MySet<Edge>>();
+    nodeAges=new HashSet<AllocNode>();
+    oldNodes=new HashMap<AllocNode, Boolean>();
     this.parent=parent;
   }
 
-  public HashSet<Edge> getEdges(TempDescriptor tmp) {
+  public boolean containsNode(AllocNode node) {
+    return nodeAges.contains(node)||parent!=null&&parent.nodeAges.contains(node);
+  }
+
+  public MySet<Edge> getEdges(TempDescriptor tmp) {
     if (varMap.containsKey(tmp))
       return varMap.get(tmp);
     else if (parent!=null&&parent.varMap.containsKey(tmp))
@@ -29,7 +40,7 @@ public class Graph {
     else return emptySet;
   }
 
-  public HashSet<Edge> getEdges(AllocNode node) {
+  public MySet<Edge> getEdges(AllocNode node) {
     if (nodeMap.containsKey(node))
       return nodeMap.get(node);
     else if (parent!=null&&parent.nodeMap.containsKey(node))
@@ -37,5 +48,5 @@ public class Graph {
     else return emptySet;
   }
 
-  public static HashSet<Edge> emptySet=new HashSet<Edge>();
+  public static MySet<Edge> emptySet=new MySet<Edge>();
 }
\ No newline at end of file