/******************/
/*** List Class ***/
/******************/

#pragma warning( disable : 4786 )

#if !defined	__LIST_CLASS_HEADER__
#define			__LIST_CLASS_HEADER__

#include	<Vector>

/*****************************************************************************/

template <class T> class CList
{
public:

	int		Find(T &Item)
	{
		int		ListSize=List.size();

		for (int i=0; i<ListSize; i++)
		{
			if (List[i]==Item) return(i);
		}	
		return(-1);
	}

	int		Add(T &Item)
	{
		int		ListSize=List.size();
		int		Idx=Find(Item);	// Check if exists

		if (Idx!=-1) return(Idx);
		List.push_back(Item);
		return(ListSize);
	}

	int		push_back(T &Item)
	{
		int		ListSize=List.size();
		List.push_back(Item);
		return(ListSize);
	}

	void	clear()					{List.clear();}
	void	resize(int i)			{List.resize(i);}
	void	erase(int i)			{List.erase(List.begin()+i);}
	void	erase(int First,int Last)	{List.erase(List.begin()+First,List.begin()+Last);}
	void	insert(int i,T &Item)	{List.insert(List.begin()+i,Item);}
//	int		begin()					{return(List.begin);}


	int		size()					{return(List.size());}

	std::vector<T>	&GetList()		{return(List);}
	T& operator []( int nIndex )	{return(List[nIndex]);}

private:
	std::vector<T>		List;

};

/*****************************************************************************/
#endif