1e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes/*
2e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more
3e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * contributor license agreements.  See the NOTICE file distributed with
4e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * this work for additional information regarding copyright ownership.
5e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0
6e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * (the "License"); you may not use this file except in compliance with
7e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * the License.  You may obtain a copy of the License at
8e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes *
9e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
10e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes *
11e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * Unless required by applicable law or agreed to in writing, software
12e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * distributed under the License is distributed on an "AS IS" BASIS,
13e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * See the License for the specific language governing permissions and
15e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * limitations under the License.
16e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes */
17e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
18e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughespackage tests.util;
19e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
20e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.util.Stack;
21e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
22e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes/**
23e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * A stack to store the parameters of a call, as well as the call stack.
24e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes *
25e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes */
26e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughespublic class CallVerificationStack extends Stack<Object> {
27e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
28e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/*
29e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * --------------------------------------------------------------------
30e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Class variables
31e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * --------------------------------------------------------------------
32e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
33e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
34e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	private static final long serialVersionUID = 1L;
35e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
36e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	// the singleton
37e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	private static final CallVerificationStack _instance = new CallVerificationStack();
38e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
39e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/*
40e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * --------------------------------------------------------------------
41e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Instance variables
42e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * --------------------------------------------------------------------
43e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
44e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
45e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	// the call stack, store StackTraceElement
46e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	private final Stack<StackTraceElement> callStack = new Stack<StackTraceElement>();
47e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
48e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/*
49e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * -------------------------------------------------------------------
50e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Constructors
51e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * -------------------------------------------------------------------
52e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
53e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
54e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/**
55e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Can't be instantiated.
56e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
57e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	private CallVerificationStack() {
58e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		// empty
59e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
60e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
61e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/*
62e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * -------------------------------------------------------------------
63e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Methods
64e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * -------------------------------------------------------------------
65e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
66e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
67e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/**
68e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Gets the singleton instance.
69e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *
70e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @return the singleton instance
71e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
72e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	public static CallVerificationStack getInstance() {
73e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		return _instance;
74e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
75e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
76e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/**
77e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Pushes the call stack.
78e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
79e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	private void pushCallStack() {
80e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		StackTraceElement[] eles = (new Throwable()).getStackTrace();
81e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		int i;
82e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		for (i = 1; i < eles.length; i++) {
83e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			if (!eles[i].getClassName().equals(this.getClass().getName())) {
84e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes				break;
85e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			}
86e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		}
87e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		this.callStack.push(eles[i]);
88e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
89e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
90e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/**
91e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Gets the "current" calling class name.
92e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *
93e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @return the "current" calling class name
94e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
95e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	public String getCurrentSourceClass() {
96e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		return this.callStack.peek().getClassName();
97e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
98e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
99e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/**
100e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Gets the "current" calling method name.
101e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *
102e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @return the "current" calling method name
103e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
104e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	public String getCurrentSourceMethod() {
105e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		return this.callStack.peek().getMethodName();
106e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
107e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
108e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/**
109e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Clear the parameter stack and the call stack.
110e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *
111e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
112e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	@Override
113e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes    public void clear() {
114e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		this.callStack.clear();
115e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		super.clear();
116e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
117e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
118e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	@Override
119e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes    public Object push(Object o) {
120e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		pushCallStack();
121e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		return super.push(o);
122e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
123e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
124e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/**
125e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Pushes a boolean onto the top of this stack.
126e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *
127e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @param val
128e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *            the value to push
129e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
130e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	public void push(boolean val) {
131e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		this.push(new BaseTypeWrapper(val));
132e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
133e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
134e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/**
135e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Pushes a char onto the top of this stack.
136e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *
137e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @param val
138e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *            the value to push
139e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
140e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	public void push(char val) {
141e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		this.push(new BaseTypeWrapper(val));
142e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
143e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
144e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/**
145e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Pushes a double onto the top of this stack.
146e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *
147e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @param val
148e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *            the value to push
149e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
150e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	public void push(double val) {
151e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		this.push(new BaseTypeWrapper(val));
152e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
153e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
154e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/**
155e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Pushes a float onto the top of this stack.
156e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *
157e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @param val
158e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *            the value to push
159e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
160e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	public void push(float val) {
161e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		this.push(new BaseTypeWrapper(val));
162e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
163e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
164e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/**
165e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Pushes an int onto the top of this stack.
166e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *
167e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @param val
168e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *            the value to push
169e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
170e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	public void push(int val) {
171e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		this.push(new BaseTypeWrapper(val));
172e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
173e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
174e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/**
175e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Pushes a long onto the top of this stack.
176e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *
177e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @param val
178e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *            the value to push
179e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
180e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	public void push(long val) {
181e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		this.push(new BaseTypeWrapper(val));
182e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
183e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
184e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/**
185e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Pushes a short onto the top of this stack.
186e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *
187e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @param val
188e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *            the value to push
189e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
190e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	public void push(short val) {
191e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		this.push(new BaseTypeWrapper(val));
192e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
193e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
194e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/**
195e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Pop an object.
196e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *
197e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @return the object
198e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
199e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	@Override
200e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes    public Object pop() {
201e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		this.callStack.pop();
202e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		return super.pop();
203e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
204e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
205e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/**
206e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Pop a boolean.
207e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *
208e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @return the value
209e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
210e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	public boolean popBoolean() {
211e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		BaseTypeWrapper wrapper = (BaseTypeWrapper) this.pop();
212e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		Boolean value = (Boolean) wrapper.getValue();
213e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		return value.booleanValue();
214e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
215e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
216e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/**
217e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Pop a char.
218e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *
219e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @return the value
220e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
221e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	public char popChar() {
222e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		BaseTypeWrapper wrapper = (BaseTypeWrapper) this.pop();
223e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		Character value = (Character) wrapper.getValue();
224e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		return value.charValue();
225e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
226e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
227e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/**
228e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Pop a double.
229e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *
230e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @return the value
231e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
232e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	public double popDouble() {
233e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		BaseTypeWrapper wrapper = (BaseTypeWrapper) this.pop();
234e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		Double value = (Double) wrapper.getValue();
235e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		return value.doubleValue();
236e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
237e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
238e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/**
239e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Pop a float.
240e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *
241e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @return the value
242e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
243e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	public float popFloat() {
244e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		BaseTypeWrapper wrapper = (BaseTypeWrapper) this.pop();
245e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		Float value = (Float) wrapper.getValue();
246e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		return value.floatValue();
247e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
248e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
249e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/**
250e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Pop a int.
251e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *
252e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @return the value
253e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
254e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	public int popInt() {
255e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		BaseTypeWrapper wrapper = (BaseTypeWrapper) this.pop();
256e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		Integer value = (Integer) wrapper.getValue();
257e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		return value.intValue();
258e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
259e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
260e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/**
261e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Pop a long.
262e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *
263e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @return the value
264e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
265e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	public long popLong() {
266e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		BaseTypeWrapper wrapper = (BaseTypeWrapper) this.pop();
267e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		Long value = (Long) wrapper.getValue();
268e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		return value.longValue();
269e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
270e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
271e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/**
272e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Pop a short.
273e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *
274e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @return the value
275e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
276e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	public short popShort() {
277e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		BaseTypeWrapper wrapper = (BaseTypeWrapper) this.pop();
278e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		Short value = (Short) wrapper.getValue();
279e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		return value.shortValue();
280e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
281e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
282e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/*
283e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Wrapper of base types.
284e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
285e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	class BaseTypeWrapper {
286e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
287e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		// the internal value
288e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		private Object value;
289e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
290e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		/*
291e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		 * Constructs a wrapper object for the base type <code> boolean </code> .
292e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		 */
293e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		public BaseTypeWrapper(boolean val) {
294e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			this.value = new Boolean(val);
295e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		}
296e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
297e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		/*
298e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		 * Constructs a wrapper object for the base type <code> c </code> .
299e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		 */
300e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		public BaseTypeWrapper(byte val) {
301e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			this.value = new Byte(val);
302e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		}
303e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
304e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		/*
305e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		 * Constructs a wrapper object for the base type <code> char </code> .
306e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		 */
307e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		public BaseTypeWrapper(char val) {
308e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			this.value = new Character(val);
309e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		}
310e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
311e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		/*
312e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		 * Constructs a wrapper object for the base type <code> double </code> .
313e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		 */
314e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		public BaseTypeWrapper(double val) {
315e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			this.value = new Double(val);
316e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		}
317e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
318e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		/*
319e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		 * Constructs a wrapper object for the base type <code> float </code> .
320e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		 */
321e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		public BaseTypeWrapper(float val) {
322e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			this.value = new Float(val);
323e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		}
324e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
325e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		/*
326e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		 * Constructs a wrapper object for the base type <code> int </code> .
327e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		 */
328e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		public BaseTypeWrapper(int val) {
329e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			this.value = new Integer(val);
330e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		}
331e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
332e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		/*
333e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		 * Constructs a wrapper object for the base type <code> long </code> .
334e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		 */
335e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		public BaseTypeWrapper(long val) {
336e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			this.value = new Long(val);
337e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		}
338e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
339e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		/*
340e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		 * Constructs a wrapper object for the base type <code> short </code> .
341e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		 */
342e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		public BaseTypeWrapper(short val) {
343e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			this.value = new Short(val);
344e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		}
345e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
346e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		/*
347e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		 * Gets the internal value.
348e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		 */
349e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		public Object getValue() {
350e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			return this.value;
351e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		}
352e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
353e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes}
354