import java.lang.Object;


public class Path
{
	private Position[]   Positions;
	private int          size;
	private int          count;


	public Path(int _size)
	{
        size    = _size;

	    Positions = new Position[size];
		for (int c=0; c<size; c++)
		{
	    	Positions[c] = new Position(-1, -1);
	    }
        count   = 0;
    }



	public synchronized int Add(Position _to)
	{
        if (!Full())
        {
            Positions[count] = _to;
            count++;
            return count;
        }
        return 0;
	}


	public synchronized int UndoAdd()
	{
        if (!Empty())
        {
            count--;
            Positions[count] = new Position(-1,-1);
            return count;
        }
        return 0;
	}


	public void Clear()
	{
		for (int c=0; c<size; c++)
		{
	    	Positions[c] = new Position(-1, -1);
	    }
	    count   = 1;
    }



	public synchronized Position Get(int _index)
	{
	    if ( (_index >= 0) && (_index < size) )   return Positions[_index];
	    else                                      return null;
	}


	public synchronized Position Last()
	{
        return Get(count - 1);
	}


	public synchronized Position BeforeLast()
	{
        return Get(count - 2);
	}


	public synchronized int Count()
	{
	    return count;
	}


	public synchronized int Size()
	{
	    return size;
	}


	public synchronized boolean Full()
	{
	    return (count == size);
	}


	public synchronized boolean Empty()
	{
	    return (count == 0);
	}

}

