/**
 * Ebben a fajlban a vector ososztaly talalhato
 * NEM TARTALMAZ MODOSITANDO RESZEKET!!!
 */
package vector;

/**
 * Dinamikus meretu vector osztaly, amely kepes rendezni az elemeit 
 * NEM KELL MODOSITANI!!!
 * 
 * @author Gabor
 *
 */
public abstract class Vector {

	VectorElement[] array = new VectorElement[0]; // tombbel valositja meg az elemek tarolasat
		
	
	/**
	 * Beteszi az e elemet a vectorba
	 * @param o A betenni kivant elem
	 * @param index Az elem helye a vectorban 
	 */
	public void put(VectorElement e, int index)
	{
		if (array.length<=index)  // ha tulindexelunk, noveli a tomb meretet
		{
			VectorElement[] newArray = new VectorElement[index+1]; // uj es nagyobb tomb
			System.arraycopy(array, 0, newArray, 0, array.length); // masolja a regi tartalmat
			array = newArray;
		}
		array[index] = e;
	}
	

	/**
	 * Kivesz egy elemet a megadott helyrol
	 * @param index A kivenni kivant elem helye
	 * @return A kivett elem
	 */
	public VectorElement get(int index)
	{
		if (0<=index && index<array.length)  // helyes-e az indexeles 
			return array[index];
		else throw new IndexOutOfBoundsException(); // ha nem, akkor kivetelt dob
	}
	
	
	/**
	 * Kiuriti a vectort
	 */
	public void clear()
	{
		array = null; 
	}
	

	public String toString()
	{
		String s = "";
		for (VectorElement e : array)
			if (e != null)
				s += e.toString() + "\n";
				
		return s; 
	}
	
	/**
	 * Rendezi a vectort
	 * CSAK A LESZARMAZOTTAKBAN KELL KIDOLGOZNI!!!
	 */
	abstract void sort();
	
	
	
}
