+ System.out.println("Inside CreatePossible runtime states");
+
+ ClassDescriptor cd = ts.getClassDescriptor();
+ FlagState fs= ts.getState();
+ if (Adj_List.containsKey(cd))
+ {
+ Adj_List_temp=(Hashtable)Adj_List.get(cd);
+ }
+ else
+ {
+ Adj_List_temp=new Hashtable();
+ Adj_List.put(cd,Adj_List_temp);
+ }
+
+ externs=((Integer)extern_flags.get(cd)).intValue();
+
+ FlagDescriptor[] fd=(FlagDescriptor[])flags.get(cd);
+
+ if (fd.length == externs)
+ onlyExterns=true;
+ else
+ onlyExterns=false;
+
+ Queue q_ret;
+
+ q_ret=new LinkedList();
+
+ if (onlyExterns)
+ {
+ // FlagDescriptor [] fd=(FlagDescriptor [])flags.get(cd);
+ // System.out.println("onlyExterns"+fd.length);
+ noOfIterations=(int)Math.pow(2.0,fd.length);
+ boolean BoolValTable[]=new boolean[fd.length];
+
+
+
+
+ for(int i=0; i < fd.length ; i++)
+ {
+ System.out.println(fd[i].getSymbol());
+ BoolValTable[i]=false;
+ }
+
+ if (! wasFlagStateProcessed(Adj_List_temp,fs))
+ {
+ TriggerState ts_local=new TriggerState(cd,fs);
+ if (!existsInQueue(ts_local))
+ {
+ q_ret.offer(ts_local);
+ }
+ //q_ret.offer(new TriggerState(cd,fs));
+ Adj_List_temp.put(fs,new Vector());
+ }
+
+ for(int k=1; k<noOfIterations; k++)
+ {
+ for(int j=0; j< fd.length ;j++)
+ {
+ if (k% (int)Math.pow(2.0,(double)j) == 0)
+ BoolValTable[j]=(!BoolValTable[j]);
+ }
+
+ FlagState fstemp=new FlagState(fs.getStateTable());
+ int i=0;
+ for(Enumeration e=fstemp.getStateTable().keys(); e.hasMoreElements() && i < fd.length;i++)
+ {
+ fstemp.put((FlagDescriptor)e.nextElement(),new Boolean(BoolValTable[i]));
+ }
+
+ if (wasFlagStateProcessed(Adj_List_temp,fstemp))
+ {
+ continue;
+ }
+ else
+ {
+ TriggerState ts_local=new TriggerState(cd,fstemp);
+ if (!existsInQueue(ts_local))
+ {
+ q_ret.offer(ts_local);
+ }
+
+
+ Adj_List_temp.put(fstemp,new Vector());
+ }
+
+ }
+
+ Enumeration e=Adj_List_temp.keys();
+ while(e.hasMoreElements())
+ {
+ FlagState fstemp=(FlagState)e.nextElement();
+ Enumeration en=Adj_List_temp.keys();
+ while (en.hasMoreElements())
+ {
+ FlagState fs_local=(FlagState)en.nextElement();
+ if(fstemp == fs_local)
+ {
+ continue;
+ }
+ else
+ {
+ ((Vector)Adj_List_temp.get(fstemp)).add(new Edge(fs_local,"Runtime"));
+ }
+ }
+ }
+
+ return q_ret;
+ }
+ else
+ {
+ System.out.println("inside else part");
+ noOfIterations=(int)Math.pow(2.0,externs);
+ boolean BoolValTable[]=new boolean[externs];
+ Hashtable Adj_List_local;
+
+
+ Adj_List_local=new Hashtable();
+
+ for(int i=0; i < externs ; i++)
+ {
+ System.out.println(fd[i].getSymbol());
+ BoolValTable[i]=fs.get(fd[i]);
+ }
+
+ if (! wasFlagStateProcessed(Adj_List_temp,fs))
+ {
+ //q_ret.offer(new TriggerState(cd,fs));
+ // Adj_List_local.put(fs, new Vector());
+ //Adj_List_temp.put(fs,new Vector());
+ }
+ for(int k=1; k<noOfIterations; k++)
+ {
+ for(int j=0; j< fd.length ;j++)
+ {
+ if (k% (int)Math.pow(2.0,(double)j) == 0)
+ BoolValTable[j]=(!BoolValTable[j]);
+ }
+
+ FlagState fstemp=new FlagState(fs.getStateTable());
+ FlagDescriptor fdtemp[]=(FlagDescriptor [])flags.get(cd);
+
+ for(int i=0; i < externs;i++)
+ {
+ fstemp.put(fdtemp[i],new Boolean(BoolValTable[i]));
+ }
+
+ q_ret.offer(new TriggerState(cd,fstemp));
+// ((Vector)(Adj_List_temp.get(fs))).add(new Edge(fstemp,"Runtime"));
+ // Adj_List_local.put(fstemp, new Vector());
+ //Adj_List_temp.put(fstemp,new Vector());
+
+ }
+ /* Enumeration e=Adj_List_local.keys();
+ while(e.hasMoreElements())
+ {
+ FlagState fstemp=(FlagState)e.nextElement();
+ Enumeration en=Adj_List_local.keys();
+ while (en.hasMoreElements())
+ {
+ FlagState fs_local=(FlagState)en.nextElement();
+ if(fstemp == fs_local)
+ {
+ continue;
+ }
+ else
+ {
+ ((Vector)Adj_List_local.get(fstemp)).add(new Edge(fs_local,"Runtime"));
+ }
+ }
+
+ }
+ Adj_List_temp.putAll(Adj_List_local);
+ */
+ return q_ret;
+
+ }
+}
+
+
+
+
+private Queue createPossibleRuntimeStates(ClassDescriptor cd,FlagState fs) throws java.io.IOException
+ {
+ int noOfIterations, externs;
+ Hashtable Adj_List_temp;
+ boolean onlyExterns;
+
+ System.out.println("Inside CreatePossible runtime states(flagstates)");
+
+ //ClassDescriptor cd = ts.getClassDescriptor();
+ //FlagState fs= ts.getState();
+ if (Adj_List.containsKey(cd))
+ {
+ Adj_List_temp=(Hashtable)Adj_List.get(cd);
+ }
+ else
+ {
+ Adj_List_temp=new Hashtable();
+ Adj_List.put(cd,Adj_List_temp);
+ }
+
+ externs=((Integer)extern_flags.get(cd)).intValue();
+
+ FlagDescriptor[] fd=(FlagDescriptor[])flags.get(cd);
+
+ if (fd.length == externs)
+ onlyExterns=true;
+ else
+ onlyExterns=false;
+
+ Queue q_ret;
+
+ q_ret=new LinkedList();
+
+ if (onlyExterns)
+ {
+ // FlagDescriptor [] fd=(FlagDescriptor [])flags.get(cd);
+ // System.out.println("onlyExterns"+fd.length);
+ noOfIterations=(int)Math.pow(2.0,fd.length);
+ boolean BoolValTable[]=new boolean[fd.length];
+
+
+
+
+ for(int i=0; i < fd.length ; i++)
+ {
+ System.out.println(fd[i].getSymbol());
+ BoolValTable[i]=false;
+ }
+
+ /*if (! wasFlagStateProcessed(Adj_List_temp,fs))
+ {
+ FlagState fs_local=new FlagState(fs.getStateTable());
+ if (!existsInQueue(ts_local))
+ {
+ q_ret.offer(ts_local);
+ }
+ //q_ret.offer(new TriggerState(cd,fs));
+ Adj_List_temp.put(fs,new Vector());
+ }
+
+ for(int k=1; k<noOfIterations; k++)
+ {
+ for(int j=0; j< fd.length ;j++)
+ {
+ if (k% (int)Math.pow(2.0,(double)j) == 0)
+ BoolValTable[j]=(!BoolValTable[j]);
+ }
+
+ FlagState fstemp=new FlagState(fs.getStateTable());
+ int i=0;
+ for(Enumeration e=fstemp.getStateTable().keys(); e.hasMoreElements() && i < fd.length;i++)
+ {
+ fstemp.put((FlagDescriptor)e.nextElement(),new Boolean(BoolValTable[i]));
+ }
+
+ if (wasFlagStateProcessed(Adj_List_temp,fstemp))
+ {
+ continue;
+ }
+ else
+ {
+ TriggerState ts_local=new TriggerState(cd,fstemp);
+ if (!existsInQueue(ts_local))
+ {
+ q_ret.offer(ts_local);
+ }
+
+
+ Adj_List_temp.put(fstemp,new Vector());
+ }
+
+ }
+
+ Enumeration e=Adj_List_temp.keys();
+ while(e.hasMoreElements())
+ {
+ FlagState fstemp=(FlagState)e.nextElement();
+ Enumeration en=Adj_List_temp.keys();
+ while (en.hasMoreElements())
+ {
+ FlagState fs_local=(FlagState)en.nextElement();
+ if(fstemp == fs_local)
+ {
+ continue;
+ }
+ else
+ {
+ ((Vector)Adj_List_temp.get(fstemp)).add(new Edge(fs_local,"Runtime"));
+ }
+ }
+ }*/
+
+ return q_ret;
+ }
+ else
+ {
+ System.out.println("inside else part(fs)");
+ noOfIterations=(int)Math.pow(2.0,externs);
+ boolean BoolValTable[]=new boolean[externs];
+ Hashtable Adj_List_local;
+
+
+ Adj_List_local=new Hashtable();
+
+ for(int i=0; i < externs ; i++)
+ {
+ System.out.println(fd[i].getSymbol());
+ BoolValTable[i]=fs.get(fd[i]);
+ }
+
+ if (! wasFlagStateProcessed(Adj_List_temp,fs))
+ {
+ //q_ret.offer(fs));
+ // Adj_List_local.put(fs, new Vector());
+ Adj_List_temp.put(fs,new Vector());
+ }
+ for(int k=1; k<noOfIterations; k++)
+ {
+ for(int j=0; j< fd.length ;j++)
+ {
+ if (k% (int)Math.pow(2.0,(double)j) == 0)
+ BoolValTable[j]=(!BoolValTable[j]);
+ }
+
+ FlagState fstemp=new FlagState(fs.getStateTable());
+ FlagDescriptor fdtemp[]=(FlagDescriptor [])flags.get(cd);
+
+ for(int i=0; i < externs;i++)
+ {
+ fstemp.put(fdtemp[i],new Boolean(BoolValTable[i]));
+ }
+
+ q_ret.offer(fstemp);
+ ((Vector)(Adj_List_temp.get(fs))).add(new Edge(fstemp,"Runtime"));
+ //Adj_List_local.put(fstemp, new Vector());
+ //Adj_List_temp.put(fstemp,new Vector());
+
+ }
+ /* Enumeration e=Adj_List_local.keys();
+ while(e.hasMoreElements())
+ {
+ FlagState fstemp=(FlagState)e.nextElement();
+ Enumeration en=Adj_List_local.keys();
+ while (en.hasMoreElements())
+ {
+ FlagState fs_local=(FlagState)en.nextElement();
+ if(fstemp == fs_local)
+ {
+ continue;
+ }
+ else
+ {
+ ((Vector)Adj_List_local.get(fstemp)).add(new Edge(fs_local,"Runtime"));
+ }
+ }
+
+ }
+ Adj_List_temp.putAll(Adj_List_local);
+ */
+ return q_ret;
+
+ }
+}
+
+
+/*private Queue createPossibleRuntimeStates(ClassDescriptor cd) throws java.io.IOException
+ {
+ int noOfIterations, externs;
+ Hashtable Adj_List_temp;
+
+ externs=((Integer)extern_flags.get(cd)).intValue();
+
+ FlagDescriptor[] fd=(FlagDescriptor[])flags.get(cd);
+ if (Adj_List.containsKey(cd))
+ {
+ Adj_List_temp=(Hashtable)Adj_List.get(cd);
+ }
+ else
+ {
+ Adj_List_temp=new Hashtable();
+ Adj_List.put(cd,Adj_List_temp);
+ }
+
+
+ Queue q_ret;
+
+ q_ret=new LinkedList();
+
+
+ // FlagDescriptor [] fd=(FlagDescriptor [])flags.get(cd);
+ // System.out.println("onlyExterns"+fd.length);
+ noOfIterations=(int)Math.pow(2.0,fd.length);
+ boolean BoolValTable[]=new boolean[fd.length];
+
+ for(int i=0; i < fd.length ; i++)
+ {
+ System.out.println(fd[i].getSymbol());
+ BoolValTable[i]=false;
+ }
+
+ if (! wasFlagStateProcessed(Adj_List_temp,fs))
+ {
+ TriggerState ts_local=new TriggerState(cd,fs);
+ if (!existsInQueue(ts_local))
+ {
+ q_ret.offer(ts_local);
+ }
+ Adj_List_temp.put(fs,new Vector());
+ }
+
+ for(int k=1; k<noOfIterations; k++)
+ {
+ for(int j=0; j< fd.length ;j++)
+ {
+ if (k% (int)Math.pow(2.0,(double)j) == 0)
+ BoolValTable[j]=(!BoolValTable[j]);
+ }
+
+ FlagState fstemp=new FlagState(fs.getStateTable());
+ int i=0;
+ for(Enumeration e=fstemp.getStateTable().keys(); e.hasMoreElements() && i < fd.length;i++)
+ {
+ fstemp.put((FlagDescriptor)e.nextElement(),new Boolean(BoolValTable[i]));
+ }
+
+ if (wasFlagStateProcessed(Adj_List_temp,fstemp))
+ {
+ continue;
+ }
+ else
+ {
+ TriggerState ts_local=new TriggerState(cd,fstemp);
+ if (!existsInQueue(ts_local))
+ {
+ q_ret.offer(ts_local);
+ }
+
+ Adj_List_temp.put(fstemp,new Vector());
+ }
+
+ }
+
+ Enumeration e=Adj_List_temp.keys();
+ while(e.hasMoreElements())
+ {
+ FlagState fstemp=(FlagState)e.nextElement();
+ Enumeration en=Adj_List_temp.keys();
+ while (en.hasMoreElements())
+ {
+ FlagState fs_local=(FlagState)en.nextElement();
+ if(fstemp == fs_local)
+ {
+ continue;
+ }
+ else
+ {
+ ((Vector)Adj_List_temp.get(fstemp)).add(new Edge(fs_local,"Runtime"));
+ }
+ }
+ }
+
+ return q_ret;
+
+ //createDOTfile(cd);
+
+