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