package cap9.pila;

public class Pila
{ static private final int DEFAULT_SIZE = 10;
  protected int size;
  protected int top;
  protected Object[] v;
  public Pila()
  { this(DEFAULT_SIZE);
  }
  public Pila(int s)
  { size = s;
    top = -1;
    v = new Object[size];
  }
  public boolean isEmpty()
  { return top == -1;
  }
  public boolean isFull()
  { return top == (size - 1);
  }
  public boolean push(Object elem)
  { if (isFull() || (elem == null))
      return false;
    top++;
    v[top] = elem;
    return true;
  }
  public Object pop()
  { if (isEmpty())
      return null;
    Object result = v[top];
    top--;
    return result;
  }
  public Object top()
  { if (isEmpty())
      return null;
    return v[top];
  }
  public String toString()
  { String ls = System.getProperty("line.separator");
    String s = "---" + ls;
    if (!isEmpty())
    { for (int i = top; i >= 0; i--)
        s += (v[i] + ls);
    }
    s += "---";
    return s;
  }
  public boolean equals(Object o)
  { if ((o == null) || !(o instanceof Pila))
      return false;
    Pila p = (Pila) o;
    if ((p.top != top) || (p.size != size))
      return false;
    for (int i = top; i >= 0; i--)
      if (!v[i].equals(p.v[i]))
        return false;
    return true;
  }
}
