15f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/*
25f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more
35f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * contributor license agreements.  See the NOTICE file distributed with
45f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * this work for additional information regarding copyright ownership.
55f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0
65f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * (the "License"); you may not use this file except in compliance with
75f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * the License.  You may obtain a copy of the License at
85f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *
95f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *
115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  Unless required by applicable law or agreed to in writing, software
125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  distributed under the License is distributed on an "AS IS" BASIS,
135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *
155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  See the License for the specific language governing permissions and
165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  limitations under the License.
175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/**
205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @author Aleksey V. Yantsen
215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/**
245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Created on 10.25.2004
255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespackage org.apache.harmony.jpda.tests.framework.jdwp;
275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.TestErrorException;
295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/**
325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * This class represents generic value used in JDWP packets.
335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespublic class Value {
355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
37e9e1750a916cf602df722515736d21af63de1defSebastien Hertz     * Creates new boolean value.
385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
39e9e1750a916cf602df722515736d21af63de1defSebastien Hertz    public static Value createBoolean(boolean value) {
40e9e1750a916cf602df722515736d21af63de1defSebastien Hertz        return new Value(value);
415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
44e9e1750a916cf602df722515736d21af63de1defSebastien Hertz     * Creates new byte value.
455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
46e9e1750a916cf602df722515736d21af63de1defSebastien Hertz    public static Value createByte(byte value) {
47e9e1750a916cf602df722515736d21af63de1defSebastien Hertz        return new Value(JDWPConstants.Tag.BYTE_TAG, Byte.valueOf(value));
485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
51e9e1750a916cf602df722515736d21af63de1defSebastien Hertz     * Creates new char value.
525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
53e9e1750a916cf602df722515736d21af63de1defSebastien Hertz    public static Value createChar(char value) {
54e9e1750a916cf602df722515736d21af63de1defSebastien Hertz        return new Value(value);
555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Creates new short value.
595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
60e9e1750a916cf602df722515736d21af63de1defSebastien Hertz    public static Value createShort(short value) {
61e9e1750a916cf602df722515736d21af63de1defSebastien Hertz        return new Value(JDWPConstants.Tag.SHORT_TAG, Short.valueOf(value));
625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Creates new int value.
665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
67e9e1750a916cf602df722515736d21af63de1defSebastien Hertz    public static Value createInt(int value) {
68e9e1750a916cf602df722515736d21af63de1defSebastien Hertz        return new Value(JDWPConstants.Tag.INT_TAG, Integer.valueOf(value));
695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Creates new long value.
735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
74e9e1750a916cf602df722515736d21af63de1defSebastien Hertz    public static Value createLong(long value) {
75e9e1750a916cf602df722515736d21af63de1defSebastien Hertz        return new Value(JDWPConstants.Tag.LONG_TAG, Long.valueOf(value));
765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
79e9e1750a916cf602df722515736d21af63de1defSebastien Hertz     * Creates new float value.
805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
81e9e1750a916cf602df722515736d21af63de1defSebastien Hertz    public static Value createFloat(float value) {
82e9e1750a916cf602df722515736d21af63de1defSebastien Hertz        return new Value(JDWPConstants.Tag.FLOAT_TAG, Float.valueOf(value));
835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Creates new double value.
875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
88e9e1750a916cf602df722515736d21af63de1defSebastien Hertz    public static Value createDouble(double value) {
89e9e1750a916cf602df722515736d21af63de1defSebastien Hertz        return new Value(JDWPConstants.Tag.DOUBLE_TAG, Double.valueOf(value));
90e9e1750a916cf602df722515736d21af63de1defSebastien Hertz    }
91e9e1750a916cf602df722515736d21af63de1defSebastien Hertz
92e9e1750a916cf602df722515736d21af63de1defSebastien Hertz    /**
93e9e1750a916cf602df722515736d21af63de1defSebastien Hertz     * Creates void value.
94e9e1750a916cf602df722515736d21af63de1defSebastien Hertz     */
95e9e1750a916cf602df722515736d21af63de1defSebastien Hertz    public static Value createVoidValue() {
96e9e1750a916cf602df722515736d21af63de1defSebastien Hertz        return new Value(JDWPConstants.Tag.VOID_TAG, Long.valueOf(0));
97e9e1750a916cf602df722515736d21af63de1defSebastien Hertz    }
98e9e1750a916cf602df722515736d21af63de1defSebastien Hertz
99e9e1750a916cf602df722515736d21af63de1defSebastien Hertz    /**
100e9e1750a916cf602df722515736d21af63de1defSebastien Hertz     * Creates object value.
101e9e1750a916cf602df722515736d21af63de1defSebastien Hertz     */
102e9e1750a916cf602df722515736d21af63de1defSebastien Hertz    public static Value createObjectValue(byte tag, long value) {
103e9e1750a916cf602df722515736d21af63de1defSebastien Hertz        if (isPrimitiveTag(tag)) {
104e9e1750a916cf602df722515736d21af63de1defSebastien Hertz            throw new AssertionError(JDWPConstants.Tag.getName(tag) + " is primitive");
105e9e1750a916cf602df722515736d21af63de1defSebastien Hertz        }
106e9e1750a916cf602df722515736d21af63de1defSebastien Hertz        return new Value(tag, Long.valueOf(value));
107e9e1750a916cf602df722515736d21af63de1defSebastien Hertz    }
108e9e1750a916cf602df722515736d21af63de1defSebastien Hertz
109e9e1750a916cf602df722515736d21af63de1defSebastien Hertz    private final byte tag;
110e9e1750a916cf602df722515736d21af63de1defSebastien Hertz
111e9e1750a916cf602df722515736d21af63de1defSebastien Hertz    private final Number numberValue;
112e9e1750a916cf602df722515736d21af63de1defSebastien Hertz
113e9e1750a916cf602df722515736d21af63de1defSebastien Hertz    private final boolean booleanValue;
114e9e1750a916cf602df722515736d21af63de1defSebastien Hertz
115e9e1750a916cf602df722515736d21af63de1defSebastien Hertz    private final char charValue;
116e9e1750a916cf602df722515736d21af63de1defSebastien Hertz
117e9e1750a916cf602df722515736d21af63de1defSebastien Hertz    /**
118e9e1750a916cf602df722515736d21af63de1defSebastien Hertz     * Creates new value.
119e9e1750a916cf602df722515736d21af63de1defSebastien Hertz     */
120e9e1750a916cf602df722515736d21af63de1defSebastien Hertz    private Value(byte tag, Number numberValue) {
121e9e1750a916cf602df722515736d21af63de1defSebastien Hertz        this.tag = tag;
122e9e1750a916cf602df722515736d21af63de1defSebastien Hertz        this.numberValue = numberValue;
123e9e1750a916cf602df722515736d21af63de1defSebastien Hertz        this.booleanValue = false;
124e9e1750a916cf602df722515736d21af63de1defSebastien Hertz        this.charValue = 0;
1255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Creates new boolean value.
1295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
130e9e1750a916cf602df722515736d21af63de1defSebastien Hertz    private Value(boolean value) {
1315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.tag = JDWPConstants.Tag.BOOLEAN_TAG;
1325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.booleanValue = value;
133e9e1750a916cf602df722515736d21af63de1defSebastien Hertz        this.numberValue = null;
134e9e1750a916cf602df722515736d21af63de1defSebastien Hertz        this.charValue = 0;
1355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Creates new char value.
1395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
140e9e1750a916cf602df722515736d21af63de1defSebastien Hertz    private Value(char value) {
1415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.tag = JDWPConstants.Tag.CHAR_TAG;
1425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.charValue = value;
143e9e1750a916cf602df722515736d21af63de1defSebastien Hertz        this.numberValue = null;
144e9e1750a916cf602df722515736d21af63de1defSebastien Hertz        this.booleanValue = false;
1455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns tag of this value.
149e9e1750a916cf602df722515736d21af63de1defSebastien Hertz     *
1505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return Returns the tag.
1515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public byte getTag() {
1535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return tag;
1545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns byte representation of this value.
158e9e1750a916cf602df722515736d21af63de1defSebastien Hertz     *
1595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return byte value
1605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public byte getByteValue() {
1625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return numberValue.byteValue();
1635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns short representation of this value.
167e9e1750a916cf602df722515736d21af63de1defSebastien Hertz     *
1685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return short value
1695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public short getShortValue() {
1715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return numberValue.shortValue();
1725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns int representation of this value.
176e9e1750a916cf602df722515736d21af63de1defSebastien Hertz     *
1775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return int value
1785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public int getIntValue() {
1805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return numberValue.intValue();
1815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns long representation of this value.
185e9e1750a916cf602df722515736d21af63de1defSebastien Hertz     *
1865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return long value
1875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public long getLongValue() {
1895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return numberValue.longValue();
1905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns float representation of this value.
194e9e1750a916cf602df722515736d21af63de1defSebastien Hertz     *
1955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return float value
1965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public float getFloatValue() {
1985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return numberValue.floatValue();
1995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
2005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
2025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns double representation of this value.
203e9e1750a916cf602df722515736d21af63de1defSebastien Hertz     *
2045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return double value
2055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
2065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public double getDoubleValue() {
2075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return numberValue.doubleValue();
2085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
2095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
2115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns boolean representation of this value.
212e9e1750a916cf602df722515736d21af63de1defSebastien Hertz     *
2135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return boolean value
2145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
2155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public boolean getBooleanValue() {
2165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return booleanValue;
2175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
2185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
2205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns char representation of this value.
221e9e1750a916cf602df722515736d21af63de1defSebastien Hertz     *
2225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return char value
2235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
2245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public char getCharValue() {
2255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return charValue;
2265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
2275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
228e9e1750a916cf602df722515736d21af63de1defSebastien Hertz    private static boolean isPrimitiveTag(byte tag) {
229e9e1750a916cf602df722515736d21af63de1defSebastien Hertz        switch (tag) {
230e9e1750a916cf602df722515736d21af63de1defSebastien Hertz            case JDWPConstants.Tag.BOOLEAN_TAG:
231e9e1750a916cf602df722515736d21af63de1defSebastien Hertz            case JDWPConstants.Tag.BYTE_TAG:
232e9e1750a916cf602df722515736d21af63de1defSebastien Hertz            case JDWPConstants.Tag.CHAR_TAG:
233e9e1750a916cf602df722515736d21af63de1defSebastien Hertz            case JDWPConstants.Tag.SHORT_TAG:
234e9e1750a916cf602df722515736d21af63de1defSebastien Hertz            case JDWPConstants.Tag.INT_TAG:
235e9e1750a916cf602df722515736d21af63de1defSebastien Hertz            case JDWPConstants.Tag.LONG_TAG:
236e9e1750a916cf602df722515736d21af63de1defSebastien Hertz            case JDWPConstants.Tag.FLOAT_TAG:
237e9e1750a916cf602df722515736d21af63de1defSebastien Hertz            case JDWPConstants.Tag.DOUBLE_TAG:
238e9e1750a916cf602df722515736d21af63de1defSebastien Hertz            case JDWPConstants.Tag.VOID_TAG:
239e9e1750a916cf602df722515736d21af63de1defSebastien Hertz                return true;
240e9e1750a916cf602df722515736d21af63de1defSebastien Hertz            case JDWPConstants.Tag.NO_TAG:
241e9e1750a916cf602df722515736d21af63de1defSebastien Hertz            case JDWPConstants.Tag.ARRAY_TAG:
242e9e1750a916cf602df722515736d21af63de1defSebastien Hertz            case JDWPConstants.Tag.CLASS_LOADER_TAG:
243e9e1750a916cf602df722515736d21af63de1defSebastien Hertz            case JDWPConstants.Tag.CLASS_OBJECT_TAG:
244e9e1750a916cf602df722515736d21af63de1defSebastien Hertz            case JDWPConstants.Tag.OBJECT_TAG:
245e9e1750a916cf602df722515736d21af63de1defSebastien Hertz            case JDWPConstants.Tag.STRING_TAG:
246e9e1750a916cf602df722515736d21af63de1defSebastien Hertz            case JDWPConstants.Tag.THREAD_TAG:
247e9e1750a916cf602df722515736d21af63de1defSebastien Hertz            case JDWPConstants.Tag.THREAD_GROUP_TAG:
248e9e1750a916cf602df722515736d21af63de1defSebastien Hertz                return false;
249e9e1750a916cf602df722515736d21af63de1defSebastien Hertz            default:
250e9e1750a916cf602df722515736d21af63de1defSebastien Hertz                throw new TestErrorException("Illegal tag value: " + tag);
251e9e1750a916cf602df722515736d21af63de1defSebastien Hertz        }
252e9e1750a916cf602df722515736d21af63de1defSebastien Hertz    }
253e9e1750a916cf602df722515736d21af63de1defSebastien Hertz
2545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
2555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Compares with other value.
2565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
257e1833aa2673d4f975ad35e7a39317feeea922fe1Sebastien Hertz    @Override
2585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public boolean equals(Object arg0) {
2595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (!(arg0 instanceof Value))
2605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return false;
2615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        Value value0 = (Value) arg0;
263e9e1750a916cf602df722515736d21af63de1defSebastien Hertz        if (tag != value0.tag)
2645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return false;
2655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        switch (tag) {
2675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.BOOLEAN_TAG:
2685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return getBooleanValue() == value0.getBooleanValue();
2695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.BYTE_TAG:
2705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return getByteValue() == value0.getByteValue();
2715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.CHAR_TAG:
2725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return getCharValue() == value0.getCharValue();
2735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.DOUBLE_TAG:
2745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            if (Double.isNaN(getDoubleValue())
2755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    && (Double.isNaN(value0.getDoubleValue())))
2765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                return true;
2775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return getDoubleValue() == value0.getDoubleValue();
2785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.FLOAT_TAG:
2795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            if (Float.isNaN(getFloatValue())
2805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    && (Float.isNaN(value0.getFloatValue())))
2815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                return true;
2825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return getFloatValue() == value0.getFloatValue();
2835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.INT_TAG:
2845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return getIntValue() == value0.getIntValue();
2855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.LONG_TAG:
2865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return getLongValue() == value0.getLongValue();
2875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.SHORT_TAG:
2885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return getShortValue() == value0.getShortValue();
2895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.STRING_TAG:
2905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.ARRAY_TAG:
2915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.CLASS_LOADER_TAG:
2925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.CLASS_OBJECT_TAG:
2935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.OBJECT_TAG:
2945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.THREAD_GROUP_TAG:
2955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.THREAD_TAG:
2965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return getLongValue() == value0.getLongValue();
2975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        throw new TestErrorException("Illegal tag value");
3005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
3015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
3035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Converts this value to string representation for printing.
3045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
305e1833aa2673d4f975ad35e7a39317feeea922fe1Sebastien Hertz    @Override
3065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public String toString() {
3075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        switch (tag) {
3095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.BOOLEAN_TAG:
3105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return "boolean: " + getBooleanValue();
3115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.BYTE_TAG:
3125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return "byte: " + getByteValue();
3135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.CHAR_TAG:
3145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return "char: " + getCharValue();
3155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.DOUBLE_TAG:
3165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return "double: " + getDoubleValue();
3175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.FLOAT_TAG:
3185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return "float: " + getFloatValue();
3195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.INT_TAG:
3205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return "int: " + getIntValue();
3215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.LONG_TAG:
3225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return "long: " + getLongValue();
3235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.SHORT_TAG:
3245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return "short: " + getShortValue();
3255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.STRING_TAG:
3265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return "StringID: " + getLongValue();
3275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.ARRAY_TAG:
328e9e1750a916cf602df722515736d21af63de1defSebastien Hertz            return "ArrayID: " + getLongValue();
3295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.CLASS_LOADER_TAG:
3305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return "ClassLoaderID: " + getLongValue();
3315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.CLASS_OBJECT_TAG:
3325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return "ClassObjectID: " + getLongValue();
3335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.OBJECT_TAG:
3345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return "ObjectID: " + getLongValue();
3355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.THREAD_GROUP_TAG:
3365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return "ThreadGroupID: " + getLongValue();
3375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.THREAD_TAG:
3385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return "ThreadID: " + getLongValue();
3395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
3405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        throw new TestErrorException("Illegal tag value: " + tag);
3425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
3435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes}
344