package music;

/**
 * Lo que hace un ArrayList por dentro: un arreglo parcialmente lleno, un
 * contador y, cuando se llena, una copia a un arreglo del doble de tamaño.
 */
public class ArrayPlaylist {
    private Song[] songs = new Song[2];     // capacidad inicial pequeña, para verlo crecer
    private int count = 0;                  // songs[0..count-1] están en uso

    public void add(Song song) {
        if (count == songs.length) {
            grow();
        }
        songs[count] = song;
        count++;
    }

    public int size() {
        return count;
    }

    public int capacity() {
        return songs.length;
    }

    public Song get(int index) {
        if (index < 0 || index >= count) {
            throw new IllegalArgumentException("índice " + index + " fuera de 0.." + (count - 1));
        }
        return songs[index];
    }

    private void grow() {
        Song[] bigger = new Song[songs.length * 2];
        for (int i = 0; i < count; i++) {
            bigger[i] = songs[i];           // se copian referencias, no canciones
        }
        songs = bigger;                     // el arreglo viejo queda para el garbage collector
    }
}
