/*
  Copyright (c) October 2012 by Paweł Rzechonek
  Program definiuje klasę implementującą interfejs do operacji na zbiorze łańcuchów.
  Istotne elementy w programie:
    * implementacja interfejsu za pomocą tablicy dynamicznej;
    * implementacja klonowania.
*/

public class TablicaDynamiczna implements Zbior
{
    protected int zapełnienie;
    protected String[] tablica = new String[1];

    public void wstaw (String s)
    {
        if (s.equals("")) throw new IllegalArgumentException();
        if (zapełnienie==tablica.length)
        {
            String[] t = new String[zapełnienie*2];
            System.arraycopy(tablica,0,t,0,zapełnienie);
            tablica = t;
        }
        tablica[zapełnienie++] = s;
    }
    public boolean szukaj (String s)
    {
        for (String t: tablica)
            if (s.equals(t)) return true;
        return false;
    }
    public void czyść ()
    {
        zapełnienie = 0;
    }
    public int ile ()
    {
        return zapełnienie;
    }
    public int pojemność ()
    {
        return tablica.length;
    }

    public TablicaDynamiczna clone ()
    {
        try
        {
            TablicaDynamiczna td = (TablicaDynamiczna)super.clone();
            td.tablica = tablica.clone();
            return td;
        }
        catch (Exception ex) { return null; }
    }

    public String toString ()
    {
        StringBuffer sb = new StringBuffer("(");
        for (int i=0; i<zapełnienie; ++i) sb.append("\""+tablica[i]+"\" "+(i<zapełnienie-1?", ":""));
        return sb+")";
    }
}
