aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/util/Stack.java
blob: bc4588898cb74f130a29380ed49050ed9f754b6d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/* Copyright (C) 1998, 1999  Cygnus Solutions

   This file is part of libgcj.

This software is copyrighted work licensed under the terms of the
Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
details.  */

package java.util;

/**
 * @author Warren Levy <warrenl@cygnus.com>
 * @date August 20, 1998.
 */
/* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
 * "The Java Language Specification", ISBN 0-201-63451-1
 * plus online API docs for JDK 1.2 beta from http://www.javasoft.com.
 * Status:  Believed complete and correct
 */

public class Stack extends Vector
{
  // Could use Vector methods internally for the following methods
  // but have used Vector fields directly for efficiency (i.e. this
  // often reduces out duplicate bounds checking).

  public boolean empty()
  {
    return elementCount == 0;
  }

  public synchronized Object peek()
  {
    if (elementCount == 0)
      throw new EmptyStackException();

    return elementData[elementCount - 1];
  }

  public synchronized Object pop()
  {
    if (elementCount == 0)
      throw new EmptyStackException();

    Object obj = elementData[--elementCount];

    // Set topmost element to null to assist the gc in cleanup
    elementData[elementCount] = null;
    return obj;
  }

  public Object push(Object obj)
  {
    // When growing the Stack, use the Vector routines in case more
    // memory is needed.
    // Note: spec indicates that this method *always* returns obj passed in!

    addElement(obj);
    return obj;
  }

  public synchronized int search(Object obj)
  {
    // Return the position of obj on the stack as measured from the top;
    // i.e. the top element is 1, the next element down is 2, etc.
    // If obj is not on the stack, return -1

    for (int i = elementCount-1; i >=0; --i)
      if (elementData[i].equals(obj))
	return elementCount - i;

    return -1;
  }
}