1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License. 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage com.android.dx.rop.cst; 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Interface for constant pools, which are, more or less, just lists of 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@link Constant} objects. 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic interface ConstantPool { 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Get the "size" of the constant pool. This corresponds to the 2699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * class file field {@code constant_pool_count}, and is in fact 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * always at least one more than the actual size of the constant pool, 2899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * as element {@code 0} is always invalid. 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return {@code >= 1;} the size 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int size(); 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * Get the {@code n}th entry in the constant pool, which must 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * be valid. 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @param n {@code n >= 0, n < size();} the constant pool index 3999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return {@code non-null;} the corresponding entry 4099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @throws IllegalArgumentException thrown if {@code n} is 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * in-range but invalid 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Constant get(int n); 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 4699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * Get the {@code n}th entry in the constant pool, which must 4799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * be valid unless {@code n == 0}, in which case {@code null} 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * is returned. 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @param n {@code n >= 0, n < size();} the constant pool index 5199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return {@code null-ok;} the corresponding entry, if {@code n != 0} 5299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @throws IllegalArgumentException thrown if {@code n} is 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * in-range and non-zero but invalid 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Constant get0Ok(int n); 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 5899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * Get the {@code n}th entry in the constant pool, or 5999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * {@code null} if the index is in-range but invalid. In 6099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * particular, {@code null} is returned for index {@code 0} 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * as well as the index after any entry which is defined to take up 6299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * two slots (that is, {@code Long} and {@code Double} 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * entries). 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @param n {@code n >= 0, n < size();} the constant pool index 6699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return {@code null-ok;} the corresponding entry, or {@code null} if 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the index is in-range but invalid 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Constant getOrNull(int n); 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 71