Funktionsbeschreibungen
Die notwendigen Funktionen der Listenklasse lassen sich grob in fünf Gruppen unterteilen:
- Konstruktion / Destruktion
- Datenzugriffsfunktionen
- Hilfsfunktionen zur Statusabfrage
- Private Hilfsfunktionen
- Debug - Funktionen
Konstruktion / Destruktion
Konstruktor
template <class T> CList<T>::CList();
Der Konstruktor initialisiert lediglich die Member-Variable auf das erste Listenelement mit NULL, um den korrekten internen Zustand der Liste sicherzustellen.
Destruktor
template <class T> CList<T>::CList();
Der Destruktor der Liste zerstört sämtliche erzeugten Listenelement - Objekte. Die direkt darin gespeicherten Daten gehen dadurch verloren. Werden Pointer in der Liste gespeichert, werden die darin angegebenen Speicherbereiche nicht freigegeben.
Datenzugriffsfunktionen
Es werden drei Datenzugriffsfunktionen implementiert. Die beiden lesenden Funktionen nutzen Referenzparameter um die gesicherten Daten zurückzuliefern.
Elemente sichern
template <class T> void CList<T>::AddData (T pData);
Diese Zugriffsfunktion fügt das Datum pData am Ende der Liste ein. Weitere Fehlerkontrollen oder -werte sind hier nicht notwendig.
Parameter:
- T pData: Zu speicherndes Datum
Elemente lesen
template <class T> virtual int CList<T>::GetData (int iPos,
T & pData);
GetData liefert im übergebenen Referenzparameter das gespeicherte Datum zurück.
Parameter:
- int iPos: Index für das gesuchte Element. Die Indizierung beginnt bei 1.
- T & pResult: Rückgabeparameter für das gesuchte Datum.
Rückgabewerte
- 0: Das zurückgelieferte Datum ist ungültig. Der Index lag nicht innerhalb des gültigen Bereichs.
- 1: Funktionsaufruf erfolgreich.
Elemente lesen und entfernen
template <class T> virtual int CList<T>::RemoveData (int iPos,
T & pData);
RemoveData liefert ein gespeichertes Datum zurück und entfernt das Element aus der Liste.
Parameter:
- int iPos: Index für das gesuchte Element. Die Indizierung beginnt bei 1.
- T & pResult: Rückgabeparameter für das gesuchte Datum.
Rückgabewerte
- 0: Das zurückgelieferte Datum ist ungültig. Der Index lag nicht innerhalb des gültigen Bereichs.
- 1: Funktionsaufruf erfolgreich.
Hilfsfunktionen zur Statusabfrage
Status: Liste leer
template <class T> int CList<T>::IsEmpty();
Mit Hilfe von IsEmpty kann festgestellt werden, ob bereits Elemente in der Liste gespeichert sind.
Rückgabewerte:
- 0: Die Liste ist leer.
- 1: Die Liste enthält mindestens ein Element.
Private Hilfsfunktionen und -klassen
Suchen eines bestimmten Listenelements
// private: template
<class T> virtual CList<T>::CElement * CList<T>::GetElement(int iPos);
Die private Hilfsfunktion GetElement sucht auf der Basis des Indexes iPos ein Element der Liste.
Parameter
- int iPos: Index für das gesuchte Element. Die Indizierung beginnt bei 1.
Rückgabewerte
- NULL: Das gesuchte Element wurde nicht gefunden. Der Index ist ausserhalb des gültigen Bereiches.
- !(NULL): Der zurückgelieferte Wert ist ein gültiger CElement Zeiger, der auf das gesuchte Element zeigt.
Hilfsklasse CList::CElement
Diese Hilfsklasse wird zum speichern der einzelnen Listenelemente verwendet. Die Funktionen in dieser Klasse beschränken sich auf Zugriffsfunktionen für die einzelnen Datenelemente und werden im nächsten Abschnitt näher erläutert. Hier soll lediglich der Konstruktor erwähnt werden:
Konstruktor der Hilfsklasse CList::CElement
template <class T> CList<T>::CElement::CElement (CElement * pNext,
T pData);
Dieser Konstruktor initialisiert beide Member - Variablen der Hilfsklasse CElement.
Parameter:
- CElement * pNext: Initialisiert den Zeiger auf das nächste Datenelement. Die Hilfsklasse übernimmt keinerlei Kontrolle über dessen Korrektheit.
- T pData: Initialisiert das Datum innerhalb des Listenelements.
Debug - Funktionen
Es existiert lediglich eine einzige Debug - Funktion zur Ausgabe des aktuellen Listeninhaltes. Diese Funktionen können nur verwendet werden, wenn während des kompilierens das Define _DEBUG gesetzt ist.
Ausgeben des aktuellen Listeninhalts
#ifdef _DEBUG
template <class T> void CList<T>::Dump();
#endif //_DEBUG
Die Dump - Funktion gibt von jedem vorhanden Listenelement die Speicheradresse aus und übergibt anschlißend das dereferenzierte Datum dem IOStrem cout. Auf Grund dieser Konzeption kann die Funktion nur für Zeigerlisten auf Basis - Datentypen oder auf Objektzeiger für die der Stream - Operator "<<" definiert ist.