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.cf.iface; 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Interface for lists of attributes. 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic interface AttributeList { 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Get whether this instance is mutable. Note that the 2599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * {@code AttributeList} interface itself doesn't provide any means 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * of mutation, but that doesn't mean that there isn't a non-interface 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * way of mutating an instance. 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return {@code true} iff this instance is somehow mutable 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean isMutable(); 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Get the number of attributes in the list. 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the size 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int size(); 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 4199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * Get the {@code n}th attribute. 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @param n {@code n >= 0, n < size();} which attribute 4499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return {@code non-null;} the attribute in question 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Attribute get(int n); 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Get the total length of this list in bytes, when part of a 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * class file. The returned value includes the two bytes for the 5199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * {@code attributes_count} length indicator. 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return {@code >= 2;} the total length, in bytes 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int byteLength(); 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Get the first attribute in the list with the given name, if any. 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @param name {@code non-null;} attribute name 6199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return {@code null-ok;} first attribute in the list with the given name, 6299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * or {@code null} if there is none 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Attribute findFirst(String name); 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Get the next attribute in the list after the given one, with the same 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * name, if any. 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @param attrib {@code non-null;} attribute to start looking after 7199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @return {@code null-ok;} next attribute after {@code attrib} with the 7299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * same name as {@code attrib} 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Attribute findNext(Attribute attrib); 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 76