f005fff10fca4b9f6701e11909bfcae0c56df2e1
[IRC.git] / Robust / src / Analysis / OwnershipAnalysis / OwnershipNode.java
1 package Analysis.OwnershipAnalysis;
2
3 import IR.*;
4 import IR.Flat.*;
5 import java.util.*;
6
7 public abstract class OwnershipNode {   
8
9     protected HashSet<ReferenceEdge> referencees;
10
11     public OwnershipNode() {
12         referencees = new HashSet<ReferenceEdge>();
13     }
14
15
16     public Iterator<ReferenceEdge> iteratorToReferencees() {
17         return referencees.iterator();
18     }
19
20     public Iterator<ReferenceEdge> iteratorToReferenceesClone() {
21         HashSet<ReferenceEdge> clone = (HashSet<ReferenceEdge>) referencees.clone();
22         return clone.iterator();
23     }
24
25
26     public void addReferencee( ReferenceEdge edge ) {
27         assert edge != null;
28
29         referencees.add( edge );
30     }
31
32     public void removeReferencee( ReferenceEdge edge ) {
33         assert edge != null;
34         assert referencees.contains( edge );
35
36         referencees.remove( edge );
37     }
38
39     public ReferenceEdge getReferenceTo( HeapRegionNode  hrn,
40                                          FieldDescriptor fd ) {
41         assert hrn != null;
42
43         Iterator<ReferenceEdge> itrEdge = referencees.iterator();
44         while( itrEdge.hasNext() ) {
45             ReferenceEdge edge = itrEdge.next();
46             if( edge.getDst().equals( hrn ) &&
47                 edge.getFieldDesc() == fd     ) {
48                 return edge;
49             }
50         }
51
52         return null;
53     }
54 }