1 package Analysis.TaskStateAnalysis;
7 public class TaskQueueIterator {
11 FlagTagState ftsarray[];
12 Hashtable<TempDescriptor, TagState> tsarray;
13 Hashtable<TempDescriptor, Integer> tsindexarray;
14 Iterator<FlagTagState> itarray[];
18 public TaskQueueIterator(TaskQueue tq, int index, FlagTagState fts) {
22 this.ftsarray=new FlagTagState[tq.numParameters()];
23 this.ftsarray[index]=fts;
24 this.tsarray=new Hashtable<TempDescriptor, TagState>();
25 this.tsindexarray=new Hashtable<TempDescriptor, Integer>();
26 this.itarray=(Iterator<FlagTagState>[]) new Iterator[tq.numParameters()];
33 for(int i=ftsarray.length-1;i>=0;i--) {
35 itarray[i]=tq.parameterset[i].iterator();
36 VarDescriptor vd=tq.task.getParameter(i);
37 TagExpressionList tel=tq.task.getTag(vd);
39 for(int j=0;j<tel.numTags();j++) {
40 TempDescriptor tmp=tel.getTemp(j);
41 if (!tsindexarray.containsKey(tmp)) {
42 tsindexarray.put(tmp, new Integer(i));
48 public boolean hasNext() {
49 TaskDescriptor td=tq.task;
54 ftsarray[i]=itarray[i].next();
60 for(;i<ftsarray.length;i++) {
61 FlagState currfs=ftsarray[i].fs;
62 VarDescriptor vd=td.getParameter(i);
63 TagExpressionList tel=td.getTag(vd);
66 j=(tel!=null)&&tel.numTags()>0?tel.numTags()-1:0;
71 for(;tel!=null&&j<tel.numTags();j++) {
72 TempDescriptor tmp=tel.getTemp(j);
73 TagState currtag=tsarray.get(tmp);
74 String type=tel.getType(j);
76 if (tsindexarray.get(tmp).intValue()==i) {
77 //doing the assignment right here!!!
78 Vector<FlagTagState> possts=tq.map.get(currfs);
81 index=possts.indexOf(new FlagTagState(currtag,currfs));
86 for(int k=index;k<possts.size();k++) {
87 FlagTagState posstag=possts.get(k);
88 if (posstag.ts.getTag().getSymbol().equals(type)) {
89 tsarray.put(tmp, posstag.ts);
95 //Backtrack on objects
106 //couldn't find a tag
107 tsarray.put(tmp, null);
110 //check tag compatibility
111 if (!currtag.containsFS(currfs)) {
112 //incompatible tag set by previous level
113 //need to increment object state
123 if (itarray[i].hasNext()) {
124 ftsarray[i]=itarray[i].next();
127 continue objloop; //backtrack and fix up everything
129 itarray[i]=tq.parameterset[i].iterator();//keep going backwards
138 public FlagTagState getFTS(int index) {
139 return ftsarray[index];
142 public TagState getTS(TempDescriptor tmp) {
143 return tsarray.get(tmp);