52384828de15df06bbe46a614b647041a1675a73
[IRC.git] / Robust / src / Analysis / SSJava / NodeTupleSet.java
1 package Analysis.SSJava;
2
3 import java.util.ArrayList;
4 import java.util.HashSet;
5 import java.util.Iterator;
6 import java.util.List;
7 import java.util.Set;
8
9 import IR.Descriptor;
10
11 public class NodeTupleSet {
12
13   private ArrayList<NTuple<Descriptor>> list;
14
15   private ArrayList<NTuple<Location>> globalLocTupleList;
16
17   private NTuple<Descriptor> baseDescTuple;
18
19   public NodeTupleSet() {
20     list = new ArrayList<NTuple<Descriptor>>();
21     globalLocTupleList = new ArrayList<NTuple<Location>>();
22   }
23
24   public void addTuple(NTuple<Descriptor> tuple) {
25
26     for (Iterator iterator = list.iterator(); iterator.hasNext();) {
27       NTuple<Descriptor> t = (NTuple<Descriptor>) iterator.next();
28       if (t.equals(tuple)) {
29         return;
30       }
31     }
32
33     list.add(tuple);
34   }
35
36   public void setMethodInvokeBaseDescTuple(NTuple<Descriptor> in) {
37     baseDescTuple = in;
38   }
39
40   public NTuple<Descriptor> getBaseDesc() {
41     return baseDescTuple;
42   }
43
44   public void addGlobalFlowTuple(NTuple<Location> tuple) {
45     System.out.println("-----add global value flow tuple=" + tuple);
46     globalLocTupleList.add(tuple);
47   }
48
49   public void addGlobalFlowTupleSet(ArrayList<NTuple<Location>> in) {
50     System.out.println("-----add global value flow in=" + in);
51     globalLocTupleList.addAll(in);
52   }
53
54   public Iterator<NTuple<Location>> globalIterator() {
55     return globalLocTupleList.iterator();
56   }
57
58   public void removeTuple(NTuple<Descriptor> tuple) {
59     list.remove(tuple);
60   }
61
62   public Iterator<NTuple<Descriptor>> iterator() {
63     return list.iterator();
64   }
65
66   public String toString() {
67     String str = list.toString();
68
69     if (globalLocTupleList.size() > 0) {
70       str += " GlobalFlow=" + globalLocTupleList.toString();
71     }
72
73     return str;
74   }
75
76   public Set<NTuple<Descriptor>> getSet() {
77     Set<NTuple<Descriptor>> set = new HashSet<NTuple<Descriptor>>();
78     set.addAll(list);
79     return set;
80   }
81
82   public void addTupleSet(NodeTupleSet in) {
83     if (in != null) {
84       for (Iterator iterator = in.iterator(); iterator.hasNext();) {
85         NTuple<Descriptor> inTuple = (NTuple<Descriptor>) iterator.next();
86         addTuple(inTuple);
87       }
88     }
89   }
90
91   public int size() {
92     return list.size();
93   }
94
95   public void clear() {
96     list.clear();
97   }
98
99   public int globalLocTupleSize() {
100     return globalLocTupleList.size();
101   }
102
103   private void setGlobalLocTupleList(ArrayList<NTuple<Location>> in) {
104     globalLocTupleList = in;
105   }
106
107   public ArrayList<NTuple<Location>> getGlobalLocTupleSet() {
108     return globalLocTupleList;
109   }
110
111   private void setDescTupleList(ArrayList<NTuple<Descriptor>> in) {
112     list = in;
113   }
114
115   public NodeTupleSet clone() {
116     NodeTupleSet set = new NodeTupleSet();
117     set.setDescTupleList((ArrayList<NTuple<Descriptor>>) list.clone());
118     set.setGlobalLocTupleList((ArrayList<NTuple<Location>>) globalLocTupleList.clone());
119     return set;
120   }
121 }