package lab;

/**
 * Laboratorio de la semana 11: el stack acotado genérico de la semana 10, ahora iterable.
 * Esqueleto con las mismas firmas y el mismo contrato que code/week-10/BoundedStack.java:
 * copien aquí su implementación de la semana 10 (con su invariante y sus pruebas, en
 * BoundedStackTest.java) o complétenla ahora.
 * Parte 4: hacerlo Iterable<E> (del tope hacia el fondo) con una clase interna que
 * implemente Iterator<E>, y recorrerlo con for-each.
 */
public class BoundedStack<E> {

    /** Crea un stack vacío con capacidad para capacity elementos (capacity > 0). */
    public BoundedStack(int capacity) {
        // TODO: validar capacity y crear el arreglo interno (ver los apuntes: new E[n] no compila)
    }

    /** Pone x arriba. Lanza IllegalStateException si el stack está lleno. */
    public void push(E x) {
        throw new UnsupportedOperationException("por implementar");
    }

    /** Saca y devuelve el elemento de arriba. Lanza IllegalStateException si está vacío. */
    public E pop() {
        throw new UnsupportedOperationException("por implementar");
    }

    /** El elemento de arriba, sin sacarlo. Lanza IllegalStateException si está vacío. */
    public E peek() {
        throw new UnsupportedOperationException("por implementar");
    }

    public int size() {
        throw new UnsupportedOperationException("por implementar");
    }

    public boolean isEmpty() {
        return size() == 0;
    }

    public boolean isFull() {
        throw new UnsupportedOperationException("por implementar");
    }
}
