bug fixes
[IRC.git] / Robust / src / Analysis / OwnershipAnalysis / OwnershipNode.java
index 2895705a7681da26959c2087c604e3968eb32741..a216ca7a0655f627ca3eb85c77729fcdd46c2691 100644 (file)
@@ -4,48 +4,53 @@ import IR.*;
 import IR.Flat.*;
 import java.util.*;
 
-public class OwnershipNode {
+public class OwnershipNode {   
 
-    protected Integer id;
-    protected HashSet<OwnershipHeapRegionNode> reachableRegions;
-    protected HashSet<OwnershipNode>           referencers;
-
-    public OwnershipNode( Integer id ) {
-       this.id = id;
-       reachableRegions = new HashSet<OwnershipHeapRegionNode>();
-       referencers      = new HashSet<OwnershipNode>();
+    public OwnershipNode() {
+       referencedRegions = 
+           new Hashtable<HeapRegionNode, ReferenceEdgeProperties>();
     }
 
-    public Integer getID() {
-       return id;
-    }
 
-    public String getIDString() {
-       return id.toString();
-    }
+    ///////////////////////////////////////////
+    // interface with larger graph
+    ///////////////////////////////////////////
+    protected Hashtable
+       <HeapRegionNode, ReferenceEdgeProperties>
+       referencedRegions;
 
-    public Iterator iteratorToReachableRegions() {
-       return reachableRegions.iterator();
+    public Iterator setIteratorToReferencedRegions() {
+       Set s = referencedRegions.entrySet();
+       return s.iterator();
     }
 
-    public void addReachableRegion( OwnershipHeapRegionNode ohrn ) {
-       assert ohrn!=null;
-       reachableRegions.add( ohrn );
+    public Iterator setIteratorToReferencedRegionsClone() {
+       Hashtable ht = (Hashtable) referencedRegions.clone();
+       Set s = ht.entrySet();
+       return s.iterator();
     }
 
-    public void clearReachableRegions() {
-       reachableRegions.clear();
-    }
-    
-    public Iterator iteratorToReferencers() {
-       return referencers.iterator();
+    public void addReferencedRegion( HeapRegionNode hrn,
+                                    ReferenceEdgeProperties rep ) {
+       assert hrn != null;
+       assert rep != null;
+
+       referencedRegions.put( hrn, rep );
     }
 
-    public void addReferencer( OwnershipNode on ) {
-       referencers.add( on );
+    public void removeReferencedRegion( HeapRegionNode hrn ) {
+       assert hrn != null;
+       assert referencedRegions.containsKey( hrn );
+
+       referencedRegions.remove( hrn );
     }
 
-    public void clearReferencers() {
-       referencers.clear();
+    public ReferenceEdgeProperties getReferenceTo( HeapRegionNode hrn ) {
+       assert hrn != null;
+
+       return referencedRegions.get( hrn );
     }
+    ///////////////////////////////////////////////
+    // end interface with larger graph
+    ///////////////////////////////////////////////
 }
\ No newline at end of file