import java.util.Hashtable;
import java.util.Vector;
import Jakarta.util.FixDosOutputStream;
import java.io.*;
// SmContainer is an unusual container in that it is highly integrated
// with sdInfo objects. There is a pair of SmContainers per sdInfo
// object -- one for states, another for transitions. The thing that is
// unusual is that SmContainers allow you to reference any object
// (state or transition) in that SM declaration, and any object (state or
// transition) in the parent SM declarations in an inheritance hierarchy.
// all the code for SmContainer largely deals with hiding the fact
// that we are forming the union of a set of lower-level containers
// (implemented as PrintableVectors) and doing so in a seamless way.
class SmContainer implements Serializable {
sdInfo Smlocal;
boolean contains_states;
public PrintableVector v;
public SmContainer( sdInfo loc, boolean has_states ) {
Smlocal = loc;
contains_states = has_states;
v = new PrintableVector();
}
public SmIterator iterator() {
return new SmIterator( Smlocal, contains_states );
}
public Object find( Object j ) {
Object o;
SmIterator i = this.iterator();
for ( o = i.firstObj();
o != null;
o = i.nextObj() )
if ( o.equals( j ) )
return o;
return null;
}
public void print() {
SmIterator i = this.iterator();
for ( Object o = i.firstObj(); o != null; o = i.nextObj() )
( ( printTruncObject ) o ).print();
}
// add object to container
public boolean add( Object o ) {
return v.add( o );
}
// truncate all objects in the container
public void truncate() {
SmIterator ii = iterator();
printTruncObject e;
for ( e = ( printTruncObject ) ii.firstObj();
e != null;
e = ( printTruncObject ) ii.nextObj() )
e.truncate();
}
}