clean up some of sivaji's code
[IRC.git] / Robust / src / Analysis / TaskStateAnalysis / FlagState.java
1 package Analysis.TaskStateAnalysis;
2 import Analysis.TaskStateAnalysis.*;
3 import IR.*;
4 import IR.Tree.*;
5 import IR.Flat.*;
6 import java.util.*;
7
8
9 public class FlagState {
10     Hashtable flagstate;
11     ClassDescriptor cd;
12
13     public FlagState(FlagDescriptor[] flags, ClassDescriptor cd) {
14         flagstate=new Hashtable(flags.length);
15         this.cd=cd;
16         for (int i=0; i < flags.length; i++) {
17             flagstate.put(flags[i],new Boolean(false));
18         }
19     }
20     
21     public FlagState(Hashtable flagstate, ClassDescriptor cd) {
22         this.flagstate = new Hashtable(flagstate);
23         this.cd=cd;
24     }
25
26     public Hashtable getStateTable() {
27         return  flagstate;
28     }
29
30     public void put(FlagDescriptor fd, Boolean status) {
31         flagstate.put(fd,status);
32     }
33
34     public boolean get(FlagDescriptor fd) {
35         if (! flagstate.containsKey(fd))
36             return false;
37         else
38             return ((Boolean)(flagstate.get(fd))).booleanValue();
39     }
40     
41     public String toString() {
42         StringBuffer sb = new StringBuffer(flagstate.size());
43         Enumeration e = flagstate.keys();
44         
45         while (e.hasMoreElements()) {
46             if (((Boolean)(flagstate.get((FlagDescriptor)e.nextElement()))).booleanValue())
47                 sb.append(1);
48             else
49                 sb.append(0);
50         }
51         return new String(sb);
52     }
53
54     public String toString(FlagDescriptor[] flags) {
55         StringBuffer sb = new StringBuffer(flagstate.size());
56         Enumeration e;
57
58         for(int i=0;i < flags.length; i++) {
59             e = flagstate.keys();
60
61             while (e.hasMoreElements()) {
62                 FlagDescriptor fdtemp=(FlagDescriptor)e.nextElement();
63                 if( flags[i] == fdtemp) {
64                     if (((Boolean)(flagstate.get(fdtemp))).booleanValue())
65                         sb.append(1);
66                     else
67                         sb.append(0);
68                 }
69             }
70         }
71         return new String(sb);
72     }
73
74     public Enumeration getFlags() {
75         return flagstate.keys();
76     }
77
78     public boolean equal(Object o) {
79         if (o instanceof FlagState) {
80             FlagState fs=(FlagState)o;
81             if (fs.cd!=cd)
82                 return false;
83
84             Enumeration en = fs.getFlags();
85             while(en.hasMoreElements()) {
86                 FlagDescriptor flag=(FlagDescriptor)en.nextElement();
87                 
88                 if (fs.get(flag) != get(flag))
89                     return false;
90             }
91             return true;
92         }
93         return false;
94     }
95
96     public int hashCode() {
97         return cd.hashCode()^flagstate.hashCode();
98     }
99 }