Hauptseite | Liste aller Namensbereiche | Klassenhierarchie | Alphabetische Liste | Auflistung der Klassen | Verzeichnisse | Auflistung der Dateien | Klassen-Elemente | Datei-Elemente

Stack< T > Template Klassenreferenz

Template-Klasse fuer einen Stack mit Logging bei Stack-Operationen. Mehr ...

#include <stack.h>

Klassendiagramm für Stack< T >:

vector Aufstellung aller Elemente

Öffentliche Methoden

 Stack (list< Stack< T > > *listP=NULL)
void push (const T &x)
 Push-Funktion mit Ausgabe einer Liste von Stacks.
pop ()
 Pop-Funktion mit Rueckgabe des letzten Wertes und Ausgabe einer Liste von Stacks.
top ()
 Top-Funktion mit Ausgabe der Liste, die in Klasse ComputerBase definiert ist.
getTopButOne () const
bool isEmpty () const
void setTopButOne (const T &x)
void setListP (list< Stack< T > > *lP)
void out (string op)
 Gibt Stack in Debug-Log-Datei aus.

Private Attribute

list< Stack< T > > * mListP
 Liste von Stacks.
mTopButOne
 das Element, das vor dem letzten gepusht wurde (noetig fuer "y-Register" der Casio Rechner)

Ausführliche Beschreibung

template<class T>
class Stack< T >

Template-Klasse fuer einen Stack mit Logging bei Stack-Operationen.

Die Klasse ist im Prinzip identisch mit der Klasse vector aus der STL. Der Unterschied besteht im wesentlichen darin, dass die Funktionen push() und pop() zu Debug- und Logging-Zwecken eine Ausgabe des aktuellen Stacks in ein Debug-Log-Objekt der Klasse Log bzw. auf die Konsole durchfuehren.

Da im Almetare-Projekt Listen von Stacks verwendet werden und alle Stacks einer Liste ausgegeben werden sollen, enthaelt die Klasse als Member den Zeiger auf die Stack-Liste, zu der der Stack gehoert, und die ganze Liste der Stacks wird bei jedem push() und pop() ausgegeben.

Template-Problematik:

Wie bei Templates ueblich, sorgt die Kompilierung der Datei stack.cpp noch nicht dafuer, dass auch Code generiert wird. Dies geschieht erst bei der Instanziierung mit konkreten Datentypen (Almetare: nur double und SymOperator*).

Wird ein Stack jetzt in einer anderen Datei als stack.cpp benoetigt (ist bei Bibliotheken ja normal) sollte dort die Inkludierung von stack.h ausreichen, falls die Klasse Stack bzw. die Template-Funktionen mit dem Schluesselwort 'export' qualifiziert werden (Stroustrup Kapitel 13.7 "Templates - Organisation des Quellcodes"). Leider kennen weder GNU noch MSVC++ das Wort 'export'.

Loesung: Entweder man inkludiert stack.cpp in jeder Datei, die Stacks braucht, oder man macht in stack.cpp eine Explizite Instanziierung mit den benoetigten Stack-Typen. Im letzteren Fall ist jedoch Information von der die Bibiothek benutzenden Anwendung in die Bibliotheksdatei gewandert! Die MSVC-Datei VECTOR enthaelt den Code anscheinend auch direkt, ist also eigentlich eine *.cpp-Datei.

Noetig ist ein Zahlen- und ein Symbol-Stack. Man koennte auch direkt die STL-Templates vector<double> und vector<string> nehmen; dieses Template erlaubt es aber, beim Pushen und Poppen den aktuellen Stack auszugeben. Außerdem: Um Klammerebenen abzubilden, werden zwei LISTEN von Stacks benutzt. Bei jeder "(" wird ein neuer Stack auf jede Liste geworfen. Daher enthaelt das Template einen Zeiger auf diese Stack-Liste, die bei jedem Push und Pop ausgegeben wird.

Zusaetzlich wird ein Kommando top eingefuehrt, das den obersten Wert liest, ohne ihn vom Stack zu nehmen.


Beschreibung der Konstruktoren und Destruktoren

template<class T>
Stack< T >::Stack list< Stack< T > > *  listP = NULL  )  [inline, explicit]
 


Dokumentation der Elementfunktionen

template<class T>
T Stack< T >::getTopButOne  )  const [inline]
 

template<class T>
bool Stack< T >::isEmpty  )  const [inline]
 

template<class T>
void Stack< T >::out string  op  ) 
 

Gibt Stack in Debug-Log-Datei aus.

Wenn der Listenzeiger gesetzt ist, wird die ganze Liste von Stacks ausgegeben.

Parameter:
op String, der die Operation beschreibt ("pushed" oder "popped")

template<class T>
T Stack< T >::pop  ) 
 

Pop-Funktion mit Rueckgabe des letzten Wertes und Ausgabe einer Liste von Stacks.

Rückgabe:
oberstes Objekt auf dem Stack

template<class T>
void Stack< T >::push const T &  x  ) 
 

Push-Funktion mit Ausgabe einer Liste von Stacks.

Parameter:
x ein Objekt des zu pushenden Typs

template<class T>
void Stack< T >::setListP list< Stack< T > > *  lP  )  [inline]
 

template<class T>
void Stack< T >::setTopButOne const T &  x  )  [inline]
 

template<class T>
T Stack< T >::top  ) 
 

Top-Funktion mit Ausgabe der Liste, die in Klasse ComputerBase definiert ist.

Rückgabe:
oberstes Objekt auf dem Stack


Dokumentation der Datenelemente

template<class T>
list< Stack<T> >* Stack< T >::mListP [private]
 

Liste von Stacks.

template<class T>
T Stack< T >::mTopButOne [private]
 

das Element, das vor dem letzten gepusht wurde (noetig fuer "y-Register" der Casio Rechner)


Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Dateien:
Erzeugt am Mon Oct 10 19:54:32 2005 für Almetare von  doxygen 1.4.1