8 public class VarSrcTokTable {
10 // the true set represents the set of (sese, variable, age)
11 // triples that are truly in the table
12 private HashSet<VariableSourceToken> trueSet;
14 // these hashtables provide an efficient retreival from the
15 // true set. Note that a particular triple from the quick
16 // look up must be checked against the true set--remove ops
17 // can cause the hashtables to be inconsistent to each other
18 private Hashtable< FlatSESEEnterNode, Set<VariableSourceToken> > sese2vst;
19 private Hashtable< TempDescriptor, Set<VariableSourceToken> > var2vst;
20 private Hashtable< SVKey, Set<VariableSourceToken> > sv2vst;
23 public VarSrcTokTable() {
24 trueSet = new HashSet<VariableSourceToken>();
26 sese2vst = new Hashtable< FlatSESEEnterNode, Set<VariableSourceToken> >();
27 var2vst = new Hashtable< TempDescriptor, Set<VariableSourceToken> >();
28 sv2vst = new Hashtable< SVKey, Set<VariableSourceToken> >();
32 public void add( VariableSourceToken vst ) {
35 Set<VariableSourceToken> s;
37 s = sese2vst.get( vst.getSESE() );
39 s = new HashSet<VariableSourceToken>();
42 sese2vst.put( vst.getSESE(), s );
44 s = var2vst.get( vst.getVar() );
46 s = new HashSet<VariableSourceToken>();
49 var2vst.put( vst.getVar(), s );
51 SVKey key = new SVKey( vst.getSESE(), vst.getVar() );
52 s = sv2vst.get( key );
54 s = new HashSet<VariableSourceToken>();
61 public Set<VariableSourceToken> get( FlatSESEEnterNode sese ) {
62 Set<VariableSourceToken> s = sese2vst.get( sese );
64 s = new HashSet<VariableSourceToken>();
65 sese2vst.put( sese, s );
67 s.retainAll( trueSet );
71 public Set<VariableSourceToken> get( TempDescriptor var ) {
72 Set<VariableSourceToken> s = var2vst.get( var );
74 s = new HashSet<VariableSourceToken>();
75 var2vst.put( var, s );
77 s.retainAll( trueSet );
81 public Set<VariableSourceToken> get( SVKey key ) {
82 Set<VariableSourceToken> s = sv2vst.get( key );
84 s = new HashSet<VariableSourceToken>();
87 s.retainAll( trueSet );
92 public void merge( VarSrcTokTable table ) {
93 trueSet.addAll( table.trueSet );
98 itr = sese2vst.entrySet().iterator();
99 while( itr.hasNext() ) {
100 Map.Entry me = (Map.Entry) itr.next();
101 FlatSESEEnterNode sese = (FlatSESEEnterNode) me.getKey();
102 Set<VariableSourceToken> s1 = (Set<VariableSourceToken>) me.getValue();
103 Set<VariableSourceToken> s2 = table.sese2vst.get( sese );
111 s = table.sese2vst.entrySet();
112 s.retainAll( sese2vst.entrySet() );
113 sese2vst.putAll( table.sese2vst );
115 itr = var2vst.entrySet().iterator();
116 while( itr.hasNext() ) {
117 Map.Entry me = (Map.Entry) itr.next();
118 TempDescriptor var = (TempDescriptor) me.getKey();
119 Set<VariableSourceToken> s1 = (Set<VariableSourceToken>) me.getValue();
120 Set<VariableSourceToken> s2 = table.var2vst.get( var );
128 s = table.var2vst.entrySet();
129 s.retainAll( var2vst.entrySet() );
130 var2vst.putAll( table.var2vst );
132 itr = sv2vst.entrySet().iterator();
133 while( itr.hasNext() ) {
134 Map.Entry me = (Map.Entry) itr.next();
135 SVKey key = (SVKey) me.getKey();
136 Set<VariableSourceToken> s1 = (Set<VariableSourceToken>) me.getValue();
137 Set<VariableSourceToken> s2 = table.sv2vst.get( key );
145 s = table.sv2vst.entrySet();
146 s.retainAll( sv2vst.entrySet() );
147 sv2vst.putAll( table.sv2vst );
151 public void remove( FlatSESEEnterNode sese ) {
152 Set<VariableSourceToken> s = sese2vst.get( sese );
157 trueSet.removeAll( s );
158 sese2vst.remove( sese );
161 public void remove( TempDescriptor var ) {
162 Set<VariableSourceToken> s = var2vst.get( var );
167 trueSet.removeAll( s );
168 var2vst.remove( var );
171 public void remove( FlatSESEEnterNode sese,
172 TempDescriptor var ) {
174 SVKey key = new SVKey( sese, var );
175 Set<VariableSourceToken> s = sv2vst.get( key );
180 trueSet.removeAll( s );
181 sv2vst .remove( key );
184 public void remove( VariableSourceToken vst ) {
185 trueSet.remove( vst );
188 public boolean equals( Object o ) {
193 if( !(o instanceof VarSrcTokTable) ) {
197 VarSrcTokTable table = (VarSrcTokTable) o;
198 return trueSet.equals( table.trueSet );
201 public int hashCode() {
202 return trueSet.hashCode();
205 public Iterator<VariableSourceToken> iterator() {
206 return trueSet.iterator();
209 public String toString() {
210 return trueSet.toString();