/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package exemplopilha;

import java.util.ArrayList;

/**
 *
 * @author 42071420684
 */
public class PilhaDelegada<T> implements IPilha<T> {

  private ArrayList<T> vet_;
  private int top_ = 0;          // top aponta para primeira posicao livre

  //------------------------------------------------------------
  // Construtores
  //------------------------------------------------------------
  public PilhaDelegada(int initiaCapacity) {
    this.vet_ = new ArrayList<T>(initiaCapacity);
  }

  public PilhaDelegada() {
    this.vet_ = new ArrayList<T>();
  }

  //------------------------------------------------------------
  // Iterface IPilha
  //------------------------------------------------------------
  public boolean vazia() {
    return top_ == 0;
  }

  public T top() throws PilhaException {
    if (vazia()) {
      throw new PilhaException("Pilha vazia: tentativa de obter o topo");
    } else {
      return vet_.get(top_-1);
    }
  }

  public T pop() throws PilhaException {
    if (vazia()) {
      throw new PilhaException("Pilha vazia: tentativa de desempilhar");
    } else {
      return vet_.get(--top_);
    }
  }

  public void push(T val) throws PilhaException {
    vet_.add(top_++, val);
  }
}
