checking in beginnings of tag state analysis
[IRC.git] / Robust / src / Analysis / TaskStateAnalysis / TagState.java
1 package Analysis.TaskStateAnalysis;
2 import Analysis.TaskStateAnalysis.*;
3 import IR.*;
4 import IR.Flat.*;
5 import java.util.*;
6 import Util.GraphNode;
7
8
9 public class TagState extends GraphNode {
10     private TagDescriptor tag;
11     private Hashtable<FlagState, Integer> flags;
12     public static final int KLIMIT=2;
13
14     public TagState() {
15         this(null);
16     }
17
18     public TagState(TagDescriptor tag) {
19         this.tag=tag;
20         this.flags=new Hashtable<FlagState, Integer>();
21     }
22
23     public TagDescriptor getTag() {
24         return tag;
25     }
26
27     public TagState[] addnewFS(FlagState fs) {
28         int num=0;
29         if (flags.containsKey(fs))
30             num=flags.get(fs).intValue();
31         if (num<KLIMIT)
32             num++;
33
34         TagState ts=new TagState(tag);
35         ts.flags.putAll(flags);
36         ts.flags.put(fs, new Integer(num));
37         return new TagState[] {ts};
38     }
39
40     public TagState[] addFS(FlagState fs) {
41         int num=0;
42         if (flags.containsKey(fs))
43             num=flags.get(fs).intValue();
44         if (num<KLIMIT)
45             num++;
46         
47         TagState ts=new TagState(tag);
48         ts.flags.putAll(flags);
49         ts.flags.put(fs, new Integer(num));
50         if (num==1)
51             return new TagState[] {ts};
52         else
53             return new TagState[] {this, ts};
54     }
55
56     public boolean containsFS(FlagState fs) {
57         return flags.containsKey(fs);
58     }
59
60     public Set<FlagState> getFS() {
61         return flags.keySet();
62     }
63
64     public int hashCode() {
65         int hashcode=flags.hashCode();
66         if (tag!=null)
67             hashcode^=tag.hashCode();
68         return hashcode;
69     }
70   
71     public boolean equals(Object o) {
72         if (o instanceof TagState) {
73             TagState t=(TagState)o;
74             if ((tag==null&&t.tag==null)||
75                 (tag!=null&&t.tag!=null&&tag.equals(t.tag))) {
76                 return flags.equals(t.flags);
77             }
78         }
79         return false;
80     }
81 }