/*Felix-vimalaratnam
Patrick*/

public class FileTableau<E> implements File<E> {
    private static final int CAPACITE_INITIALE = 20;
    private E[] elements;
    private int taille = 0;
    private int debut = 0;
    private int fin = 0;

    @SuppressWarnings("unchecked")
    public FileTableau() {
        elements = (E[]) new Object[CAPACITE_INITIALE]; // Création du tableau initial
    }

    @Override
    public void ajouter(E element) {
        elements[fin] = element;
        fin = (fin + 1);
        taille++;
    }

    @Override
    public E retirer() {
        if (estVide()) {
            throw new IllegalStateException("La file est vide");
        }
        E element = elements[debut];
        elements[debut] = null; // Supprime la référence pour éviter les fuites de mémoire
        debut = (debut + 1);
        taille--;
        return element;
    }

    @Override
    public int taille() {
        return taille;
    }

    @Override
    public boolean estVide() {
        return taille == 0;
    }
}