Create analysis model for string literals in disjointness analysis that supports...
[IRC.git] / Robust / src / Analysis / Disjoint / RefSrcNode.java
1 package Analysis.Disjoint;
2
3 import IR.*;
4 import IR.Flat.*;
5 import java.util.*;
6
7 public abstract class RefSrcNode {
8
9   protected HashSet<RefEdge> referencees;
10
11   public RefSrcNode() {
12     referencees = new HashSet<RefEdge>();
13   }
14
15
16   public Iterator<RefEdge> iteratorToReferencees() {
17     return referencees.iterator();
18   }
19
20   public Iterator<RefEdge> iteratorToReferenceesClone() {
21     HashSet<RefEdge> clone = (HashSet<RefEdge>)referencees.clone();
22     return clone.iterator();
23   }
24
25   public int getNumReferencees() {
26     return referencees.size();
27   }
28
29   public void addReferencee(RefEdge edge) {
30     assert edge != null;
31     referencees.add(edge);
32   }
33
34   public void removeReferencee(RefEdge edge) {
35     assert edge != null;
36     assert referencees.contains(edge);
37     referencees.remove(edge);
38   }
39
40   public RefEdge getReferenceTo(HeapRegionNode hrn,
41                                 TypeDescriptor type,
42                                 String field
43                                 ) {
44     assert hrn != null;
45
46     Iterator<RefEdge> itrEdge = referencees.iterator();
47     while( itrEdge.hasNext() ) {
48       RefEdge edge = itrEdge.next();
49       if( edge.getDst().equals(hrn) &&
50           edge.typeEquals(type)     &&
51           edge.fieldEquals(field)
52           ) {
53         return edge;
54       }
55     }
56
57     return null;
58   }
59 }