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);
38 for(int j=0;j<tel.numTags();j++) {
39 TempDescriptor tmp=tel.getTemp(j);
40 if (!tsindexarray.containsKey(tmp)) {
41 tsindexarray.put(tmp, new Integer(i));
47 public boolean hasNext() {
48 TaskDescriptor td=tq.task;
53 ftsarray[i]=itarray[i].next();
59 for(;i<ftsarray.length;i++) {
60 FlagState currfs=ftsarray[i].fs;
61 VarDescriptor vd=td.getParameter(i);
62 TagExpressionList tel=td.getTag(vd);
65 j=tel.numTags()>0?tel.numTags()-1:0;
70 for(;j<tel.numTags();j++) {
71 TempDescriptor tmp=tel.getTemp(j);
72 TagState currtag=tsarray.get(tmp);
73 String type=tel.getType(j);
75 if (tsindexarray.get(tmp).intValue()==i) {
76 //doing the assignment right here!!!
77 Vector<FlagTagState> possts=tq.map.get(currfs);
80 index=possts.indexOf(new FlagTagState(currtag,currfs));
85 for(int k=index;k<possts.size();k++) {
86 FlagTagState posstag=possts.get(k);
87 if (posstag.ts.getTag().getSymbol().equals(type)) {
88 tsarray.put(tmp, posstag.ts);
94 //Backtrack on objects
105 //couldn't find a tag
106 tsarray.put(tmp, null);
109 //check tag compatibility
110 if (!currtag.containsFS(currfs)) {
111 //incompatible tag set by previous level
112 //need to increment object state
122 if (itarray[i].hasNext()) {
123 ftsarray[i]=itarray[i].next();
126 continue objloop; //backtrack and fix up everything
128 itarray[i]=tq.parameterset[i].iterator();//keep going backwards
137 public FlagTagState getFTS(int index) {
138 return ftsarray[index];
141 public TagState getTS(TempDescriptor tmp) {
142 return tsarray.get(tmp);