changes
[IRC.git] / Robust / src / Analysis / TaskStateAnalysis / TaskQueue.java
1 package Analysis.TaskStateAnalysis;
2 import IR.*;
3 import IR.Tree.*;
4 import IR.Flat.*;
5 import java.util.*;
6
7 public class TaskQueue {
8     protected TaskDescriptor task;
9     protected HashSet<FlagTagState> []parameterset;
10     protected Vector<TempDescriptor> tags;
11     protected Hashtable <FlagState, Vector<FlagTagState>> map;
12
13     public int numParameters() {
14         return parameterset.length;
15     }
16
17     public TaskDescriptor getTask() {
18         return task;
19     }
20
21     public TaskQueue(TaskDescriptor td) {
22         this.task=td;
23         this.parameterset=(HashSet<FlagTagState>[])new HashSet[task.numParameters()];
24         this.map=new Hashtable<FlagState, Vector<FlagTagState>>();
25         this.tags=new Vector<TempDescriptor>();
26         for(int i=0;i<task.numParameters();i++) {
27             this.parameterset[i]=new HashSet<FlagTagState>();
28             TagExpressionList tel=td.getTag(td.getParameter(i));
29             if (tel!=null)
30                 for(int j=0;j<tel.numTags();j++) {
31                     TempDescriptor tagtmp=tel.getTemp(j);
32                     if (!tags.contains(tagtmp))
33                         tags.add(tagtmp);
34                 }
35         }
36     }
37     
38     public TaskQueueIterator enqueue(int index, FlagTagState fts) {
39         parameterset[index].add(fts);
40         if (!map.containsKey(fts.fs)) {
41             map.put(fts.fs, new Vector<FlagTagState>());
42         }
43         map.get(fts.fs).add(fts);
44         return new TaskQueueIterator(this, index, fts);
45     }
46 }