3 import java.util.HashSet;
4 import java.util.Hashtable;
5 import java.util.Iterator;
7 import IR.Flat.TempDescriptor;
11 private Hashtable<TempDescriptor, HashSet<AccKey>> readTable;
12 private Hashtable<TempDescriptor, HashSet<AccKey>> writeTable;
16 readTable = new Hashtable<TempDescriptor, HashSet<AccKey>>();
17 writeTable = new Hashtable<TempDescriptor, HashSet<AccKey>>();
21 public void addReadingVar(TempDescriptor td, AccKey access) {
22 HashSet<AccKey> aSet = readTable.get(td);
24 aSet = new HashSet<AccKey>();
28 readTable.put(td, aSet);
31 public void addWritingVar(TempDescriptor td, AccKey access) {
33 HashSet<AccKey> aSet = writeTable.get(td);
35 aSet = new HashSet<AccKey>();
39 writeTable.put(td, aSet);
43 public boolean containsParam(TempDescriptor td) {
45 Iterator<TempDescriptor> iter = readTable.keySet().iterator();
47 while (iter.hasNext()) {
49 TempDescriptor key = iter.next();
60 public void addParam(TempDescriptor paramTD) {
62 if (!readTable.containsKey(paramTD)) {
63 HashSet<AccKey> readSet = new HashSet<AccKey>();
64 readTable.put(paramTD, readSet);
67 if (!writeTable.containsKey(paramTD)) {
68 HashSet<AccKey> writeSet = new HashSet<AccKey>();
69 writeTable.put(paramTD, writeSet);
74 public void addAll(AccSet newAccSet) {
76 Hashtable<TempDescriptor, HashSet<AccKey>> newReadTable = newAccSet
78 Hashtable<TempDescriptor, HashSet<AccKey>> newWriteTable = newAccSet
81 Iterator<TempDescriptor> iter = newReadTable.keySet().iterator();
82 while (iter.hasNext()) { // for each variables
83 TempDescriptor td = iter.next();
85 HashSet<AccKey> currentSet;
86 if (!readTable.containsKey(td)) {
87 currentSet = new HashSet<AccKey>();
89 currentSet = readTable.get(td);
92 HashSet<AccKey> newSet = newReadTable.get(td);
93 currentSet.addAll(newSet);
94 readTable.put(td, currentSet);
97 iter = newWriteTable.keySet().iterator();
98 while (iter.hasNext()) { // for each variables
99 TempDescriptor td = iter.next();
101 HashSet<AccKey> currentSet;
102 if (!writeTable.containsKey(td)) {
103 currentSet = new HashSet<AccKey>();
105 currentSet = writeTable.get(td);
108 HashSet<AccKey> newSet = newWriteTable.get(td);
109 currentSet.addAll(newSet);
110 writeTable.put(td, currentSet);
115 public Hashtable<TempDescriptor, HashSet<AccKey>> getReadTable() {
119 public Hashtable<TempDescriptor, HashSet<AccKey>> getWriteTable() {
123 public boolean equals(Object o) {
128 if (!(o instanceof AccSet)) {
132 AccSet in = (AccSet) o;
134 if (getReadTable().equals(in.getReadTable())
135 && getWriteTable().equals(in.getWriteTable())) {
143 public void printSet() {
146 String writeStr = "";
148 readStr = "#Reading#\r\n";
149 Iterator<TempDescriptor> iter = getReadTable().keySet().iterator();
150 while (iter.hasNext()) { // for each variables
152 TempDescriptor td = iter.next();
153 HashSet<AccKey> aSet = readTable.get(td);
155 readStr += td.getSymbol() + ":" + "{";
157 Iterator<AccKey> setIter = aSet.iterator();
158 while (setIter.hasNext()) {
159 AccKey element = setIter.next();
160 readStr += " " + element;
165 writeStr = "#Writing#\r\n";
166 iter = getWriteTable().keySet().iterator();
167 while (iter.hasNext()) { // for each variables
169 TempDescriptor td = iter.next();
170 HashSet<AccKey> aSet = writeTable.get(td);
172 writeStr += td.getSymbol() + ":" + "{";
174 Iterator<AccKey> setIter = aSet.iterator();
175 while (setIter.hasNext()) {
176 AccKey element = setIter.next();
177 writeStr += " " + element;
182 System.out.println(readStr);
183 System.out.println(writeStr);
187 public String toString() {
191 Iterator<TempDescriptor> iter = getReadTable().keySet().iterator();
192 while (iter.hasNext()) { // for each variables
194 TempDescriptor td = iter.next();
196 str += "\tParameter " + td.getSymbol() + " reading={";
198 HashSet<AccKey> aSet = readTable.get(td);
199 Iterator<AccKey> setIter = aSet.iterator();
200 boolean first = true;
201 while (setIter.hasNext()) {
202 AccKey element = setIter.next();
204 str += " " + element;
207 str += " , " + element;
213 str += "\tParameter " + td.getSymbol() + " writing={";
215 aSet = writeTable.get(td);
216 setIter = aSet.iterator();
218 while (setIter.hasNext()) {
219 AccKey element = setIter.next();
221 str += " " + element;
224 str += " , " + element;