helpful progress reporting
[IRC.git] / Robust / src / Analysis / OwnershipAnalysis / OwnershipNode.java
index 14adde19c74e8498acc5143fbddfd8b3e5a709b1..390813e3167eaab6a6bf3dfdd999e9d75b990fac 100644 (file)
@@ -4,49 +4,54 @@ import IR.*;
 import IR.Flat.*;
 import java.util.*;
 
-public abstract class OwnershipNode {   
+public abstract class OwnershipNode {
 
-    protected Hashtable <HeapRegionNode, ReferenceEdgeProperties> referencedRegions;
+  protected HashSet<ReferenceEdge> referencees;
 
-    public OwnershipNode() {
-       referencedRegions = 
-           new Hashtable<HeapRegionNode, ReferenceEdgeProperties>();
-    }
+  public OwnershipNode() {
+    referencees = new HashSet<ReferenceEdge>();
+  }
 
 
-    public Iterator setIteratorToReferencedRegions() {
-       Set s = referencedRegions.entrySet();
-       return s.iterator();
-    }
+  public Iterator<ReferenceEdge> iteratorToReferencees() {
+    return referencees.iterator();
+  }
 
-    public Iterator setIteratorToReferencedRegionsClone() {
-       Hashtable ht = (Hashtable) referencedRegions.clone();
-       Set s = ht.entrySet();
-       return s.iterator();
-    }
+  public Iterator<ReferenceEdge> iteratorToReferenceesClone() {
+    HashSet<ReferenceEdge> clone = (HashSet<ReferenceEdge>)referencees.clone();
+    return clone.iterator();
+  }
 
-    public void addReferencedRegion( HeapRegionNode hrn,
-                                    ReferenceEdgeProperties rep ) {
-       assert hrn != null;
-       assert rep != null;
+  public int getNumReferencees() {
+    return referencees.size();
+  }
 
-       referencedRegions.put( hrn, rep );
-    }
+  public void addReferencee(ReferenceEdge edge) {
+    assert edge != null;
 
-    public void removeReferencedRegion( HeapRegionNode hrn ) {
-       assert hrn != null;
-       assert referencedRegions.containsKey( hrn );
+    referencees.add(edge);
+  }
 
-       referencedRegions.remove( hrn );
-    }
+  public void removeReferencee(ReferenceEdge edge) {
+    assert edge != null;
+    assert referencees.contains(edge);
 
-    public ReferenceEdgeProperties getReferenceTo( HeapRegionNode hrn ) {
-       assert hrn != null;
+    referencees.remove(edge);
+  }
 
-       return referencedRegions.get( hrn );
-    }
+  public ReferenceEdge getReferenceTo(HeapRegionNode hrn,
+                                      FieldDescriptor fd) {
+    assert hrn != null;
 
+    Iterator<ReferenceEdge> itrEdge = referencees.iterator();
+    while( itrEdge.hasNext() ) {
+      ReferenceEdge edge = itrEdge.next();
+      if( edge.getDst().equals(hrn) &&
+          edge.getFieldDesc() == fd     ) {
+       return edge;
+      }
+    }
 
-    abstract public boolean equals( Object o );
-    abstract public int hashCode();
+    return null;
+  }
 }
\ No newline at end of file