// List.h

#ifndef _LIST_H_
#define _LIST_H_


#include "Types.h"


template <class Type>
class CList
{
	private:

		Type
			**List;


	public:

		s32
			Count;


		CList();
		~CList();

		Type *operator []( s32 index );

		void Clear();
		void Add( Type *element );
};

template <class Type>
CList<Type>::CList()
{
	List = NULL;
	Count = 0;
}


template <class Type>
CList<Type>::~CList()
{
	s32
		i;

	for (i=0; i<Count; i++)
		delete List[i];

	delete [] List;
	List = NULL;

	Count = 0;
}


template <class Type>
Type *CList<Type>::operator []( s32 index )
{
	return( List[index] );
}


template <class Type>
void CList<Type>::Clear()
{
	s32
		i;

	for (i=0; i<Count; i++)
		delete List[i];

	delete [] List;
	List = NULL;

	Count = 0;
}


template <class Type>
void CList<Type>::Add( Type *element )
{
	Type
		**old;
	s32
		i,
		count;

	old = List;
	count = Count;
	Count++;
	List = new Type *[Count];
	for (i=0; i<count; i++)
		List[i] = old[i];
	List[i] = element;
	delete [] old;
}


#endif
