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 Hughespublic class CallVerificationStack extends Stack<Object> {
26e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
278d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /*
288d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * --------------------------------------------------------------------
298d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * Class variables
308d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * --------------------------------------------------------------------
318d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      */
328d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
338d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    private static final long serialVersionUID = 1L;
348d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
358d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    // the singleton
368d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    private static final CallVerificationStack _instance = new CallVerificationStack();
378d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /*
398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * --------------------------------------------------------------------
408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * Instance variables
418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * --------------------------------------------------------------------
428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      */
438d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
448d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    // the call stack, store StackTraceElement
458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    private final Stack<StackTraceElement> callStack = new Stack<StackTraceElement>();
468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /*
488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * -------------------------------------------------------------------
498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * Constructors
508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * -------------------------------------------------------------------
518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      */
528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /**
548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * Can't be instantiated.
558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     */
568d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    private CallVerificationStack() {
578d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // empty
588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
608d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /*
618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * -------------------------------------------------------------------
628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * Methods
638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * -------------------------------------------------------------------
648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      */
658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /**
678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * Gets the singleton instance.
688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     *
698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * @return the singleton instance
708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     */
718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public static CallVerificationStack getInstance() {
728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        return _instance;
738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /**
768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * Pushes the call stack.
778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     */
788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    private void pushCallStack() {
798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        StackTraceElement[] eles = (new Throwable()).getStackTrace();
808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        int i;
818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        for (i = 1; i < eles.length; i++) {
828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            if (!eles[i].getClassName().equals(this.getClass().getName())) {
838d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                break;
848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            }
858d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
868d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        this.callStack.push(eles[i]);
878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
888d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
898d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /**
908d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * Gets the "current" calling class name.
918d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     *
928d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * @return the "current" calling class name
938d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     */
948d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public String getCurrentSourceClass() {
958d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        return this.callStack.peek().getClassName();
968d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
988d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /**
998d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * Gets the "current" calling method name.
1008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     *
1018d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * @return the "current" calling method name
1028d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     */
1038d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public String getCurrentSourceMethod() {
1048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        return this.callStack.peek().getMethodName();
1058d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
1068d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1078d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /**
1088d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * Clear the parameter stack and the call stack.
1098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     */
1108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    @Override
111e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes    public void clear() {
1128d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        this.callStack.clear();
1138d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        super.clear();
1148d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
115e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
1168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    @Override
117e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes    public Object push(Object o) {
1188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        pushCallStack();
1198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        return super.push(o);
1208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
1218d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1228d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /**
1238d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * Pushes a boolean onto the top of this stack.
1248d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     *
1258d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * @param val the value to push
1268d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     */
1278d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void push(boolean val) {
1288d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        this.push(new BaseTypeWrapper(val));
1298d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
1308d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1318d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /**
1328d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * Pushes a char onto the top of this stack.
1338d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     *
1348d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * @param val the value to push
1358d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     */
1368d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void push(char val) {
1378d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        this.push(new BaseTypeWrapper(val));
1388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
1398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /**
1418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * Pushes a double onto the top of this stack.
1428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     *
1438d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * @param val the value to push
1448d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     */
1458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void push(double val) {
1468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        this.push(new BaseTypeWrapper(val));
1478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
1488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /**
1508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * Pushes a float onto the top of this stack.
1518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     *
1528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * @param val the value to push
1538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     */
1548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void push(float val) {
1558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        this.push(new BaseTypeWrapper(val));
1568d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
1578d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /**
1598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * Pushes an int onto the top of this stack.
1608d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     *
1618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * @param val the value to push
1628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     */
1638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void push(int val) {
1648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        this.push(new BaseTypeWrapper(val));
1658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
1668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /**
1688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * Pushes a long onto the top of this stack.
1698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     *
1708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * @param val the value to push
1718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     */
1728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void push(long val) {
1738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        this.push(new BaseTypeWrapper(val));
1748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
1758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /**
1778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * Pushes a short onto the top of this stack.
1788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     *
1798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * @param val the value to push
1808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     */
1818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void push(short val) {
1828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        this.push(new BaseTypeWrapper(val));
1838d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
1848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1858d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /**
1868d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * Pop an object.
1878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     *
1888d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * @return the object
1898d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     */
1908d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    @Override
191e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes    public Object pop() {
1928d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        this.callStack.pop();
1938d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        return super.pop();
1948d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
1958d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1968d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /**
1978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * Pop a boolean.
1988d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     *
1998d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * @return the value
2008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     */
2018d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public boolean popBoolean() {
2028d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        BaseTypeWrapper wrapper = (BaseTypeWrapper) this.pop();
2038d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Boolean value = (Boolean) wrapper.getValue();
2048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        return value.booleanValue();
2058d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
2068d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2078d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /**
2088d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * Pop a char.
2098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     *
2108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * @return the value
2118d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     */
2128d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public char popChar() {
2138d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        BaseTypeWrapper wrapper = (BaseTypeWrapper) this.pop();
2148d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Character value = (Character) wrapper.getValue();
2158d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        return value.charValue();
2168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
2178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /**
2198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * Pop a double.
2208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     *
2218d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * @return the value
2228d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     */
2238d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public double popDouble() {
2248d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        BaseTypeWrapper wrapper = (BaseTypeWrapper) this.pop();
2258d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Double value = (Double) wrapper.getValue();
2268d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        return value.doubleValue();
2278d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
2288d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2298d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /**
2308d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * Pop a float.
2318d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     *
2328d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * @return the value
2338d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     */
2348d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public float popFloat() {
2358d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        BaseTypeWrapper wrapper = (BaseTypeWrapper) this.pop();
2368d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Float value = (Float) wrapper.getValue();
2378d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        return value.floatValue();
2388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
2398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /**
2418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * Pop a int.
2428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     *
2438d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * @return the value
2448d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     */
2458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public int popInt() {
2468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        BaseTypeWrapper wrapper = (BaseTypeWrapper) this.pop();
2478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Integer value = (Integer) wrapper.getValue();
2488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        return value.intValue();
2498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
2508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /**
2528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * Pop a long.
2538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     *
2548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * @return the value
2558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     */
2568d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public long popLong() {
2578d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        BaseTypeWrapper wrapper = (BaseTypeWrapper) this.pop();
2588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Long value = (Long) wrapper.getValue();
2598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        return value.longValue();
2608d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
2618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /**
2638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * Pop a short.
2648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     *
2658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * @return the value
2668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     */
2678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public short popShort() {
2688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        BaseTypeWrapper wrapper = (BaseTypeWrapper) this.pop();
2698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Short value = (Short) wrapper.getValue();
2708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        return value.shortValue();
2718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
2728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /*
2748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * Wrapper of base types.
2758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      */
2768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    class BaseTypeWrapper {
2778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // the internal value
2798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        private Object value;
2808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        /*
2828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           * Constructs a wrapper object for the base type <code> boolean </code> .
2838d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           */
2848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public BaseTypeWrapper(boolean val) {
2858d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            this.value = new Boolean(val);
2868d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
2878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2888d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        /*
2898d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           * Constructs a wrapper object for the base type <code> c </code> .
2908d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           */
2918d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public BaseTypeWrapper(byte val) {
2928d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            this.value = new Byte(val);
2938d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
2948d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2958d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        /*
2968d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           * Constructs a wrapper object for the base type <code> char </code> .
2978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           */
2988d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public BaseTypeWrapper(char val) {
2998d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            this.value = new Character(val);
3008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
3018d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
3028d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        /*
3038d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           * Constructs a wrapper object for the base type <code> double </code> .
3048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           */
3058d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public BaseTypeWrapper(double val) {
3068d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            this.value = new Double(val);
3078d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
3088d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
3098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        /*
3108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           * Constructs a wrapper object for the base type <code> float </code> .
3118d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           */
3128d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public BaseTypeWrapper(float val) {
3138d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            this.value = new Float(val);
3148d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
3158d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
3168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        /*
3178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           * Constructs a wrapper object for the base type <code> int </code> .
3188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           */
3198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public BaseTypeWrapper(int val) {
3208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            this.value = new Integer(val);
3218d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
3228d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
3238d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        /*
3248d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           * Constructs a wrapper object for the base type <code> long </code> .
3258d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           */
3268d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public BaseTypeWrapper(long val) {
3278d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            this.value = new Long(val);
3288d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
3298d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
3308d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        /*
3318d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           * Constructs a wrapper object for the base type <code> short </code> .
3328d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           */
3338d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public BaseTypeWrapper(short val) {
3348d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            this.value = new Short(val);
3358d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
3368d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
3378d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        /*
3388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           * Gets the internal value.
3398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           */
3408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public Object getValue() {
3418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            return this.value;
3428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
3438d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
344e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes}
345