395bcefdd466316b6f4f40856b5fb71efb381e52
[IRC.git] / Robust / src / Analysis / MLP / SESEEffectsSet.java
1 package Analysis.MLP;
2
3 import java.io.StringWriter;
4 import java.util.HashSet;
5 import java.util.Hashtable;
6 import java.util.Iterator;
7 import java.util.Set;
8
9 import IR.Flat.TempDescriptor;
10
11 public class SESEEffectsSet {
12         private Hashtable<TempDescriptor, HashSet<SESEEffectsKey>> readTable;
13         private Hashtable<TempDescriptor, HashSet<SESEEffectsKey>> writeTable;
14
15         public SESEEffectsSet() {
16                 readTable = new Hashtable<TempDescriptor, HashSet<SESEEffectsKey>>();
17                 writeTable = new Hashtable<TempDescriptor, HashSet<SESEEffectsKey>>();
18         }
19
20         public void addReadingVar(TempDescriptor td, SESEEffectsKey access) {
21                 HashSet<SESEEffectsKey> aSet = readTable.get(td);
22                 if (aSet == null) {
23                         aSet = new HashSet<SESEEffectsKey>();
24                 }
25
26                 aSet.add(access);
27                 readTable.put(td, aSet);
28         }
29
30         public void addReadingEffectsSet(TempDescriptor td,
31                         HashSet<SESEEffectsKey> newSet) {
32
33                 if (newSet != null) {
34                         HashSet<SESEEffectsKey> aSet = readTable.get(td);
35                         if (aSet == null) {
36                                 aSet = new HashSet<SESEEffectsKey>();
37                         }
38                         aSet.addAll(newSet);
39                         readTable.put(td, aSet);
40                 }
41
42         }
43
44         public void addWritingEffectsSet(TempDescriptor td,
45                         HashSet<SESEEffectsKey> newSet) {
46
47                 if (newSet != null) {
48                         HashSet<SESEEffectsKey> aSet = writeTable.get(td);
49                         if (aSet == null) {
50                                 aSet = new HashSet<SESEEffectsKey>();
51                         }
52                         aSet.addAll(newSet);
53                         writeTable.put(td, aSet);
54                 }
55
56         }
57
58         public Hashtable<TempDescriptor, HashSet<SESEEffectsKey>> getReadTable() {
59                 return readTable;
60         }
61
62         public Hashtable<TempDescriptor, HashSet<SESEEffectsKey>> getWriteTable() {
63                 return writeTable;
64         }
65
66         public void addWritingVar(TempDescriptor td, SESEEffectsKey access) {
67                 HashSet<SESEEffectsKey> aSet = writeTable.get(td);
68                 if (aSet == null) {
69                         aSet = new HashSet<SESEEffectsKey>();
70                 }
71                 aSet.add(access);
72                 writeTable.put(td, aSet);
73         }
74
75         public Set<SESEEffectsKey> getReadingSet(TempDescriptor td) {
76                 return readTable.get(td);
77         }
78
79         public Set<SESEEffectsKey> getWritingSet(TempDescriptor td) {
80                 return writeTable.get(td);
81         }
82
83         public String printSet() {
84                 
85                 StringWriter writer=new StringWriter();
86
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);
92                         String keyStr = "{";
93                         if (effectSet != null) {
94                                 Iterator<SESEEffectsKey> effectIter = effectSet.iterator();
95                                 while (effectIter.hasNext()) {
96                                         SESEEffectsKey key = effectIter.next();
97                                         keyStr += " " + key;
98                                 }
99                         } 
100                         keyStr+=" }";
101                         writer.write("Live-in Var " + td + " Read=" + keyStr+"\n");
102                 }
103
104                 keySet = writeTable.keySet();
105                 iter = keySet.iterator();
106                 while (iter.hasNext()) {
107                         TempDescriptor td = iter.next();
108                         Set<SESEEffectsKey> effectSet = writeTable.get(td);
109                         String keyStr = "{";
110                         if (effectSet != null) {
111                                 Iterator<SESEEffectsKey> effectIter = effectSet.iterator();
112                                 while (effectIter.hasNext()) {
113                                         SESEEffectsKey key = effectIter.next();
114                                         keyStr += " " + key;
115                                 }
116                         } 
117                         keyStr+=" }";
118                         writer.write("Live-in Var " + td + " Write=" + keyStr+"\n");
119                 }
120                 
121                 return writer.toString();
122
123         }
124
125         public boolean equals(Object o) {
126                 if (o == null) {
127                         return false;
128                 }
129
130                 if (!(o instanceof SESEEffectsSet)) {
131                         return false;
132                 }
133
134                 SESEEffectsSet in = (SESEEffectsSet) o;
135
136                 if (getReadTable().equals(in.getReadTable())
137                                 && getWriteTable().equals(in.getWriteTable())) {
138                         return true;
139                 } else {
140                         return false;
141                 }
142
143         }
144
145         public int hashCode() {
146                 int hash = 1;
147
148                 hash += getReadTable().hashCode() + getWriteTable().hashCode() * 31;
149
150                 return hash;
151         }
152 }