1 /*
2  * Copyright (C) 2011 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.dex;
18 
19 public final class SizeOf {
SizeOf()20     private SizeOf() {}
21 
22     public static final int UBYTE = 1;
23     public static final int USHORT = 2;
24     public static final int UINT = 4;
25 
26     public static final int SIGNATURE = UBYTE * 20;
27 
28     /**
29      * magic ubyte[8]
30      * checksum uint
31      * signature ubyte[20]
32      * file_size uint
33      * header_size uint
34      * endian_tag uint
35      * link_size uint
36      * link_off uint
37      * map_off uint
38      * string_ids_size uint
39      * string_ids_off uint
40      * type_ids_size uint
41      * type_ids_off uint
42      * proto_ids_size uint
43      * proto_ids_off uint
44      * field_ids_size uint
45      * field_ids_off uint
46      * method_ids_size uint
47      * method_ids_off uint
48      * class_defs_size uint
49      * class_defs_off uint
50      * data_size uint
51      * data_off uint
52      */
53     public static final int HEADER_ITEM = (8 * UBYTE) + UINT + SIGNATURE + (20 * UINT); // 0x70
54 
55     /**
56      * string_data_off uint
57      */
58     public static final int STRING_ID_ITEM = UINT;
59 
60     /**
61      * descriptor_idx uint
62      */
63     public static final int TYPE_ID_ITEM = UINT;
64 
65     /**
66      * type_idx ushort
67      */
68     public static final int TYPE_ITEM = USHORT;
69 
70     /**
71      * shorty_idx uint
72      * return_type_idx uint
73      * return_type_idx uint
74      */
75     public static final int PROTO_ID_ITEM = UINT + UINT + UINT;
76 
77     /**
78      * class_idx ushort
79      * type_idx/proto_idx ushort
80      * name_idx uint
81      */
82     public static final int MEMBER_ID_ITEM = USHORT + USHORT + UINT;
83 
84     /**
85      * class_idx uint
86      * access_flags uint
87      * superclass_idx uint
88      * interfaces_off uint
89      * source_file_idx uint
90      * annotations_off uint
91      * class_data_off uint
92      * static_values_off uint
93      */
94     public static final int CLASS_DEF_ITEM = 8 * UINT;
95 
96     /**
97      * type ushort
98      * unused ushort
99      * size uint
100      * offset uint
101      */
102     public static final int MAP_ITEM = USHORT + USHORT + UINT + UINT;
103 
104     /**
105      * start_addr uint
106      * insn_count ushort
107      * handler_off ushort
108      */
109     public static final int TRY_ITEM = UINT + USHORT + USHORT;
110 
111     /**
112      * call_site_off uint
113      */
114     public static final int CALL_SITE_ID_ITEM = UINT;
115 
116     /**
117      * method_handle_type ushort
118      * unused ushort
119      * field_or_method_id ushort
120      * unused ushort
121      */
122     public static final int METHOD_HANDLE_ITEM = USHORT + USHORT + USHORT + USHORT;
123 }
124