import Jakarta.util.*;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.net.URI;
import java.util.Hashtable;
import java.util.List;
import java.util.Stack;
import java.util.EmptyStackException;
import java.util.Vector;
/**
* ArgList: encapsulates a list of either Switch or PositionalArg objects.
*
* @layer<kernel>
*/
public class ArgList extends Vector {
// Constants used to constrain find(), first(), and next()
static public final int NO_LAYER = -1;
static public final Class NO_CLASS = null;
// Current filter values
int layerFilter = NO_LAYER;
Class classFilter = NO_CLASS;
// Acts as a cursor for current position.
int csrIndex;
private CommandLineArg locate( int start ) {
CommandLineArg arg;
for ( int i=start; i < elementCount; i++ ) {
arg = ( CommandLineArg ) elementData[i];
if ( ( layerFilter != NO_LAYER ) &&
( arg.layerID != layerFilter ) )
continue;
if ( ( classFilter != NO_CLASS ) &&
( arg.getClass() != classFilter ) )
continue;
csrIndex = i;
return ( arg );
}
return ( null );
}
//**************************************************
// Return first CommandLineArg with class and layerID possible filter
// criteria.
//**************************************************
public CommandLineArg first() {
return ( locate( 0 ) );
}
public CommandLineArg first( Class cls ) {
classFilter = cls;
return ( locate( 0 ) );
}
public CommandLineArg first( int _layer ) {
layerFilter = _layer;
return ( locate( 0 ) );
}
public CommandLineArg first( Class cls, int _layer ) {
classFilter = cls;
layerFilter = _layer;
return ( locate( 0 ) );
}
//**************************************************
// Return next CommandLineArg with class and layerID possible filter
// criteria.
//**************************************************
public CommandLineArg next() {
return ( locate( csrIndex+1 ) );
}
public CommandLineArg next( Class cls ) {
classFilter = cls;
return ( locate( csrIndex+1 ) );
}
public CommandLineArg next( int _layer ) {
layerFilter = _layer;
return ( locate( csrIndex+1 ) );
}
public CommandLineArg next( Class cls, int _layer ) {
classFilter = cls;
layerFilter = _layer;
return ( locate( csrIndex+1 ) );
}
//**************************************************
// Locate an argument by name with class and layerID possible
// filter criteria.
//**************************************************
public CommandLineArg find( String name ) {
CommandLineArg arg;
for ( arg = locate( 0 ); arg != null; arg = locate( csrIndex+1 ) ) {
if ( name.compareTo( arg.name ) == 0 )
return ( arg );
}
return ( null );
}
public CommandLineArg find( String name, Class cls ) {
classFilter = cls;
return ( find( name ) );
}
public CommandLineArg find( String name, int _layer ) {
layerFilter = _layer;
return ( find( name ) );
}
public CommandLineArg find( String name, Class cls, int _layer ) {
classFilter = cls;
layerFilter = _layer;
return ( find( name ) );
}
}