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

import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author 42071420684
 */
public class Main {

  /**
   * @param args the command line arguments
   */
  public static void main(String[] args) {
    IPilha<Integer> pilha;

    // Usando Pilha com delegadacao
    System.out.println(">> Pilha com delegacao");
    pilha = new PilhaDelegada<Integer>();
    operaPilha(pilha);

    // Usando Pilha implementada por heranca
    System.out.println(">> Pilha com heranca");
    pilha = new PilhaHerdada<Integer>();
    operaPilha(pilha);

  }

  public static void operaPilha(IPilha<Integer> p) {
    try {
      p.push(5);
      System.out.println("Topo da pilha:" + p.top());
      p.push(2);
      System.out.println("Topo da pilha:" + p.top());

      int val1 = p.pop();
      System.out.println("valor retirado da pilha:" + val1);
      System.out.println("Topo da pilha:" + p.top());
      
      int val2 = p.pop();
      System.out.println("valor retirado da pilha:" + val2);
      if (! p.vazia()) {
        System.out.println("Topo da pilha:" + p.top());
      }
      
      int result = val1 + val2;
      p.push(result);
      System.out.println("Topo da pilha:" + p.top());

    } catch (PilhaException ex) {
      Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    }
  }
}
