TypesLengths.java revision 5f0a23683aa603d8c50b6dd071a565821b76067b
1/*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements.  See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License.  You may obtain a copy of the License at
8 *
9 *     http://www.apache.org/licenses/LICENSE-2.0
10 *
11 *  Unless required by applicable law or agreed to in writing, software
12 *  distributed under the License is distributed on an "AS IS" BASIS,
13 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 *
15 *  See the License for the specific language governing permissions and
16 *  limitations under the License.
17 */
18
19/**
20 * @author Aleksey V. Yantsen
21 */
22
23/**
24 * Created on 12.23.2004
25 */
26package org.apache.harmony.jpda.tests.framework.jdwp;
27
28import org.apache.harmony.jpda.tests.framework.TestErrorException;
29
30/**
31 * This class provides types length for VM-independent and VM-dependent types.
32 */
33public class TypesLengths {
34
35    // Type IDs
36    public static final byte BYTE_ID = 1;
37
38    public static final byte BOOLEAN_ID = 2;
39
40    public static final byte INT_ID = 3;
41
42    public static final byte LONG_ID = 4;
43
44    public static final byte SHORT_ID = 5;
45
46    public static final byte FLOAT_ID = 6;
47
48    public static final byte DOUBLE_ID = 7;
49
50    public static final byte VOID_ID = 8;
51
52    public static final byte OBJECT_ID = 9;
53
54    public static final byte ARRAY_ID = 10;
55
56    public static final byte STRING_ID = 11;
57
58    public static final byte THREAD_ID = 12;
59
60    public static final byte THREADGROUP_ID = 13;
61
62    public static final byte METHOD_ID = 14;
63
64    public static final byte FIELD_ID = 15;
65
66    public static final byte FRAME_ID = 16;
67
68    public static final byte LOCATION_ID = 17;
69
70    public static final byte REFERENCE_TYPE_ID = 18;
71
72    public static final byte CLASS_ID = 19;
73
74    public static final byte CLASSLOADER_ID = 20;
75
76    public static final byte CLASSOBJECT_ID = 21;
77
78    public static final byte CHAR_ID = 22;
79
80    // Type lengths in bytes (VM-independent)
81
82    private static int byteLength = 1;
83
84    private static int booleanLength = 1;
85
86    private static int intLength = 4;
87
88    private static int longLength = 8;
89
90    private static int shortLength = 2;
91
92    private static int floatLength = 4;
93
94    private static int doubleLength = 8;
95
96    private static int voidLength = 0;
97
98    private static int charLength = 2;
99
100    // Type lengths in bytes (VM-dependent)
101
102    private static int objectLength;
103
104    private static int arrayLength;
105
106    private static int stringLength;
107
108    private static int threadLength;
109
110    private static int threadGroupLength;
111
112    private static int methodLength;
113
114    private static int fieldLength;
115
116    private static int frameLength;
117
118    private static int locationLength;
119
120    private static int referenceLength;
121
122    private static int classLength;
123
124    private static int classLoaderLength;
125
126    private static int classObjectLength;
127
128    /**
129     * Gets types length for type ID.
130     *
131     * @param typeID
132     *            Type ID
133     * @return type length
134     */
135    public static int getTypeLength(byte typeID) throws TestErrorException {
136        switch (typeID) {
137        case BYTE_ID: {
138            return byteLength;
139        }
140        case BOOLEAN_ID: {
141            return booleanLength;
142        }
143        case INT_ID: {
144            return intLength;
145        }
146        case LONG_ID: {
147            return longLength;
148        }
149        case SHORT_ID: {
150            return shortLength;
151        }
152        case FLOAT_ID: {
153            return floatLength;
154        }
155        case DOUBLE_ID: {
156            return doubleLength;
157        }
158        case VOID_ID: {
159            return voidLength;
160        }
161        case OBJECT_ID: {
162            return objectLength;
163        }
164        case ARRAY_ID: {
165            return arrayLength;
166        }
167        case STRING_ID: {
168            return stringLength;
169        }
170        case THREAD_ID: {
171            return threadLength;
172        }
173        case THREADGROUP_ID: {
174            return threadGroupLength;
175        }
176        case METHOD_ID: {
177            return methodLength;
178        }
179        case FIELD_ID: {
180            return fieldLength;
181        }
182        case FRAME_ID: {
183            return frameLength;
184        }
185        case LOCATION_ID: {
186            return locationLength;
187        }
188        case REFERENCE_TYPE_ID: {
189            return referenceLength;
190        }
191        case CLASS_ID: {
192            return classLength;
193        }
194        case CLASSLOADER_ID: {
195            return classLoaderLength;
196        }
197        case CLASSOBJECT_ID: {
198            return classObjectLength;
199        }
200        case CHAR_ID: {
201            return charLength;
202        }
203        default:
204            throw new TestErrorException("Unexpected type ID: " + typeID);
205        }
206    }
207
208    /**
209     * Sets types length for type ID
210     *
211     * @param typeID Type ID
212     * @param typeLength type length
213     */
214    public static void setTypeLength(byte typeID, int typeLength)
215            throws TestErrorException {
216        switch (typeID) {
217        case BYTE_ID: {
218            byteLength = typeLength;
219            return;
220        }
221        case BOOLEAN_ID: {
222            booleanLength = typeLength;
223            return;
224        }
225        case INT_ID: {
226            intLength = typeLength;
227            return;
228        }
229        case LONG_ID: {
230            longLength = typeLength;
231            return;
232        }
233        case SHORT_ID: {
234            shortLength = typeLength;
235            return;
236        }
237        case FLOAT_ID: {
238            floatLength = typeLength;
239            return;
240        }
241        case DOUBLE_ID: {
242            doubleLength = typeLength;
243            return;
244        }
245        case VOID_ID: {
246            voidLength = typeLength;
247            return;
248        }
249        case OBJECT_ID: {
250            objectLength = typeLength;
251            return;
252        }
253        case ARRAY_ID: {
254            arrayLength = typeLength;
255            return;
256        }
257        case STRING_ID: {
258            stringLength = typeLength;
259            return;
260        }
261        case THREAD_ID: {
262            threadLength = typeLength;
263            return;
264        }
265        case THREADGROUP_ID: {
266            threadGroupLength = typeLength;
267            return;
268        }
269        case METHOD_ID: {
270            methodLength = typeLength;
271            return;
272        }
273        case FIELD_ID: {
274            fieldLength = typeLength;
275            return;
276        }
277        case FRAME_ID: {
278            frameLength = typeLength;
279            return;
280        }
281        case LOCATION_ID: {
282            locationLength = typeLength;
283            return;
284        }
285        case REFERENCE_TYPE_ID: {
286            referenceLength = typeLength;
287            return;
288        }
289        case CLASS_ID: {
290            classLength = typeLength;
291            return;
292        }
293        case CLASSLOADER_ID: {
294            classLoaderLength = typeLength;
295            return;
296        }
297        case CLASSOBJECT_ID: {
298            classObjectLength = typeLength;
299            return;
300        }
301        case CHAR_ID: {
302            classObjectLength = charLength;
303            return;
304        }
305        default:
306            throw new TestErrorException("Unexpected type ID: " + typeID);
307        }
308    }
309}
310