import java.util.Hashtable;
import java.util.Vector;
import Jakarta.util.FixDosOutputStream;
import java.io.*;
class SmIterator {
boolean search_states;
sdInfo searchSm;
sdInfo startSm;
int searchPos;
SmContainer searchContainer;
public SmIterator( sdInfo sd, boolean search_states ) {
this.search_states = search_states;
searchSm = sd;
startSm = sd;
searchPos = 0;
searchContainer = null; // set in firstObject
}
// iteration idiom:
// SmContainer e;
// Object o;
// for (SmIterator i = e.iterator(), o = i.firstObj();
// o != null; o = i.nextObj()) { }
public Object firstObj() {
searchSm = startSm;
searchContainer = search_states ?
startSm.StateCont : startSm.TransCont;
searchPos = 0;
return resultObj();
}
public Object resultObj() {
while ( searchContainer != null &&
searchPos >= searchContainer.v.size() ) {
searchPos = 0;
searchSm = searchSm.getSuper();
if ( searchSm == null ) {
searchContainer = null;
break;
}
searchContainer = search_states ?
searchSm.StateCont : searchSm.TransCont;
}
if ( searchContainer == null )
return null;
return searchContainer.v.get( searchPos );
}
public Object nextObj() {
searchPos++;
return resultObj();
}
}