changing to new traversers/examiners
[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 }