01: /*
02: * $Id: ParameterList.java,v 1.12 2002/09/16 08:05:03 jkl Exp $
03: *
04: * Copyright (c) 2002 Njet Communications Ltd. All Rights Reserved.
05: *
06: * Use is subject to license terms, as defined in
07: * Anvil Sofware License, Version 1.1. See LICENSE
08: * file, or http://njet.org/license-1.1.txt
09: */
10: package anvil.script;
11:
12: import anvil.core.Any;
13: import anvil.core.Array;
14: import java.util.Enumeration;
15:
16: /**
17: * class ParameterList
18: *
19: * @author: Jani Lehtimäki
20: */
21: public class ParameterList {
22:
23: protected Any[] _parameters;
24: protected int _size = 0;
25:
26: public ParameterList(int length) {
27: _parameters = new Any[length];
28: }
29:
30: protected void ensureSpace(int forSize) {
31: int length = _parameters.length;
32: int size = _size;
33: if (size + forSize > length) {
34: Any[] parameters = new Any[_size + forSize];
35: if (size > 0) {
36: System.arraycopy(_parameters, 0, parameters, 0, size);
37: }
38: _parameters = parameters;
39: }
40: }
41:
42: public ParameterList add(Any value) {
43: ensureSpace(1);
44: _parameters[_size++] = value;
45: return this ;
46: }
47:
48: public ParameterList splice(Any value) {
49: int length;
50: switch (value.typeOf()) {
51: case Any.IS_ARRAY: {
52: Array array = value.toArray();
53: ensureSpace(array.sizeOf());
54: Enumeration e = array.elements();
55: while (e.hasMoreElements()) {
56: add((Any) e.nextElement());
57: }
58: }
59: break;
60:
61: case Any.IS_TUPLE:
62: case Any.IS_LIST:
63: length = value.sizeOf();
64: ensureSpace(length);
65: Any[] list = value.toTuple();
66: System.arraycopy(list, 0, _parameters, _size, length);
67: _size += length;
68: break;
69:
70: case Any.IS_STRING:
71: add(value);
72: break;
73:
74: default: {
75: Enumeration e = value.enumeration();
76: while (e.hasMoreElements()) {
77: add(Any.create(e.nextElement()));
78: }
79: }
80: }
81: return this ;
82: }
83:
84: public Any[] toArray() {
85: int length = _parameters.length;
86: int size = _size;
87: if (size == length) {
88: return _parameters;
89: } else {
90: Any[] parameters = new Any[size];
91: System.arraycopy(_parameters, 0, parameters, 0, size);
92: return parameters;
93: }
94: }
95:
96: }
|