/*
* $Id: ParameterList.java,v 1.12 2002/09/16 08:05:03 jkl Exp $
*
* Copyright (c) 2002 Njet Communications Ltd. All Rights Reserved.
*
* Use is subject to license terms, as defined in
* Anvil Sofware License, Version 1.1. See LICENSE
* file, or http://njet.org/license-1.1.txt
*/
package anvil.script;
import anvil.core.Any;
import anvil.core.Array;
import java.util.Enumeration;
/**
* class ParameterList
*
* @author: Jani Lehtim�ki
*/
public class ParameterList
{
protected Any[] _parameters;
protected int _size = 0;
public ParameterList(int length)
{
_parameters = new Any[length];
}
protected void ensureSpace(int forSize)
{
int length = _parameters.length;
int size = _size;
if (size + forSize > length) {
Any[] parameters = new Any[_size + forSize];
if (size > 0) {
System.arraycopy(_parameters, 0, parameters, 0, size);
}
_parameters = parameters;
}
}
public ParameterList add(Any value)
{
ensureSpace(1);
_parameters[_size++] = value;
return this;
}
public ParameterList splice(Any value)
{
int length;
switch(value.typeOf()) {
case Any.IS_ARRAY:
{
Array array = value.toArray();
ensureSpace(array.sizeOf());
Enumeration e = array.elements();
while(e.hasMoreElements()) {
add((Any)e.nextElement());
}
}
break;
case Any.IS_TUPLE:
case Any.IS_LIST:
length = value.sizeOf();
ensureSpace(length);
Any[] list = value.toTuple();
System.arraycopy(list, 0, _parameters, _size, length);
_size += length;
break;
case Any.IS_STRING:
add(value);
break;
default:
{
Enumeration e = value.enumeration();
while(e.hasMoreElements()) {
add(Any.create(e.nextElement()));
}
}
}
return this;
}
public Any[] toArray()
{
int length = _parameters.length;
int size = _size;
if (size == length) {
return _parameters;
} else {
Any[] parameters = new Any[size];
System.arraycopy(_parameters, 0, parameters, 0, size);
return parameters;
}
}
}