1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  this work for additional information regarding copyright ownership.
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  the License.  You may obtain a copy of the License at
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  See the License for the specific language governing permissions and
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  limitations under the License.
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage java.util;
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/**
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code Stack} is a Last-In/First-Out(LIFO) data structure which represents a
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * stack of objects. It enables users to pop to and push from the stack,
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * including null objects. There is no limit to the size of the stack.
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class Stack<E> extends Vector<E> {
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private static final long serialVersionUID = 1224463164541339165L;
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Constructs a stack with the default size of {@code Vector}.
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public Stack() {
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super();
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns whether the stack is empty or not.
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return {@code true} if the stack is empty, {@code false} otherwise.
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public boolean empty() {
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return elementCount == 0;
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the element at the top of the stack without removing it.
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the element at the top of the stack.
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws EmptyStackException
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the stack is empty.
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #pop
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public synchronized E peek() {
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return (E)elementData[elementCount - 1];
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IndexOutOfBoundsException e) {
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new EmptyStackException();
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the element at the top of the stack and removes it.
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the element at the top of the stack.
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws EmptyStackException
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the stack is empty.
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #peek
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #push
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public synchronized E pop() {
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int index = elementCount - 1;
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            E obj = (E)elementData[index];
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            removeElementAt(index);
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return obj;
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IndexOutOfBoundsException e) {
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new EmptyStackException();
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Pushes the specified object onto the top of the stack.
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param object
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            The object to be added on top of the stack.
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the object argument.
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #peek
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #pop
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public synchronized E push(E object) {
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        addElement(object);
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return object;
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the index of the first occurrence of the object, starting from
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the top of the stack.
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the index of the first occurrence of the object, assuming that
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *         the topmost object on the stack has a distance of one.
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param o
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the object to be searched.
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public synchronized int search(Object o) {
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int index = lastIndexOf(o);
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (index >= 0)
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return (elementCount - index);
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return -1;
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
121