1917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul/* 2917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * Copyright (C) 2007 The Android Open Source Project 3917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * 4917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * Licensed under the Apache License, Version 2.0 (the "License"); 5917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * you may not use this file except in compliance with the License. 6917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * You may obtain a copy of the License at 7917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * 8917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * http://www.apache.org/licenses/LICENSE-2.0 9917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * 10917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * Unless required by applicable law or agreed to in writing, software 11917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * distributed under the License is distributed on an "AS IS" BASIS, 12917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * See the License for the specific language governing permissions and 14917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * limitations under the License. 15917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul */ 16917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul 17917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgulpackage com.android.dexgen.rop.type; 18917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul 19917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul/** 20917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * List of {@link Type} instances (or of things that contain types). 21917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul */ 22917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgulpublic interface TypeList { 23917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul /** 24917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * Returns whether this instance is mutable. Note that the 25917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * {@code TypeList} interface itself doesn't provide any 26917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * means of mutation, but that doesn't mean that there isn't an 27917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * extra-interface way of mutating an instance. 28917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * 29917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * @return {@code true} if this instance is mutable or 30917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * {@code false} if it is immutable 31917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul */ 32917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul public boolean isMutable(); 33917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul 34917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul /** 35917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * Gets the size of this list. 36917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * 37917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * @return {@code >= 0;} the size 38917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul */ 39917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul public int size(); 40917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul 41917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul /** 42917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * Gets the indicated element. It is an error to call this with the 43917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * index for an element which was never set; if you do that, this 44917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * will throw {@code NullPointerException}. 45917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * 46917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * @param n {@code >= 0, < size();} which element 47917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * @return {@code non-null;} the indicated element 48917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul */ 49917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul public Type getType(int n); 50917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul 51917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul /** 52917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * Gets the number of 32-bit words required to hold instances of 53917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * all the elements of this list. This is a sum of the widths (categories) 54917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * of all the elements. 55917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * 56917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * @return {@code >= 0;} the required number of words 57917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul */ 58917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul public int getWordCount(); 59917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul 60917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul /** 61917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * Returns a new instance which is identical to this one, except that 62917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * the given item is appended to the end and it is guaranteed to be 63917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * immutable. 64917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * 65917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * @param type {@code non-null;} item to append 66917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * @return {@code non-null;} an appropriately-constructed instance 67917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul */ 68917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul public TypeList withAddedType(Type type); 69917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul} 70