X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=Robust%2Fsrc%2FAnalysis%2FTaskStateAnalysis%2FTaskBinding.java;h=10bf1394c969d8a28c4a82f5f8fb50c1e01eec56;hb=bdc086e2ec7fcc674a604906627b52e16fba7eb3;hp=b3911b985a0f89700c332734e8c0b753f06fba3c;hpb=38714f53bb0794c075b74dfe7ec89a823a078bf0;p=IRC.git diff --git a/Robust/src/Analysis/TaskStateAnalysis/TaskBinding.java b/Robust/src/Analysis/TaskStateAnalysis/TaskBinding.java index b3911b98..10bf1394 100644 --- a/Robust/src/Analysis/TaskStateAnalysis/TaskBinding.java +++ b/Robust/src/Analysis/TaskStateAnalysis/TaskBinding.java @@ -5,118 +5,118 @@ import IR.Flat.*; import java.util.*; public class TaskBinding { - TaskQueueIterator tqi; - Vector decisions; - Hashtable temptotag; - ObjWrapper[] parameterbindings; - boolean increment; + TaskQueueIterator tqi; + Vector decisions; + Hashtable temptotag; + ObjWrapper[] parameterbindings; + boolean increment; - public TaskBinding(TaskQueueIterator tqi) { - this.tqi=tqi; - this.decisions=new Vector(); - int numobjs=tqi.ftsarray.length; - int numtags=tqi.tq.tags.size(); - this.parameterbindings=new ObjWrapper[numobjs]; - for(int i=0;i<(numtags+numobjs);i++) { - decisions.add(new Integer(0)); - } + public TaskBinding(TaskQueueIterator tqi) { + this.tqi=tqi; + this.decisions=new Vector(); + int numobjs=tqi.ftsarray.length; + int numtags=tqi.tq.tags.size(); + this.parameterbindings=new ObjWrapper[numobjs]; + for(int i=0; i<(numtags+numobjs); i++) { + decisions.add(new Integer(0)); } + } - public ObjWrapper getParameter(int i) { - return parameterbindings[i]; - } - - public TagWrapper getTag(TempDescriptor tmp) { - return temptotag.get(tmp); - } - - public void next() { - increment=true; + public ObjWrapper getParameter(int i) { + return parameterbindings[i]; + } + + public TagWrapper getTag(TempDescriptor tmp) { + return temptotag.get(tmp); + } + + public void next() { + increment=true; + } + + public boolean hasNext() { + Vector tagv=tqi.tq.tags; + int numtags=tagv.size(); + int numobjs=tqi.ftsarray.length; + int incrementlevel=numtags+numobjs; + if (increment) { + //actually do increment + incrementlevel--; + increment=false; } - public boolean hasNext() { - Vector tagv=tqi.tq.tags; - int numtags=tagv.size(); - int numobjs=tqi.ftsarray.length; - int incrementlevel=numtags+numobjs; - if (increment) { - //actually do increment - incrementlevel--; - increment=false; - } - - mainloop: - while(true) { - Hashtable> ttable=new Hashtable>(); - temptotag=new Hashtable(); - //build current state - for(int i=0;i<(numtags+numobjs);i++) { - TagState tag=null; - TagWrapper tw=null; - if (i>=numtags) { - int objindex=i-numtags; - tag=tqi.ftsarray[objindex].ts; - } else { - TempDescriptor tmp=tagv.get(i); - tag=tqi.getTS(tmp); - } - int index=decisions.get(i).intValue(); - int currentsize=ttable.get(tag).size(); - if (i==incrementlevel) { - if (index==currentsize) { - if (incrementlevel==0) - return false; - incrementlevel--; - continue mainloop; - } else { - index++; - decisions.set(i, new Integer(index)); - } - } else if (i>incrementlevel) { - index=0; - decisions.set(i, new Integer(index)); - } - if (index>currentsize) { - tw=new TagWrapper(tag); - if (!ttable.containsKey(tag)) { - ttable.put(tag, new Vector()); - } - ttable.get(tag).add(tw); - } else { - //use old instance - tw=ttable.get(tag).get(index); - } - if (i>=numtags) { - int objindex=i-numtags; - FlagTagState fts=tqi.ftsarray[objindex]; - ObjWrapper ow=new ObjWrapper(fts.fs); - Hashtable > ctable=new Hashtable>(); - ctable.put(tw.getState(), new HashSet()); - ctable.get(tw.getState()).add(tw); - ow.tags.add(tw); - TagExpressionList tel=tqi.tq.task.getTag(tqi.tq.task.getParameter(i)); - for(int j=0;j()); - ctable.get(twtmp.getState()).add(twtmp); - ow.tags.add(twtmp); - int tagcount=ctable.get(twtmp.ts).size(); - int fstagcount=fts.fs.getTagCount(twtmp.getState().getTag()); - if (fstagcount>=0&&(tagcount>fstagcount)) { - //Too many unique tags of this type bound to object wrapper - incrementlevel=i; - continue mainloop; - } - } - parameterbindings[objindex]=ow; - } else { - TempDescriptor tmp=tagv.get(i); - temptotag.put(tmp, tw); - } - } - return true; - } +mainloop: + while(true) { + Hashtable> ttable=new Hashtable>(); + temptotag=new Hashtable(); + //build current state + for(int i=0; i<(numtags+numobjs); i++) { + TagState tag=null; + TagWrapper tw=null; + if (i>=numtags) { + int objindex=i-numtags; + tag=tqi.ftsarray[objindex].ts; + } else { + TempDescriptor tmp=tagv.get(i); + tag=tqi.getTS(tmp); + } + int index=decisions.get(i).intValue(); + int currentsize=ttable.get(tag).size(); + if (i==incrementlevel) { + if (index==currentsize) { + if (incrementlevel==0) + return false; + incrementlevel--; + continue mainloop; + } else { + index++; + decisions.set(i, new Integer(index)); + } + } else if (i>incrementlevel) { + index=0; + decisions.set(i, new Integer(index)); + } + if (index>currentsize) { + tw=new TagWrapper(tag); + if (!ttable.containsKey(tag)) { + ttable.put(tag, new Vector()); + } + ttable.get(tag).add(tw); + } else { + //use old instance + tw=ttable.get(tag).get(index); + } + if (i>=numtags) { + int objindex=i-numtags; + FlagTagState fts=tqi.ftsarray[objindex]; + ObjWrapper ow=new ObjWrapper(fts.fs); + Hashtable > ctable=new Hashtable>(); + ctable.put(tw.getState(), new HashSet()); + ctable.get(tw.getState()).add(tw); + ow.tags.add(tw); + TagExpressionList tel=tqi.tq.task.getTag(tqi.tq.task.getParameter(i)); + for(int j=0; j()); + ctable.get(twtmp.getState()).add(twtmp); + ow.tags.add(twtmp); + int tagcount=ctable.get(twtmp.ts).size(); + int fstagcount=fts.fs.getTagCount(twtmp.getState().getTag()); + if (fstagcount>=0&&(tagcount>fstagcount)) { + //Too many unique tags of this type bound to object wrapper + incrementlevel=i; + continue mainloop; + } + } + parameterbindings[objindex]=ow; + } else { + TempDescriptor tmp=tagv.get(i); + temptotag.put(tmp, tw); + } + } + return true; } + } }