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 Khen G. Kim, Aleksey V. Yantsen
215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/**
245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Created on 10.01.2004
255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespackage org.apache.harmony.jpda.tests.framework.jdwp;
275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport java.io.UnsupportedEncodingException;
295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.TestErrorException;
315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.TypesLengths;
335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/**
355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * This base class represents JDWP packet.
365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespublic class Packet {
385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public static final int REPLY_PACKET_FLAG = 0x80;
405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public static final int FLAGS_INDEX = 8;
425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public static final int HEADER_SIZE = 11;
445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * The size in bytes of the BYTE type value.
475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    protected static final int BYTE_SIZE = 1;
495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * The size in bytes of the SHORT type value.
525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    protected static final int SHORT_SIZE = 2;
545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * The size in bytes of the INT type value.
575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    protected static final int INT_SIZE = 4;
595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * The size in bytes of the LONG type value.
625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    protected static final int LONG_SIZE = 8;
645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    private static final int LENGTH_INDEX = 0;
665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    private static final int ID_INDEX = 4;
685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    private int id;
705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    private byte flags;
725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    private int length;
745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    private byte data[];
765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    private int reading_data_index;
785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * A constructor that creates an empty CommandPacket with empty header
815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * fields and no data.
825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public Packet() {
845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        reading_data_index = 0;
855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        data = new byte[0];
865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * A constructor that creates Packet from array of bytes including header
905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * and data sections.
915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param p array of bytes for new packet.
935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public Packet(byte p[]) {
955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        length = (int) readFromByteArray(p, LENGTH_INDEX, INT_SIZE);
965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (length < HEADER_SIZE) {
975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            throw new TestErrorException(
985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    "Packet creation error: size of packet = " + length
995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                            + "is less than header size = " + HEADER_SIZE);
1005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
1015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        id = (int) readFromByteArray(p, ID_INDEX, INT_SIZE);
1025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        flags = p[FLAGS_INDEX];
1035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        data = new byte[p.length - HEADER_SIZE];
1045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        System.arraycopy(p, HEADER_SIZE, data, 0, p.length - HEADER_SIZE);
1055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        reading_data_index = 0;
1065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets the length value of the header of the Packet.
1105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return the length value of the header of the Packet.
1125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public int getLength() {
1145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return length;
1155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets the id value of the header of the Packet.
1195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param i
1215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            the id value of the header of the Packet.
1225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setId(int i) {
1245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        id = i;
1255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets the id value of the header of the Packet.
1295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return the id value of the header of the Packet.
1315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public int getId() {
1335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return id;
1345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets the flags value of the header of the Packet.
1385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param f
1405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            the flags value of the header of the Packet.
1415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setFlags(byte f) {
1435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        flags = f;
1445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets the flags value of the header of the Packet.
1485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return the flags value of the header of the Packet.
1505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public byte getFlags() {
1525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return flags;
1535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets the flags value from the header of the Packet.
1575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param tag
1595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            Type tag (see JDWP.tag)
1605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return the flags value of the header of the Packet.
1615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public boolean isValuePrimitiveType(byte tag) {
1635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        switch (tag) {
1645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.ARRAY_TAG: {
1655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return false;
1665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
1675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.BYTE_TAG: {
1685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return true;
1695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
1705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.CHAR_TAG: {
1715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return true;
1725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
1735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.OBJECT_TAG: {
1745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return false;
1755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
1765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.FLOAT_TAG: {
1775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return true;
1785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
1795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.DOUBLE_TAG: {
1805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return true;
1815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
1825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.INT_TAG: {
1835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return true;
1845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
1855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.LONG_TAG: {
1865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return true;
1875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
1885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.SHORT_TAG: {
1895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return true;
1905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
1915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.VOID_TAG: {
1925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return true;
1935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
1945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.BOOLEAN_TAG: {
1955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return true;
1965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
1975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.STRING_TAG: {
1985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return false;
1995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.THREAD_TAG: {
2015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return false;
2025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.THREAD_GROUP_TAG: {
2045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return false;
2055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.CLASS_LOADER_TAG: {
2075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return false;
2085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.CLASS_OBJECT_TAG: {
2105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return false;
2115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.NO_TAG: {
2135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return true;
2145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        default: {
2165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            throw new TestErrorException("Improper JDWP.tag value = " + tag);
2175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
2205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
2225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets the next value of the data of the Packet as byte.
2235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
2245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param val
2255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            the byte value.
2265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
2275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setNextValueAsByte(byte val) {
2285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        int new_data_size = data.length + BYTE_SIZE;
2295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        byte data_temp[] = data;
2305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        data = new byte[new_data_size];
2315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        System.arraycopy(data_temp, 0, data, 0, new_data_size - BYTE_SIZE);
2325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        data[new_data_size - BYTE_SIZE] = val;
2335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
2345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
2365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets the next value of the data of the Packet as byte.
2375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
2385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return the next value of the data of the Packet as byte.
2395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
2405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public byte getNextValueAsByte() {
2415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        reading_data_index = reading_data_index + BYTE_SIZE;
2425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return data[reading_data_index - BYTE_SIZE];
2435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
2445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
2465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets the next value of the data of the Packet as boolean.
2475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
2485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param val
2495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            the boolean value.
2505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
2515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setNextValueAsBoolean(boolean val) {
2525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        int old_data_size = data.length;
2535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        int new_data_size = old_data_size
2545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + TypesLengths.getTypeLength(TypesLengths.BOOLEAN_ID);
2555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        byte data_temp[] = data;
2565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        data = new byte[new_data_size];
2575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        System.arraycopy(data_temp, 0, data, 0, old_data_size);
2585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (val) {
2595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            data[old_data_size] = 1;
2605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        } else {
2615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            data[old_data_size] = 0;
2625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
2645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
2665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets the next value of the data of the Packet as boolean.
2675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
2685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return the next value of the data of the Packet as boolean.
2695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
2705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public boolean getNextValueAsBoolean() {
2715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        int res = (int) data[reading_data_index] & 0xFF;
2725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        reading_data_index = reading_data_index
2735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + TypesLengths.getTypeLength(TypesLengths.BOOLEAN_ID);
2745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return (res != 0);
2755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
2765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
2785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets the next value of the data of the Packet as short.
2795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
2805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param val
2815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            the short value.
2825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
2835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setNextValueAsShort(short val) {
2845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        int new_data_size = data.length
2855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + TypesLengths.getTypeLength(TypesLengths.SHORT_ID);
2865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        byte data_temp[] = data;
2875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        data = new byte[new_data_size];
2885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        System.arraycopy(data_temp, 0, data, 0, new_data_size
2895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - TypesLengths.getTypeLength(TypesLengths.SHORT_ID));
2905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.writeAtByteArray((long) val, data, new_data_size
2915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - TypesLengths.getTypeLength(TypesLengths.SHORT_ID),
2925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                TypesLengths.getTypeLength(TypesLengths.SHORT_ID));
2935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
2945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
2965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets the next value of the data of the Packet as short.
2975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
2985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return the next value of the data of the Packet as short.
2995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
3005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public short getNextValueAsShort() {
3015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        reading_data_index = reading_data_index
3025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + TypesLengths.getTypeLength(TypesLengths.SHORT_ID);
3035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return (short) readFromByteArray(data, reading_data_index
3045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - TypesLengths.getTypeLength(TypesLengths.SHORT_ID),
3055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                TypesLengths.getTypeLength(TypesLengths.SHORT_ID));
3065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
3075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
3095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets the next value of the data of the Packet as int.
3105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
3115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param val
3125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            the int value.
3135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
3145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setNextValueAsInt(int val) {
3155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        int new_data_size = data.length
3165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + TypesLengths.getTypeLength(TypesLengths.INT_ID);
3175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        byte data_temp[] = data;
3185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        data = new byte[new_data_size];
3195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        System.arraycopy(data_temp, 0, data, 0, new_data_size
3205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - TypesLengths.getTypeLength(TypesLengths.INT_ID));
3215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.writeAtByteArray((long) val, data, new_data_size
3225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - TypesLengths.getTypeLength(TypesLengths.INT_ID), TypesLengths
3235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                .getTypeLength(TypesLengths.INT_ID));
3245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
3255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
3275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets the next value of the data of the Packet as int.
3285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
3295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return the next value of the data of the Packet as int.
3305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
3315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public int getNextValueAsInt() {
3325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        reading_data_index = reading_data_index
3335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + TypesLengths.getTypeLength(TypesLengths.INT_ID);
3345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return (int) readFromByteArray(data, reading_data_index
3355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - TypesLengths.getTypeLength(TypesLengths.INT_ID), TypesLengths
3365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                .getTypeLength(TypesLengths.INT_ID));
3375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
3385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
3405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets the next value of the data of the Packet as double.
3415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
3425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param dval
3435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            the double value.
3445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
3455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setNextValueAsDouble(double dval) {
3465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        int new_data_size = data.length
3475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + TypesLengths.getTypeLength(TypesLengths.DOUBLE_ID);
3485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        byte data_temp[] = data;
3495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        long val = Double.doubleToLongBits(dval);
3505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        data = new byte[new_data_size];
3515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        System.arraycopy(data_temp, 0, data, 0, new_data_size
3525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - TypesLengths.getTypeLength(TypesLengths.DOUBLE_ID));
3535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.writeAtByteArray((long) val, data, new_data_size
3545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - TypesLengths.getTypeLength(TypesLengths.DOUBLE_ID),
3555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                TypesLengths.getTypeLength(TypesLengths.DOUBLE_ID));
3565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
3575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
3595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets the next value of the data of the Packet as double.
3605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
3615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return the next value of the data of the Packet as double.
3625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
3635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public double getNextValueAsDouble() {
3645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        reading_data_index = reading_data_index
3655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + TypesLengths.getTypeLength(TypesLengths.DOUBLE_ID);
3665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        long res = readFromByteArray(data, reading_data_index
3675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - TypesLengths.getTypeLength(TypesLengths.DOUBLE_ID),
3685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                TypesLengths.getTypeLength(TypesLengths.DOUBLE_ID));
3695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return Double.longBitsToDouble(res);
3715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
3725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
3745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets the next value of the data of the Packet as float.
3755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
3765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param fval
3775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            the float value.
3785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
3795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setNextValueAsFloat(float fval) {
3805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        int new_data_size = data.length
3815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + TypesLengths.getTypeLength(TypesLengths.FLOAT_ID);
3825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        byte data_temp[] = data;
3835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        long val = Float.floatToIntBits(fval);
3845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        data = new byte[new_data_size];
3855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        System.arraycopy(data_temp, 0, data, 0, new_data_size
3865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - TypesLengths.getTypeLength(TypesLengths.FLOAT_ID));
3875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.writeAtByteArray((long) val, data, new_data_size
3885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - TypesLengths.getTypeLength(TypesLengths.FLOAT_ID),
3895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                TypesLengths.getTypeLength(TypesLengths.FLOAT_ID));
3905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
3915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
3935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets the next value of the data of the Packet as float.
3945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
3955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return the next value of the data of the Packet as float.
3965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
3975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public float getNextValueAsFloat() {
3985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        reading_data_index = reading_data_index
3995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + TypesLengths.getTypeLength(TypesLengths.FLOAT_ID);
4005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        long res = readFromByteArray(data, reading_data_index
4015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - TypesLengths.getTypeLength(TypesLengths.FLOAT_ID),
4025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                TypesLengths.getTypeLength(TypesLengths.FLOAT_ID));
4035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
4045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return Float.intBitsToFloat((int) res);
4055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
4065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
4075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
4085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets the next value of the data of the Packet as char.
4095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
4105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param val
4115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            the char value.
4125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
4135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setNextValueAsChar(char val) {
4145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        int new_data_size = data.length
4155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + TypesLengths.getTypeLength(TypesLengths.CHAR_ID);
4165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        byte data_temp[] = data;
4175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        data = new byte[new_data_size];
4185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        System.arraycopy(data_temp, 0, data, 0, new_data_size
4195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - TypesLengths.getTypeLength(TypesLengths.CHAR_ID));
4205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.writeAtByteArray((long) val, data, new_data_size
4215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - TypesLengths.getTypeLength(TypesLengths.CHAR_ID),
4225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                TypesLengths.getTypeLength(TypesLengths.CHAR_ID));
4235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
4245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
4255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
4265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets the next value of the data of the Packet as char.
4275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
4285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return the next value of the data of the Packet as char.
4295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
4305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public char getNextValueAsChar() {
4315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        reading_data_index = reading_data_index
4325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + TypesLengths.getTypeLength(TypesLengths.CHAR_ID);
4335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return (char) readFromByteArray(data, reading_data_index
4345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - TypesLengths.getTypeLength(TypesLengths.CHAR_ID),
4355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                TypesLengths.getTypeLength(TypesLengths.CHAR_ID));
4365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
4375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
4385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
4395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets the next value of the data of the Packet as long.
4405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
4415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param val
4425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            the long value.
4435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
4445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setNextValueAsLong(long val) {
4455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        int new_data_size = data.length
4465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + TypesLengths.getTypeLength(TypesLengths.LONG_ID);
4475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        byte data_temp[] = data;
4485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        data = new byte[new_data_size];
4495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        System.arraycopy(data_temp, 0, data, 0, new_data_size
4505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - TypesLengths.getTypeLength(TypesLengths.LONG_ID));
4515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.writeAtByteArray(val, data, new_data_size
4525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - TypesLengths.getTypeLength(TypesLengths.LONG_ID),
4535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                TypesLengths.getTypeLength(TypesLengths.LONG_ID));
4545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
4555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
4565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
4575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets the next value of the data of the Packet as long.
4585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
4595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return the next value of the data of the Packet as long.
4605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
4615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public long getNextValueAsLong() {
4625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        reading_data_index = reading_data_index
4635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + TypesLengths.getTypeLength(TypesLengths.LONG_ID);
4645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return readFromByteArray(data, reading_data_index
4655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - TypesLengths.getTypeLength(TypesLengths.LONG_ID),
4665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                TypesLengths.getTypeLength(TypesLengths.LONG_ID));
4675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
4685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
4695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
4705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets the next value of the data of the Packet as String in the "UTF-8"
4715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Charset.
4725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
4735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param val
4745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            the String in the "UTF-8" Charset.
4755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
4765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setNextValueAsString(String val) {
4775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        byte data_temp[] = data;
4785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        byte val_as_bytes[];
4795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        try {
4805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            val_as_bytes = val.getBytes("UTF-8");
4815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        } catch (UnsupportedEncodingException e) {
4825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            throw new TestErrorException(e);
4835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
4845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        int new_data_size = data.length + val_as_bytes.length
4855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + TypesLengths.getTypeLength(TypesLengths.INT_ID);
4865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        data = new byte[new_data_size];
4875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        System.arraycopy(data_temp, 0, data, 0, new_data_size
4885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - val_as_bytes.length
4895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - TypesLengths.getTypeLength(TypesLengths.INT_ID));
4905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.writeAtByteArray((long) val_as_bytes.length, data, new_data_size
4915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - val_as_bytes.length
4925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - TypesLengths.getTypeLength(TypesLengths.INT_ID), TypesLengths
4935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                .getTypeLength(TypesLengths.INT_ID));
4945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        System.arraycopy(val_as_bytes, 0, data, new_data_size
4955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - val_as_bytes.length, val_as_bytes.length);
4965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
4975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
4985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
4995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets the next value of the data of the Packet as String in the "UTF-8"
5005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Charset.
5015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
5025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return the next value of the data of the Packet as String in the "UTF-8"
5035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *         Charset.
5045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
5055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public String getNextValueAsString() {
5065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        int string_length = this.getNextValueAsInt();
5075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        String res = null;
5085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        try {
5095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            res = new String(data, reading_data_index, string_length, "UTF-8");
5105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        } catch (UnsupportedEncodingException e) {
5115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            throw new TestErrorException(e);
5125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
5135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        reading_data_index = reading_data_index + string_length;
5145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return res;
5155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
5165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
5175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
5185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets the next value of the data of the Packet as objectID VM-sensitive
5195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * value. If length is less than 8 bytes, the appropriate high bits in the
5205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * val value will be ignored.
5215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
5225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param val
5235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            the ObjectID value.
5245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
5255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setNextValueAsObjectID(long val) {
5265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (TypesLengths.getTypeLength(TypesLengths.OBJECT_ID) < 0
5275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                || TypesLengths.getTypeLength(TypesLengths.OBJECT_ID) > 8) {
5285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            throw new TestErrorException("Improper ObjectID value length = "
5295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    + TypesLengths.getTypeLength(TypesLengths.OBJECT_ID));
5305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
5315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        int new_data_size = data.length
5325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + TypesLengths.getTypeLength(TypesLengths.OBJECT_ID);
5335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        byte data_temp[] = data;
5345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        data = new byte[new_data_size];
5355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        System.arraycopy(data_temp, 0, data, 0, new_data_size
5365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - TypesLengths.getTypeLength(TypesLengths.OBJECT_ID));
5375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.writeAtByteArray(val, data, new_data_size
5385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - TypesLengths.getTypeLength(TypesLengths.OBJECT_ID),
5395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                TypesLengths.getTypeLength(TypesLengths.OBJECT_ID));
5405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
5415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
5425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
5435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets the next value of the data of the Packet as objectID VM-sensitive
5445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * value. If length is less than 8 bytes, the appropriate high bits in the
5455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * returned value can be ignored.
5465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
5475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return the next value of the data of the Packet as VM-sensitive value.
5485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
5495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public long getNextValueAsObjectID() {
5505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (TypesLengths.getTypeLength(TypesLengths.OBJECT_ID) < 0
5515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                || TypesLengths.getTypeLength(TypesLengths.OBJECT_ID) > 8) {
5525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            throw new TestErrorException("Improper ObjectID value length = "
5535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    + TypesLengths.getTypeLength(TypesLengths.OBJECT_ID) + "!");
5545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
5555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        reading_data_index = reading_data_index
5565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + TypesLengths.getTypeLength(TypesLengths.OBJECT_ID);
5575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return (int) readFromByteArray(data, reading_data_index
5585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - TypesLengths.getTypeLength(TypesLengths.OBJECT_ID),
5595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                TypesLengths.getTypeLength(TypesLengths.OBJECT_ID));
5605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
5615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
5625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
5635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets the next value of the data of the Packet as ThreadID VM-sensitive
5645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * value. If length is less than 8 bytes, the appropriate high bits in the
5655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * val value will be ignored.
5665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
5675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param val
5685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            the ThreadID value.
5695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
5705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setNextValueAsThreadID(long val) {
5715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.setNextValueAsObjectID(val);
5725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
5735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
5745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
5755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets the next value of the data of the Packet as ThreadID VM-sensitive
5765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * value. If length is less than 8 bytes, the appropriate high bits in the
5775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * returned value can be ignored.
5785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
5795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return the next value of the data of the Packet as VM-sensitive value.
5805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
5815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public long getNextValueAsThreadID() {
5825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return this.getNextValueAsObjectID();
5835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
5845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
5855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
5865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets the next value of the data of the Packet as ThreadGroupID
5875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * VM-sensitive value. If length is less than 8 bytes, the appropriate high
5885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * bits in the val value will be ignored.
5895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
5905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param val
5915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            the ThreadGroupID value.
5925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
5935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setNextValueAsThreadGroupID(long val) {
5945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.setNextValueAsObjectID(val);
5955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
5965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
5975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
5985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets the next value of the data of the Packet as ThreadGroupID
5995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * VM-sensitive value. If length is less than 8 bytes, the appropriate high
6005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * bits in the returned value can be ignored.
6015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
6025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return the next value of the data of the Packet as VM-sensitive value.
6035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
6045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public long getNextValueAsThreadGroupID() {
6055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return this.getNextValueAsObjectID();
6065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
6075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
6085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
6095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets the next value of the data of the Packet as StringID VM-sensitive
6105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * value. If length is less than 8 bytes, the appropriate high bits in the
6115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * val value will be ignored.
6125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
6135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param val
6145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            the StringID value.
6155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
6165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setNextValueAsStringID(long val) {
6175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.setNextValueAsObjectID(val);
6185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
6195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
6205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
6215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets the next value of the data of the Packet as StringID VM-sensitive
6225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * value. If length is less than 8 bytes, the appropriate high bits in the
6235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * returned value can be ignored.
6245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
6255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return the next value of the data of the Packet as VM-sensitive value.
6265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
6275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public long getNextValueAsStringID() {
6285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return this.getNextValueAsObjectID();
6295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
6305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
6315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
6325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets the next value of the data of the Packet as ClassLoaderID
6335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * VM-sensitive value. If length is less than 8 bytes, the appropriate high
6345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * bits in the val value will be ignored.
6355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
6365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param val
6375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            the ClassLoaderID value.
6385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
6395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setNextValueAsClassLoaderID(long val) {
6405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.setNextValueAsObjectID(val);
6415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
6425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
6435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
6445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets the next value of the data of the Packet as ClassLoaderID
6455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * VM-sensitive value. If length is less than 8 bytes, the appropriate high
6465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * bits in the returned value can be ignored.
6475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
6485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return the next value of the data of the Packet as VM-sensitive value.
6495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
6505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public long getNextValueAsClassLoaderID() {
6515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return this.getNextValueAsObjectID();
6525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
6535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
6545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
6555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets the next value of the data of the Packet as ClassObjectID
6565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * VM-sensitive value. If length is less than 8 bytes, the appropriate high
6575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * bits in the val value will be ignored.
6585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
6595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param val
6605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            the ClassObjectID value.
6615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
6625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setNextValueAsClassObjectID(long val) {
6635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.setNextValueAsObjectID(val);
6645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
6655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
6665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
6675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets the next value of the data of the Packet as ClassObjectID
6685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * VM-sensitive value. If length is less than 8 bytes, the appropriate high
6695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * bits in the returned value can be ignored.
6705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
6715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return the next value of the data of the Packet as VM-sensitive value.
6725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
6735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public long getNextValueAsClassObjectID() {
6745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return this.getNextValueAsObjectID();
6755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
6765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
6775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
6785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets the next value of the data of the Packet as ArrayID VM-sensitive
6795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * value. If length is less than 8 bytes, the appropriate high bits in the
6805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * val value will be ignored.
6815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
6825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param val
6835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            the ArrayID value.
6845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
6855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setNextValueAsArrayID(long val) {
6865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.setNextValueAsObjectID(val);
6875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
6885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
6895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
6905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets the next value of the data of the Packet as ArrayID VM-sensitive
6915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * value. If length is less than 8 bytes, the appropriate high bits in the
6925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * returned value can be ignored.
6935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
6945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return the next value of the data of the Packet as VM-sensitive value.
6955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
6965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public long getNextValueAsClassArrayID() {
6975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return this.getNextValueAsObjectID();
6985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
6995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
7005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
7015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets the next value of the data of the Packet as ReferenceTypeID
7025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * VM-sensitive value. If length is less than 8 bytes, the appropriate high
7035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * bits in the val value will be ignored.
7045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
7055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param val
7065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            the ReferenceTypeID value.
7075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
7085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setNextValueAsReferenceTypeID(long val) {
7095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.setNextValueAsObjectID(val);
7105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
7115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
7125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
7135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets the next value of the data of the Packet as ReferenceTypeID
7145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * VM-sensitive value. If length is less than 8 bytes, the appropriate high
7155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * bits in the returned value can be ignored.
7165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
7175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return the next value of the data of the Packet as VM-sensitive value.
7185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
7195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public long getNextValueAsReferenceTypeID() {
7205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return this.getNextValueAsObjectID();
7215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
7225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
7235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
7245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets the next value of the data of the Packet as ClassID VM-sensitive
7255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * value. If length is less than 8 bytes, the appropriate high bits in the
7265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * val value will be ignored.
7275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
7285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param val
7295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            the ClassID value.
7305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
7315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setNextValueAsClassID(long val) {
7325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.setNextValueAsObjectID(val);
7335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
7345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
7355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
7365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets the next value of the data of the Packet as ClassID VM-sensitive
7375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * value. If length is less than 8 bytes, the appropriate high bits in the
7385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * returned value can be ignored.
7395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
7405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return the next value of the data of the Packet as VM-sensitive value.
7415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
7425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public long getNextValueAsClassID() {
7435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return this.getNextValueAsObjectID();
7445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
7455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
7465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
7475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets the next value of the data of the Packet as InterfaceID VM-sensitive
7485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * value. If length is less than 8 bytes, the appropriate high bits in the
7495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * val value will be ignored.
7505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
7515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param val
7525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            the InterfaceID value.
7535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
7545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setNextValueAsInterfaceID(long val) {
7555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.setNextValueAsObjectID(val);
7565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
7575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
7585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
7595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets the next value of the data of the Packet as InterfaceID VM-sensitive
7605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * value. If length is less than 8 bytes, the appropriate high bits in the
7615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * returned value can be ignored.
7625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
7635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return the next value of the data of the Packet as VM-sensitive value.
7645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
7655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public long getNextValueAsInterfaceID() {
7665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return this.getNextValueAsObjectID();
7675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
7685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
7695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
7705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets the next value of the data of the Packet as ArrayTypeID VM-sensitive
7715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * value. If length is less than 8 bytes, the appropriate high bits in the
7725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * val value will be ignored.
7735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
7745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param val
7755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            the ArrayTypeID value.
7765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
7775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setNextValueAsArrayTypeID(long val) {
7785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.setNextValueAsObjectID(val);
7795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
7805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
7815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
7825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets the next value of the data of the Packet as ArrayTypeID VM-sensitive
7835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * value. If length is less than 8 bytes, the appropriate high bits in the
7845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * returned value can be ignored.
7855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
7865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return the next value of the data of the Packet as VM-sensitive value.
7875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
7885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public long getNextValueAsArrayTypeID() {
7895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return this.getNextValueAsObjectID();
7905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
7915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
7925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
7935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets the next value of the data of the Packet as tagged-objectID
7945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * VM-sensitive value. If length is less than 8 bytes, the appropriate high
7955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * bits in the val value will be ignored.
7965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
7975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param taggedObject
7985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            TaggedObject value.
7995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
8005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setNextValueAsTaggedObject(TaggedObject taggedObject) {
8015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.setNextValueAsByte(taggedObject.tag);
8025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.setNextValueAsObjectID(taggedObject.objectID);
8035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
8045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
8055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
8065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets the next value of the data of the Packet as tagged-objectID
8075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * VM-sensitive value. If length is less than 8 bytes, the appropriate high
8085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * bits in the returned value can be ignored.
8095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
8105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return the next value of the data of the Packet as VM-sensitive value.
8115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
8125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public TaggedObject getNextValueAsTaggedObject() {
8135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (TypesLengths.getTypeLength(TypesLengths.OBJECT_ID) < 0
8145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                || TypesLengths.getTypeLength(TypesLengths.OBJECT_ID) > 8) {
8155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            throw new TestErrorException("Improper ObjectID value length = "
8165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    + TypesLengths.getTypeLength(TypesLengths.OBJECT_ID));
8175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
8185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        TaggedObject taggedObject = new TaggedObject();
8195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        taggedObject.tag = this.getNextValueAsByte();
8205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        taggedObject.objectID = this.getNextValueAsObjectID();
8215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return taggedObject;
8225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
8235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
8245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
8255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets the next value of the data of the Packet as MethodID VM-sensitive
8265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * value. If length is less than 8 bytes, the appropriate high bits in the
8275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * val value will be ignored.
8285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
8295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param methodID
8305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            MethodID value.
8315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
8325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setNextValueAsMethodID(long methodID) {
8335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (TypesLengths.getTypeLength(TypesLengths.METHOD_ID) < 0
8345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                || TypesLengths.getTypeLength(TypesLengths.METHOD_ID) > 8) {
8355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            throw new TestErrorException("Improper MethodID value length = "
8365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    + TypesLengths.getTypeLength(TypesLengths.METHOD_ID));
8375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
8385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        int new_data_size = data.length
8395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + TypesLengths.getTypeLength(TypesLengths.METHOD_ID);
8405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        byte data_temp[] = data;
8415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        data = new byte[new_data_size];
8425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        System.arraycopy(data_temp, 0, data, 0, new_data_size
8435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - TypesLengths.getTypeLength(TypesLengths.METHOD_ID));
8445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.writeAtByteArray(methodID, data, new_data_size
8455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - TypesLengths.getTypeLength(TypesLengths.METHOD_ID),
8465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                TypesLengths.getTypeLength(TypesLengths.METHOD_ID));
8475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
8485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
8495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
8505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets the next value of the data of the Packet as MethodID VM-sensitive
8515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * value. If length is less than 8 bytes, the appropriate high bits in the
8525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * returned value can be ignored.
8535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
8545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return the next value of the data of the Packet as VM-sensitive value.
8555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
8565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public long getNextValueAsMethodID() {
8575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (TypesLengths.getTypeLength(TypesLengths.METHOD_ID) < 0
8585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                || TypesLengths.getTypeLength(TypesLengths.METHOD_ID) > 8) {
8595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            throw new TestErrorException("Improper MethodID value length = "
8605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    + TypesLengths.getTypeLength(TypesLengths.METHOD_ID));
8615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
8625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        reading_data_index = reading_data_index
8635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + TypesLengths.getTypeLength(TypesLengths.METHOD_ID);
8645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        long result = readFromByteArray(data, reading_data_index
8655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - TypesLengths.getTypeLength(TypesLengths.METHOD_ID),
8665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                TypesLengths.getTypeLength(TypesLengths.METHOD_ID));
8675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return result;
8685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
8695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
8705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
8715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets the next value of the data of the Packet as FieldID VM-sensitive
8725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * value. If length is less than 8 bytes, the appropriate high bits in the
8735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * val value will be ignored.
8745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
8755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param fieldID
8765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            FieldID value.
8775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
8785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setNextValueAsFieldID(long fieldID) {
8795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (TypesLengths.getTypeLength(TypesLengths.FIELD_ID) < 0
8805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                || TypesLengths.getTypeLength(TypesLengths.FIELD_ID) > 8) {
8815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            throw new TestErrorException("Improper FieldID value length = "
8825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    + TypesLengths.getTypeLength(TypesLengths.FIELD_ID));
8835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
8845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        int new_data_size = data.length
8855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + TypesLengths.getTypeLength(TypesLengths.FIELD_ID);
8865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        byte data_temp[] = data;
8875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        data = new byte[new_data_size];
8885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        System.arraycopy(data_temp, 0, data, 0, new_data_size
8895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - TypesLengths.getTypeLength(TypesLengths.FIELD_ID));
8905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.writeAtByteArray(fieldID, data, new_data_size
8915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - TypesLengths.getTypeLength(TypesLengths.FIELD_ID),
8925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                TypesLengths.getTypeLength(TypesLengths.FIELD_ID));
8935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
8945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
8955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
8965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets the next value of the data of the Packet as FieldID VM-sensitive
8975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * value. If length is less than 8 bytes, the appropriate high bits in the
8985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * returned value can be ignored.
8995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
9005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return the next value of the data of the Packet as VM-sensitive value.
9015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
9025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public long getNextValueAsFieldID() {
9035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (TypesLengths.getTypeLength(TypesLengths.FIELD_ID) < 0
9045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                || TypesLengths.getTypeLength(TypesLengths.FIELD_ID) > 8) {
9055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            throw new TestErrorException("Improper FieldID value length = "
9065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    + TypesLengths.getTypeLength(TypesLengths.FIELD_ID));
9075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
9085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        reading_data_index = reading_data_index
9095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + TypesLengths.getTypeLength(TypesLengths.FIELD_ID);
9105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        long result = readFromByteArray(data, reading_data_index
9115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - TypesLengths.getTypeLength(TypesLengths.FIELD_ID),
9125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                TypesLengths.getTypeLength(TypesLengths.FIELD_ID));
9135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return result;
9145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
9155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
9165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
9175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets the next value of the data of the Packet as FrameID VM-sensitive
9185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * value. If length is less than 8 bytes, the appropriate high bits in the
9195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * val value will be ignored.
9205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
9215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param frameID
9225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            FrameID value.
9235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
9245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setNextValueAsFrameID(long frameID) {
9255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (TypesLengths.getTypeLength(TypesLengths.FRAME_ID) < 0
9265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                || TypesLengths.getTypeLength(TypesLengths.FRAME_ID) > 8) {
9275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            throw new TestErrorException("Improper FrameID value length = "
9285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    + TypesLengths.getTypeLength(TypesLengths.FRAME_ID));
9295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
9305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        int new_data_size = data.length
9315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + TypesLengths.getTypeLength(TypesLengths.FRAME_ID);
9325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        byte data_temp[] = data;
9335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        data = new byte[new_data_size];
9345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        System.arraycopy(data_temp, 0, data, 0, new_data_size
9355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - TypesLengths.getTypeLength(TypesLengths.FRAME_ID));
9365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.writeAtByteArray(frameID, data, new_data_size
9375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - TypesLengths.getTypeLength(TypesLengths.FRAME_ID),
9385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                TypesLengths.getTypeLength(TypesLengths.FRAME_ID));
9395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
9405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
9415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
9425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets the next value of the data of the Packet as FrameID VM-sensitive
9435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * value. If length is less than 8 bytes, the appropriate high bits in the
9445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * returned value can be ignored.
9455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
9465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return the next value of the data of the Packet as VM-sensitive value.
9475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
9485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public long getNextValueAsFrameID() {
9495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (TypesLengths.getTypeLength(TypesLengths.FRAME_ID) < 0
9505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                || TypesLengths.getTypeLength(TypesLengths.FRAME_ID) > 8) {
9515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            throw new TestErrorException("Improper FrameID value length = "
9525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    + TypesLengths.getTypeLength(TypesLengths.FRAME_ID));
9535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
9545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        reading_data_index = reading_data_index
9555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + TypesLengths.getTypeLength(TypesLengths.FRAME_ID);
9565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        long result = readFromByteArray(data, reading_data_index
9575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                - TypesLengths.getTypeLength(TypesLengths.FRAME_ID),
9585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                TypesLengths.getTypeLength(TypesLengths.FRAME_ID));
9595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return result;
9605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
9615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
9625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
9635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets the next value of the data of the Packet as Location VM-sensitive
9645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * value. If length is less than 8 bytes, the appropriate high bits in the
9655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * val value will be ignored.
9665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
9675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param location
9685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            Location value.
9695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
9705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setNextValueAsLocation(Location location) {
9715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.setNextValueAsByte(location.tag);
9725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.setNextValueAsClassID(location.classID);
9735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.setNextValueAsMethodID(location.methodID);
9745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.setNextValueAsLong(location.index);
9755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
9765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
9775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
9785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets the next value of the data of the Packet as Location VM-sensitive
9795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * value. If length is less than 8 bytes, the appropriate high bits in the
9805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * returned value can be ignored.
9815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
9825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return the next value of the data of the Packet as VM-sensitive value.
9835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
9845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public Location getNextValueAsLocation() {
9855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        Location location = new Location();
9865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        location.tag = this.getNextValueAsByte();
9875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        location.classID = this.getNextValueAsClassID();
9885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        location.methodID = this.getNextValueAsMethodID();
9895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        location.index = this.getNextValueAsLong();
9905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return location;
9915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
9925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
9935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
9945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets the next value of the data of the Packet as Value VM-sensitive
9955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * value. If length is less than 8 bytes, the appropriate high bits in the
9965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * val value will be ignored.
9975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
9985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param value
9995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            Value value.
10005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @throws UnsupportedEncodingException
10015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
10025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setNextValueAsValue(Value value) {
10035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.setNextValueAsByte(value.getTag());
10045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        setNextValueAsUntaggedValue(value);
10055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
10065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
10075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
10085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets the next value of the data of the Packet as Value VM-sensitive
10095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * value. If length is less than 8 bytes, the appropriate high bits in the
10105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * returned value can be ignored.
10115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
10125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return the next value of the data of the Packet as VM-sensitive value.
10135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
10145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public Value getNextValueAsValue() {
10155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        byte tag = this.getNextValueAsByte();
10165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return getNextValueAsUntaggedValue(tag);
10175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
10185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
10195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
10205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets the next value of the data of the Packet as UntaggedValue
10215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * VM-sensitive value. If length is less than 8 bytes, the appropriate high
10225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * bits in the val value will be ignored.
10235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
10245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param value
10255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            UntaggedValue value.
10265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @throws UnsupportedEncodingException
10275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
10285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setNextValueAsUntaggedValue(Value value) {
10295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        switch (value.getTag()) {
10305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.BOOLEAN_TAG:
10315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            this.setNextValueAsBoolean(value.getBooleanValue());
10325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
10335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.BYTE_TAG:
10345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            this.setNextValueAsByte(value.getByteValue());
10355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
10365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.CHAR_TAG:
10375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            this.setNextValueAsChar(value.getCharValue());
10385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
10395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.DOUBLE_TAG:
10405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            this.setNextValueAsDouble(value.getDoubleValue());
10415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
10425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.FLOAT_TAG:
10435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            this.setNextValueAsFloat(value.getFloatValue());
10445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
10455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.INT_TAG:
10465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            this.setNextValueAsInt(value.getIntValue());
10475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
10485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.LONG_TAG:
10495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            this.setNextValueAsLong(value.getLongValue());
10505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
10515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.SHORT_TAG:
10525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            this.setNextValueAsShort(value.getShortValue());
10535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
10545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.VOID_TAG:
10555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
10565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.STRING_TAG:
10575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.ARRAY_TAG:
10585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.CLASS_LOADER_TAG:
10595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.CLASS_OBJECT_TAG:
10605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.OBJECT_TAG:
10615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.THREAD_GROUP_TAG:
10625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.THREAD_TAG:
10635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            this.setNextValueAsObjectID(value.getLongValue());
10645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
10655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        default:
10665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            throw new TestErrorException("Illegal tag value = "
10675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    + value.getTag());
10685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
10695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
10705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
10715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
10725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets the next value of the data of the Packet as UntaggedValue
10735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * VM-sensitive value. If length is less than 8 bytes, the appropriate high
10745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * bits in the returned value can be ignored.
10755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
10765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return the next value of the data of the Packet as VM-sensitive value.
10775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
10785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public Value getNextValueAsUntaggedValue(byte tag) {
10795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        Value value = null;
10805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        switch (tag) {
10815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.BOOLEAN_TAG:
10825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            value = new Value(this.getNextValueAsBoolean());
10835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
10845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.BYTE_TAG:
10855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            value = new Value(this.getNextValueAsByte());
10865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
10875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.CHAR_TAG:
10885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            value = new Value(this.getNextValueAsChar());
10895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
10905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.DOUBLE_TAG:
10915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            value = new Value(this.getNextValueAsDouble());
10925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
10935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.FLOAT_TAG:
10945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            value = new Value(this.getNextValueAsFloat());
10955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
10965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.INT_TAG:
10975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            value = new Value(this.getNextValueAsInt());
10985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
10995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.LONG_TAG:
11005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            value = new Value(this.getNextValueAsLong());
11015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
11025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.SHORT_TAG:
11035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            value = new Value(this.getNextValueAsShort());
11045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
11055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.STRING_TAG:
11065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.ARRAY_TAG:
11075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.CLASS_LOADER_TAG:
11085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.CLASS_OBJECT_TAG:
11095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.OBJECT_TAG:
11105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.THREAD_GROUP_TAG:
11115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.THREAD_TAG:
11125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            value = new Value(tag, this.getNextValueAsObjectID());
11135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
1114c707eb40c4f99474ffeedab17a5fd562a7808238Sebastien Hertz        case JDWPConstants.Tag.VOID_TAG:
1115c707eb40c4f99474ffeedab17a5fd562a7808238Sebastien Hertz            // no bytes to read.
1116c707eb40c4f99474ffeedab17a5fd562a7808238Sebastien Hertz            break;
11175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        default:
11185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            throw new TestErrorException("Illegal tag value = " + tag);
11195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
11205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return value;
11215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
11225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
11235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
11245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets the next value of the data of the Packet as ArrayRegion VM-sensitive
11255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * value. If length is less than 8 bytes, the appropriate high bits in the
11265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * val value will be ignored.
11275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
11285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param array
11295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            ArrayRegion value.
11305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @throws UnsupportedEncodingException
11315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
11325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    // public void setNextValueAsArrayRegion(ArrayRegion array) throws
11335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    // UnsupportedEncodingException {
11345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setNextValueAsArrayRegion(ArrayRegion array) {
11355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.setNextValueAsByte(array.getTag());
11365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.setNextValueAsInt(array.getLength());
11375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        for (int i = 0; i < array.getLength(); i++) {
11385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            if (isValuePrimitiveType(array.getTag())) {
11395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                switch (array.getTag()) {
11405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                case JDWPConstants.Tag.BOOLEAN_TAG:
11415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    this.setNextValueAsBoolean(array.getValue(i)
11425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                            .getBooleanValue());
11435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    break;
11445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                case JDWPConstants.Tag.BYTE_TAG:
11455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    this.setNextValueAsByte(array.getValue(i).getByteValue());
11465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    break;
11475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                case JDWPConstants.Tag.DOUBLE_TAG:
11485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    this.setNextValueAsDouble(array.getValue(i)
11495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                            .getDoubleValue());
11505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    break;
11515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                case JDWPConstants.Tag.FLOAT_TAG:
11525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    this.setNextValueAsFloat(array.getValue(i).getFloatValue());
11535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    break;
11545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                case JDWPConstants.Tag.INT_TAG:
11555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    this.setNextValueAsInt(array.getValue(i).getIntValue());
11565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    break;
11575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                case JDWPConstants.Tag.LONG_TAG:
11585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    this.setNextValueAsLong(array.getValue(i).getLongValue());
11595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    break;
11605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                case JDWPConstants.Tag.SHORT_TAG:
11615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    this.setNextValueAsShort(array.getValue(i).getShortValue());
11625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    break;
11635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                default:
11645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    throw new TestErrorException("Illegal tag value = "
11655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                            + array.getTag());
11665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                }
11675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            } else {
11685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                this.setNextValueAsValue(array.getValue(i));
11695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            }
11705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
11715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
11725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
11735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
11745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets the next value of the data of the Packet as ArrayRegion VM-sensitive
11755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * value. If length is less than 8 bytes, the appropriate high bits in the
11765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * returned value can be ignored.
11775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
11785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return the next value of the data of the Packet as VM-sensitive value.
11795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
11805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public ArrayRegion getNextValueAsArrayRegion() {
11815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        byte array_tag = this.getNextValueAsByte();
11825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        int array_length = this.getNextValueAsInt();
11835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
11845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        ArrayRegion array = new ArrayRegion(array_tag, array_length);
11855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
11865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        for (int i = 0; i < array_length; i++) {
11875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            if (isValuePrimitiveType(array_tag))
11885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                array.setValue(i, this.getNextValueAsUntaggedValue(array_tag));
11895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            else
11905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                array.setValue(i, this.getNextValueAsValue());
11915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
11925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return array;
11935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
11945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
11955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
11965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets the representation of the Packet as array of bytes in the JDWP
11975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * format including header and data sections.
11985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
11995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return bytes representation of this packet
12005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
12015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public byte[] toBytesArray() {
12025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        byte res[] = new byte[data.length + HEADER_SIZE];
12035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        writeAtByteArray(data.length + HEADER_SIZE, res, LENGTH_INDEX, INT_SIZE);
12045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        writeAtByteArray(id, res, ID_INDEX, INT_SIZE);
12055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        res[FLAGS_INDEX] = flags;
12065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        System.arraycopy(data, 0, res, HEADER_SIZE, data.length);
12075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return res;
12085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
12095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
12105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
12115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Reads value from array of bytes ar[] starting form index and reading size
12125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * bytes. If size is less than 8, the appropriate high bits in the resulting
12135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * long value will be zero.
12145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
12155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param ar
12165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            the array of bytes where the value is read from.
12175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param from
12185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            index to start reading bytes.
12195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param size
12205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            number of bytes to read
12215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
12225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    protected static long readFromByteArray(byte ar[], int from, int size) {
12235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        long res = 0;
12245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        byte temp;
12255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        for (int i = 0; i < size; i++) {
12265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            temp = ar[from + i];
12275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            res = (res << 8) | (((long) temp) & 0xFF);
12285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
12295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return res;
12305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
12315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
12325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
12335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Tells whether the packet is reply.
12345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
12355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return true if this packet is reply, false if it is command
12365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
12375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public boolean isReply() {
12385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return (flags & REPLY_PACKET_FLAG) != 0;
12395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
12405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
12415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
12425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Checks whether all data has been read from the packet.
12435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
12445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return boolean
12455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
12465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public boolean isAllDataRead() {
12475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return reading_data_index == data.length;
12485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
12495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
12505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
12515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Writes value - val to the array of bytes ar[], beginning from index - to,
12525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * size of value is - size bytes. If size is less than 8, the appropriate
12535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * high bits in the val value will be ignored.
12545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
12555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param val
12565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            the value, which will be written in the array.
12575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param ar
12585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            the array of bytes where the value is read from.
12595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param to
12605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            the beginning index in the array of bytes.
12615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param size
12625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            size of value in bytes.
12635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
12645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    protected void writeAtByteArray(long val, byte ar[], int to, int size) {
12655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        for (int i = 0; i < size; i++) {
12665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            ar[to + i] = (byte) (val >> 8 * (size - 1 - i));
12675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
12685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
12695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
12705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
12715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns true if this bytes array can be interpreted as reply packet.
12725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
12735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param p
12745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            bytes representation of packet
12755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return true or false
12765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
12775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public static boolean isReply(byte[] p) {
12785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (p.length < FLAGS_INDEX)
12795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return false;
12805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return (p[FLAGS_INDEX] & REPLY_PACKET_FLAG) != 0;
12815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
12825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
12835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
12845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns packet length from header of given packet bytes.
12855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
12865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param p
12875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            bytes representation of packet
12885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return true or false
12895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
12905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public static int getPacketLength(byte[] p) {
12915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return (int) readFromByteArray(p, LENGTH_INDEX, INT_SIZE);
12925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
12935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
12945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
12955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Enwraps this bytes array either to ReplyPacket or EventPacket instance,
12965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * according to result of isReply().
12975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
12985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param p
12995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            bytes array to enwrap into packet
13005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return new created ReplyPacket or CommandPacket
13015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
13025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public static Packet interpretPacket(byte[] p) {
13035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (p.length < HEADER_SIZE)
13045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            throw new TestErrorException("Wrong packet");
13055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (Packet.isReply(p))
13065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return new ReplyPacket(p);
13075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return new EventPacket(p);
13085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
13095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes}
1310