PPL7-Icon Patrick's Programming Library Version 7.0.0 - Dokumentation
ppl7::AVLTree< K, T > Template-Klassenreferenz

Template für AVL-Bäume. Mehr ...

Abgeleitet von ppl7::AVLTreeAlgorithm.

Klassen

class  Iterator
 Iterator für AVLTree Mehr ...
 
class  TreeItem
 Einzelnes Baumelement. Mehr ...
 

Öffentliche Methoden

 AVLTree ()
 Konstruktor der Klasse. Mehr ...
 
 ~AVLTree ()
 Destruktor der Klasse. Mehr ...
 
T & add (const K &key, const T &value)
 Element hinzufügen. Mehr ...
 
void allowDupes (bool allow)
 
size_t capacity () const
 Aktuelle Kapazität des AVL-Baums. Mehr ...
 
void clear ()
 
virtual int compare (const Node &value1, const Node &value2) const
 Zwei Elemente des Baums vergleichen. Mehr ...
 
size_t count () const
 
void erase (const K &key)
 Element löschen. Mehr ...
 
bool exists (const K &key) const
 Prüft, ob ein bestimmter Schlüssel vorhanden ist. Mehr ...
 
T & find (const K &key) const
 Element finden. Mehr ...
 
bool getCurrent (Iterator &it) const
 Aktuelles Element aus dem Baum. Mehr ...
 
bool getFirst (Iterator &it) const
 Erstes Element aus dem Baum. Mehr ...
 
bool getLast (Iterator &it) const
 Letztes Element aus dem Baum. Mehr ...
 
bool getNext (Iterator &it) const
 Nächstes Element auslesen. Mehr ...
 
bool getPrevious (Iterator &it) const
 Verhergehendes Element aus dem Baum. Mehr ...
 
size_t itemSize () const
 Größe eines Verwaltungsknotens. Mehr ...
 
size_t num () const
 
T & operator[] (const K &key) const
 Element finden. Mehr ...
 
void reserve (size_t num)
 Speicher reservieren. Mehr ...
 
void reset (Iterator &it) const
 

Private Methoden

void addNode (Node *item)
 Element hinzufügen. Mehr ...
 
void clearRecursive (TreeItem *item)
 Rekursiv die Destruktoren aller Elemente aufrufen. Mehr ...
 
void eraseNode (Node *item)
 Element aus dem AVL-Baum entfernen. Mehr ...
 
NodefindNode (const Node *value) const
 Wert im Baum finden. Mehr ...
 
NodegetCurrent (Iterator &it) const
 Aktuelles Element des Baums. Mehr ...
 
NodegetFirst (Iterator &it) const
 Erstes Element aus dem Baum. Mehr ...
 
NodegetLast (Iterator &it) const
 Letztes Element aus dem Baum. Mehr ...
 
NodegetNext (Iterator &it) const
 Nächstes Element aus dem Baum. Mehr ...
 
NodegetPrevious (Iterator &it) const
 Vorheriges Element aus dem Baum. Mehr ...
 
NodegetRoot () const
 Basisknoten zurückgeben. Mehr ...
 
 PPL7EXCEPTION (MissingCompareOperator, Exception)
 
void reset (Iterator &it) const
 Iterator auf erstes Element zurücksetzen Mehr ...
 

Private Attribute

MemoryHeap MyHeap
 Speicherverwaltung der Knoten. Mehr ...
 

Ausführliche Beschreibung

template<class K, class T>
class ppl7::AVLTree< K, T >

Beschreibung:
Hierbei handelt es sich um ein generisches Template für binäre Bäume, die nach dem AVL-Algorithmus aufgebaut sind.
Die Datentypen für Schlüssel und Wert sind getrennt voneinander beliebig definierbar. Einzige Voraussetzung für den Schlüssel ist, dass er über die Vergleichoperatoren "<", ">" und "=" verfügt.
Beispiel:
Das nachfolgende Beispiel zeigt, wie das Template verwendet werden kann, um einen Baum von Key-Value-Paaren zu verwalten, wobei sowohl Schlüssel als auch Wert als String definiert sind.
#include <ppl7.h>
int main(int argc, const char**argv)
{
myMap.add(L"key1",L"value1");
myMap.add(L"other",L"value2");
myMap.add(L"findme",L"success");
myMap.add(L"key3",L"value3");
myMap.add(L"abc",L"value4");
try {
const ppl7::String &res=myMap.find(L"findme");
res.printnl();
} catch (ppl7::ItemNotFoundException) {
printf ("Element wurde nicht gefunden\n");
}
// Iterator definieren
// Alle Elemente per Iterator ausgeben
myMap.reset(it);
while (myMap.getNext(it)) {
printf ("Found Key >>%s<< with Value >>%s<<\n",
(const char*)it.key(), (const char*)it.value());
}
return 0;
}

Beschreibung der Konstruktoren und Destruktoren

template<class K, class T>
ppl7::AVLTree< K, T >::AVLTree ( )
inline
Beschreibung:
Der Konstruktor initialisiert die Speicherverwaltung innerhalb des Heaps.
template<class K, class T>
ppl7::AVLTree< K, T >::~AVLTree ( )
inline
Beschreibung:
Der Destruktor ruft die Funktion AVLTree::clear auf, wodurch der komplette durch den Baum und seine Elemente belegte Speicher wieder freigegeben wird.

Dokumentation der Elementfunktionen

template<class K, class T>
void ppl7::AVLTree< K, T >::add ( const K &  key,
const T &  value 
)
inline
Beschreibung:
Mit dieser Funktion wird ein neues Element dem Baum hinzugefügt. Sowohl der Schlüssel key als auch der Wert value werden dabei kopiert.
Parameter
keyReferenz auf den Schlüssel des Elements
valueReferenz auf den Wert des Elements
Ausnahmebehandlung
DuplicateItemExceptionWird geworfen, wenn es bereits ein Element mit dem gleichen Schlüssel gibt
void ppl7::AVLTreeAlgorithm::addNode ( Node item)
inherited
Beschreibung:
Diese Funktion fügt ein neues Element in den Baum ein. Dabei ist sichergestellt, dass der Baum stets sortiert und ausgewogen ist. Im Gegensatz zu CTree erlaub AVLTreeAlgorithm auch mehrere Elemente mit dem gleichen Schlüssel. Dieses Feature muss jedoch explizit durch Aufruf der Funktion AVLTreeAlgorithm::AllowDupes aktiviert werden.
Parameter
[in]itemPointer auf den hinzuzufügenden Wert
Ausnahmebehandlung
EmptyDataExceptionWird geworfen, wenn der Parameter item auf NULL zeigt
DuplicateItemExceptionWird geworfen, wenn es bereits ein Element mit dem gleichen Schlüssel gibt
template<class K, class T>
void ppl7::AVLTree< K, T >::allowDupes ( bool  allow)
inline
template<class K, class T>
size_t ppl7::AVLTree< K, T >::capacity ( ) const
inline
Beschreibung:
Gibt zurück, wieviele Elemente der AVL-Baum verwalten kann, ohne dass neuer Speicher allokiert werden muss.
Rückgabe
Anzahl Elemente
template<class K, class T>
void ppl7::AVLTree< K, T >::clear ( )
inline
template<class K, class T>
void ppl7::AVLTree< K, T >::clearRecursive ( TreeItem item)
inlineprivate
Beschreibung:
Diese interne Funktion wird von AVLTree::clear aufgerufen, um rekursiv die Destruktoren aller Elemente aufzurufen. Somit ist sichergestellt, dass beim Löschen des Baums nicht nur der Verwaltungsspeicher für die Knoten innerhalb des Heaps freigegeben wird, sondern auch der Speicher der durch die Schlüssel und Werte der Knoten belegt wird.
template<class K, class T>
virtual int ppl7::AVLTree< K, T >::compare ( const Node value1,
const Node value2 
) const
inlinevirtual
Beschreibung:
Damit Elemente sortiert in den Baum eingehangen werden können, muss eine Möglichkeit bestehen zwei Elemente zu vergleichen. Dies wird mit dieser Methode realisiert. Da jeder Baum andere Daten enthalten kann, muss die Methode für jeden Datentyp reimplementiert werden, was innerhalb des Templates AVLTree auch erfolgt.
Parameter
[in]value1Pointer auf das erste Element.
[in]value2Pointer auf das zweite Element.
Rückgabe
Die Funktion muss einen der folgenden 3 Werte zurückliefern:
  • 0: Ist der Wert in value2 identisch mit value1, muss 0 zurückgegeben werden.
  • +1: Ist der Wert in value2 größer als der Wert in value1, muss +1 zurückgegeben werden
  • -1: Ist der Wert in value2 kleiner als der Wert in value1, muss -1 zurückgegeben werden
Ausnahmebehandlung
AVLTreeAlgorithm::MissingCompareOperatorWird geworfen, wenn keine Vergleichsoperatoren implementiert wurden. Bei Verwendung der Template-Klasse AVLTree kann dies nicht vorkommen.
Achtung
Beim Vergleich zweier Strings kann die Funktion strcmp nicht direkt verwendet werden, da sie laut Definition Werte kleiner oder größer 0 liefert, aber nicht exakt -1 oder +1.
Beispiel:
Beispiel für eine Implementierung:
class MyItem : public ppl7::AVLTreeAlgorithm::Node
{
public:
MyItem(const char *name) {
Name=name;
}
ppl7::CString Name;
};
class MyTree : public ppl7::AVLTreeAlgorithm
{
public:
~MyTree() {
Clear();
}
virtual int compare(const Node &value1, const Node &value2) const
{
const MyItem &v1=static_cast<const MyItem&>(value1);
const MyItem &v2=static_cast<const MyItem&>(value2);
if (v1.Name<v2.Name) return -1;
if (v1.Name>v2.Name) return 1;
return 0;
}
}

Erneute Implementation von ppl7::AVLTreeAlgorithm.

template<class K, class T>
size_t ppl7::AVLTree< K, T >::count ( ) const
inline
template<class K, class T>
void ppl7::AVLTree< K, T >::erase ( const K &  key)
inline
Beschreibung:
Mit dieser Funktion wird das Element mit dem Schlüssel key aus dem Baum gelöscht und der dadurch referenzierte Speicher gelöscht.
Parameter
keyZu löschender Schlüssel
Ausnahmebehandlung
ItemNotFoundExceptionWird geworfen, wenn der gesuchte Schlüssel im Baum nicht vorhanden ist.
void ppl7::AVLTreeAlgorithm::eraseNode ( Node item)
inherited
Beschreibung:
Diese Funktion löscht das angegebene Element item aus dem Baum. Dabei ist sichergestellt, dass der Baum stets sortiert und ausgewogen ist.
Mit dieser Funktion wird das Element nur aus dem AVL-Baum entfernt, der durch das Element belegte Speicher wird jedoch nicht freigegeben. Dafür ist die aufrufende Funktion zuständig.
Parameter
[in]itemPointer auf den zu entfernenden Knoten
Ausnahmebehandlung
NullPointerExceptionWird geworfen, wenn item auf NULL zeigt
template<class K, class T>
bool ppl7::AVLTree< K, T >::exists ( const K &  key) const
inline
Beschreibung:
Mit dieser Funktion wird geprüft, ob ein Element mit dem Schlüssel key im Baum vorhanden ist.
Parameter
keyReferenz auf den gesuchten Schlüssel
Rückgabe
Gibt true zurück, wenn der Schlüssel vorhanden ist, sonst false.
template<class K, class T>
T & ppl7::AVLTree< K, T >::find ( const K &  key) const
inline
Beschreibung:
Mit dieser Funktion wird das Element mit dem Schlüssel key im Baum gesucht und dessen Wert zurückgegeben.
Parameter
keyReferenz auf den gesuchten Schlüssel
Rückgabe
Gibt eine Referenz auf den Wert des Elements zurück. Der Wert kann durch die aufrufende Funktion verändert werden.
Ausnahmebehandlung
ItemNotFoundExceptionWird geworfen, wenn der gesuchte Schlüssel im Baum nicht vorhanden ist.
AVLTreeAlgorithm::Node * ppl7::AVLTreeAlgorithm::findNode ( const Node value) const
inherited
Beschreibung:
Mit dieser Funktion wird der Wert value innerhalb des Baums gesucht und dessen Baumelement (TREEITEM) zurückgegeben.
Parameter
[in]valueDer zu suchende Wert
Rückgabe
Wird der Wert im Baum gefunden, gibt die Funktion einen Pointer auf den Wert des Baum-Elements zurück. Falls nicht, wird NULL zurückgegeben.
AVLTreeAlgorithm::Node * ppl7::AVLTreeAlgorithm::getCurrent ( Iterator it) const
inherited
Beschreibung:
Mit dieser Funktion wird ein Pointer auf das aktuelle Element des Baums zurückgeliefert. Dabei wird der Pointer nicht verändert.
Parameter
itIterator
Rückgabe
Pointer auf das aktuelle Element des Baums oder NULL, wenn kein Element mehr vorhanden ist.
template<class K, class T>
bool ppl7::AVLTree< K, T >::getCurrent ( Iterator it) const
inline
Beschreibung:
Mit dieser Funktion wird das aktuelle Key-Value-Paar des Baums zurückgeliefert.
Parameter
itIterator
Rückgabe
Gibt true zurück, wenn ein Element gefunden wurde, sonst false.
AVLTreeAlgorithm::Node * ppl7::AVLTreeAlgorithm::getFirst ( Iterator it) const
inherited
Beschreibung:
Mit dieser Funktion wird ein Pointer auf das erste Element des Baums zurückgeliefert.
Parameter
itIterator
Rückgabe
Pointer auf das erste Element des Baums oder NULL, wenn der Baum leer ist
template<class K, class T>
bool ppl7::AVLTree< K, T >::getFirst ( Iterator it) const
inline
Beschreibung:
Mit dieser Funktion wird das erste Key-Value-Paar des Baums zurückgeliefert.
Parameter
itIterator
Rückgabe
Gibt true zurück, wenn ein Element gefunden wurde, sonst false.
AVLTreeAlgorithm::Node * ppl7::AVLTreeAlgorithm::getLast ( Iterator it) const
inherited
Beschreibung:
Mit dieser Funktion wird ein Pointer auf das letzte Element des Baums zurückgeliefert.
Parameter
itIterator
Rückgabe
Pointer auf das letzte Element des Baums oder NULL, wenn der Baum leer ist
template<class K, class T>
bool ppl7::AVLTree< K, T >::getLast ( Iterator it) const
inline
Beschreibung:
Mit dieser Funktion wird das letzte Key-Value-Paar des Baums zurückgeliefert.
Parameter
itIterator
Rückgabe
Gibt true zurück, wenn ein Element gefunden wurde, sonst false.
AVLTreeAlgorithm::Node * ppl7::AVLTreeAlgorithm::getNext ( Iterator it) const
inherited
Beschreibung:
Mit dieser Funktion wird ein Pointer auf das nächste Element des Baums zurückgeliefert. Somit kann der Baum sortiert vorwärts durchwandert werden.
Parameter
itIterator
Rückgabe
Pointer auf das nächste Element des Baums oder NULL, wenn keine weiteren Elemente vorhanden sind.
template<class K, class T>
bool ppl7::AVLTree< K, T >::getNext ( Iterator it) const
inline
Beschreibung:
Mit dieser Funktion wird das nächste Key-Value-Paar des Baums zurückgeliefert.
Parameter
itIterator
Rückgabe
Gibt true zurück, wenn ein Element gefunden wurde, sonst false.
Beispiel:
myMap.add(L"key1",L"value1");
myMap.add(L"other",L"value2");
myMap.add(L"findme",L"success");
myMap.add(L"key3",L"value3");
myMap.add(L"abc",L"value4");
// Iterator definieren
myMap.reset(it);
while (myMap.getNext(it)) {
printf ("Found Key >>%s<< with Value >>%s<<\n",
(const char*)it.key(), (const char*)it.value());
}
AVLTreeAlgorithm::Node * ppl7::AVLTreeAlgorithm::getPrevious ( Iterator it) const
inherited
Beschreibung:
Mit dieser Funktion wird ein Pointer auf das vorherige Element des Baums zurückgeliefert. Somit kann der Baum sortiert rückwärts durchwandert werden.
Parameter
itIterator
Rückgabe
Pointer auf das vorherige Element des Baums oder NULL, wenn keine weiteren Elemente vorhanden sind.
template<class K, class T>
bool ppl7::AVLTree< K, T >::getPrevious ( Iterator it) const
inline
Beschreibung:
Mit dieser Funktion wird das vorhergehende Key-Value-Paar des Baums zurückgeliefert.
Parameter
itIterator
Rückgabe
Gibt true zurück, wenn ein Element gefunden wurde, sonst false.
AVLTreeAlgorithm::Node * ppl7::AVLTreeAlgorithm::getRoot ( ) const
inherited
Beschreibung:
Diese Funktion liefert einen Pointer auf den Basisknoten (root) des Baumes zurück.
Rückgabe
Pointer auf Basisknoten oder NULL, wenn der Baum leer ist
template<class K, class T>
size_t ppl7::AVLTree< K, T >::itemSize ( ) const
inline
Beschreibung:
Liefert die Anzahl Bytes zurück, die für die Verwaltung eines einzelnen Knotens erforderlich sind.
Rückgabe
Anzahl Byte
template<class K, class T>
size_t ppl7::AVLTree< K, T >::num ( ) const
inline
template<class K, class T>
T & ppl7::AVLTree< K, T >::operator[] ( const K &  key) const
inline
Beschreibung:
Mit diesem Operator wird das Element mit dem Schlüssel key im Baum gesucht und dessen Wert zurückgegeben.
Parameter
keyReferenz auf den gesuchten Schlüssel
Rückgabe
Gibt eine Referenz auf den Wert des Elements zurück. Der Wert kann durch die aufrufende Funktion verändert werden.
Ausnahmebehandlung
ItemNotFoundExceptionWird geworfen, wenn der gesuchte Schlüssel im Baum nicht vorhanden ist.
ppl7::AVLTreeAlgorithm::PPL7EXCEPTION ( MissingCompareOperator  ,
Exception   
)
inherited
template<class K, class T>
void ppl7::AVLTree< K, T >::reserve ( size_t  num)
inline
Beschreibung:
Mit dieser Funktion kann vorab Speicher für eine bestimmte Anzahl Elemente reserviert werden. Der Aufruf dieser Funktion ist immer dann sinnvoll, wenn schon vorher bekannt ist, wieviele Elemente benötigt werden, insbesondere, wenn sehr viele Elemente benötigt werden.
Parameter
numAnzahl Elemente, für die Speicher vorab allokiert werden soll
Zu beachten
Falls schon Speicher allokiert wurde, wird die Anzahl der bereits allokierten Elemente mit num verrechnet und nur die Differenz zusätzlich reserviert.
void ppl7::AVLTreeAlgorithm::reset ( Iterator it) const
inherited
Beschreibung:
Durch Aufruf dieser Funktion wird der angegebene Iterator it zurückgesetzt. Wird als nächstes AVLTreeAlgorithm::getNext aufgerufen, wird das erste Element des Baumes zurückgegeben, bei Aufruf von AVLTreeAlgorithm::getPrevious das letzte.
Parameter
itIterator
template<class K, class T>
void ppl7::AVLTree< K, T >::reset ( Iterator it) const
inline

Dokumentation der Datenelemente

template<class K, class T>
ppl7::AVLTree< K, T >::MyHeap
private
Beschreibung:
Dieser Heap wird zur Speicherverwaltung der Knoten verwendet und verhindert eine zu starke Fragmentierung des Speichers.

Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Dateien: