#ifndef __CONTAINER_H
#define __CONTAINER_H

#include <iostream.h>

#ifndef false
	#define false 0
	#define true  1
#endif

class Text
{
	public:
		virtual char* getText()
		{
			return t;
		}
	protected:
		char *t;
};


template <class T>
class Container
{
	public:

		virtual T* first()      // Setzt AktContainerPosition auf das erste Element
										// und liefert den Zeiger darauf.
		{
			cerr << "first muss noch in der abgleiteten Klasse ueberschrieben werden!\n";
			return 0;
		}

		virtual T* next()       // Erhoeht AktContainerPosition um eins.
										// und liefert den Zeiger darauf.
		{
			cerr << "next muss noch in der abgleiteten Klasse ueberschrieben werden!\n";
			return 0;
		}

		virtual int isLast()   // Ist das Ende des Containers erreicht?
		{
			cerr << "isLast muss noch in der abgleiteten Klasse ueberschrieben werden!\n";
			return false;
		}

		virtual T* retrieve()
		{
			cerr << "retrieve muss noch in der abgleiteten Klasse ueberschrieben werden!\n";
			return 0;
		}

/*		virtual int operator[] (int pos)
		{
			cerr << "Muss noch in der abgleiteten Klasse ueberschrieben werden!\n";
			return 0;
		}
*/
		virtual int setPos (int)
		{
			cerr << "SetPos muss noch in der abgleiteten Klasse ueberschrieben werden!\n";
			return 0;
		}

		virtual int getPos ()
		{
			cerr << "SetPos muss noch in der abgleiteten Klasse ueberschrieben werden!\n";
			return 0;
		}

		virtual int isFirst()  // Ist der Anfang des Containers erreicht?
		{
			cerr << "isFirst muss noch in der abgleiteten Klasse ueberschrieben werden!\n";
			return false;
		}

		virtual T* last()       // Setzt AktContainerPosition auf das letzte Element.
										// und liefert den Zeiger darauf.
		{
			cerr << "Muss noch in der abgleiteten Klasse ueberschrieben werden!\n";
			return 0;
		}


		virtual T* previous()   // Erniedrigt AktContainerPostion um eins.
										// und liefert den Zeiger darauf.
		{
			cerr << "Muss noch in der abgleiteten Klasse ueberschrieben werden!\n";
			return 0;
		}


		virtual int isEmpty()  // Ist der Container vielleicht leer?
		{
			cerr << "Muss noch in der abgleiteten Klasse ueberschrieben werden!\n";
			return false;
		}

		virtual T* insert(T* )  // Fuegt neues Element vor der AktPos ein.
		{
			cerr << "Muss noch in der abgleiteten Klasse ueberschrieben werden!\n";
			return 0;
		}

		virtual T* append(T* )  // Haengt neues Element an den Container an.
		{
			cerr << "Muss noch in der abgleiteten Klasse ueberschrieben werden!\n";
			return 0;
		}

		virtual T* remove() 	// Loescht den Akt. Element aus der Container
									// und liefert den Zeiger auf das Element.
		{
			cerr << "Muss noch in der abgleiteten Klasse ueberschrieben werden!\n";
			return 0;
		}

		virtual void empty() // Leert den Container.
		{
			cerr << "Muss noch in der abgleiteten Klasse ueberschrieben werden!\n";
		}

		virtual	void empty_with_element_delete() // Leert den Container und loesch die Elemente.
		{
			cerr << "Muss noch in der abgleiteten Klasse ueberschrieben werden!\n";
		}

};





#endif //__CONTAINER_H
