3 import java.io.StringWriter;
4 import java.util.HashSet;
5 import java.util.Hashtable;
6 import java.util.Iterator;
9 import IR.Flat.TempDescriptor;
11 public class SESEEffectsSet {
12 private Hashtable<TempDescriptor, HashSet<SESEEffectsKey>> readTable;
13 private Hashtable<TempDescriptor, HashSet<SESEEffectsKey>> writeTable;
15 public SESEEffectsSet() {
16 readTable = new Hashtable<TempDescriptor, HashSet<SESEEffectsKey>>();
17 writeTable = new Hashtable<TempDescriptor, HashSet<SESEEffectsKey>>();
20 public void addReadingVar(TempDescriptor td, SESEEffectsKey access) {
21 HashSet<SESEEffectsKey> aSet = readTable.get(td);
23 aSet = new HashSet<SESEEffectsKey>();
27 readTable.put(td, aSet);
30 public void addReadingEffectsSet(TempDescriptor td,
31 HashSet<SESEEffectsKey> newSet) {
34 HashSet<SESEEffectsKey> aSet = readTable.get(td);
36 aSet = new HashSet<SESEEffectsKey>();
39 readTable.put(td, aSet);
44 public void addWritingEffectsSet(TempDescriptor td,
45 HashSet<SESEEffectsKey> newSet) {
48 HashSet<SESEEffectsKey> aSet = writeTable.get(td);
50 aSet = new HashSet<SESEEffectsKey>();
53 writeTable.put(td, aSet);
58 public Hashtable<TempDescriptor, HashSet<SESEEffectsKey>> getReadTable() {
62 public Hashtable<TempDescriptor, HashSet<SESEEffectsKey>> getWriteTable() {
66 public void addWritingVar(TempDescriptor td, SESEEffectsKey access) {
67 HashSet<SESEEffectsKey> aSet = writeTable.get(td);
69 aSet = new HashSet<SESEEffectsKey>();
72 writeTable.put(td, aSet);
75 public Set<SESEEffectsKey> getReadingSet(TempDescriptor td) {
76 return readTable.get(td);
79 public Set<SESEEffectsKey> getWritingSet(TempDescriptor td) {
80 return writeTable.get(td);
83 public String printSet() {
85 StringWriter writer=new StringWriter();
87 Set<TempDescriptor> keySet = readTable.keySet();
88 Iterator<TempDescriptor> iter = keySet.iterator();
89 while (iter.hasNext()) {
90 TempDescriptor td = iter.next();
91 Set<SESEEffectsKey> effectSet = readTable.get(td);
93 if (effectSet != null) {
94 Iterator<SESEEffectsKey> effectIter = effectSet.iterator();
95 while (effectIter.hasNext()) {
96 SESEEffectsKey key = effectIter.next();
101 writer.write("Live-in Var " + td + " Read=" + keyStr+"\n");
104 keySet = writeTable.keySet();
105 iter = keySet.iterator();
106 while (iter.hasNext()) {
107 TempDescriptor td = iter.next();
108 Set<SESEEffectsKey> effectSet = writeTable.get(td);
110 if (effectSet != null) {
111 Iterator<SESEEffectsKey> effectIter = effectSet.iterator();
112 while (effectIter.hasNext()) {
113 SESEEffectsKey key = effectIter.next();
118 writer.write("Live-in Var " + td + " Write=" + keyStr+"\n");
121 return writer.toString();
125 public boolean equals(Object o) {
130 if (!(o instanceof SESEEffectsSet)) {
134 SESEEffectsSet in = (SESEEffectsSet) o;
136 if (getReadTable().equals(in.getReadTable())
137 && getWriteTable().equals(in.getWriteTable())) {
145 public int hashCode() {
148 hash += getReadTable().hashCode() + getWriteTable().hashCode() * 31;