next up previous contents
Next: 4.2.5 Negative Referenzen Up: 4.2 CLS-Unterprogrammbibliothek Previous: 4.2.3 Implementation von Listen

4.2.4 Operationen auf Listen

Um auf den versteckten Listenimplementierungen die vielen möglichen Listenoperationen durchführen zu können, gibt es eine Reihe von vordefinierten Schleifentypen. Was die Schleife wirklich macht, wird mit einem Mechanismus bestimmt, der eng an das Callback-Prinzip [32, S. 31,] angelehnt ist: Der Anwendungsprogrammierer übergibt eine Funktion, die in der Schleife für jedes Element der Liste aufgerufen wird.

Die Programmierpraxis zeigt, daß in den meisten Fällen nur wenige Schleifentypen benötigt werden:

Die Menge der sinnvollen Funktionen, die vom Anwendungsprogramm übergeben und in diesen Schleifen aufgerufen werden, läßt sich auf wenige Typen zurückführen. Ihnen ist gemeinsam, daß sie jeweils mit drei Parametern aufgerufen werden: Das erste Argument ist das zur Verarbeitung anstehende Element der Liste, in CLS meistens ein Objekt. Das zweite Argument ist die sogenannte ,,client-data``; diese ist für alle Elemente während eines Schleifenaufrufes gleich und wird der Schleifenfunktion von außen übergeben. Das dritte und letzte Argument ist die sogenannte ,,call-data``. Sie wird von der Schleifenfunktion bereitgestellt oder verwaltet.

Wichtig für die Zusammenstellung eines ,,Software-Baukastens`` ist ein weiterer Funktionstyp, der nicht auf Listenelementen arbeitet:

clsCompareFunc vergleicht zwei Werte eines Typs und liefert, entsprechend der C-Funktion strcmp, eine negative oder positive Zahl oder 0 mit den Bedeutungen erster Wert ist kleiner, größer oder gleich dem zweiten. Hier ist das erste Argument die client-data.

Beispiel: clsCompareDouble vergleicht zwei double Zahlen miteinander. Diese Funktion wird in obigem Beispiel zu clsCritFunc von clsListGetMin benötigt, um die jeweiligen Rückgabewerte zu vergleichen.

Die Verbindung der Listen zu den PIF-basierten CLS-Objekten ergibt sich daraus, daß zu jedem CLS-Objekt eine Liste seiner Kindobjekte, eine Liste seiner Referenzen auf andere Objekte und eine Liste der Rückreferenzen auf alle dieses Objekt referenzierenden Objekte (sowie ein Zeiger auf das Mutterobjekt) geführt wird.

Mit den Funktionen clsObjectGetChildren, clsObjectGetRefs und clsObjectGetBackrefs können diese Listen explizit ,,herausgeholt`` werden. Um dem Programmierer bei einfachen Such- oder Abfrageoperationen das Anlegen einer Listenvariable und das abschließende Löschen der Liste zu ersparen, sind auch entsprechende Abfragefunktionen implementiert, die die zuvor erwähnten Listenoperationen mit den clsObjectGet...-Funktionen verbinden, z.B. clsObjectFindBackref mit Predikatfunktion.

gif

Um Operationen auf dem PIF-bezogenen Datenbestand vorzunehmen, existieren Funktionen der Art clsObjectAddReference, clsObjectRemoveChild und clsOrthoproductAddBase sowie Abfragefunktionen wie clsAttributeGetIntegerItem und clsPointlistGetUnit.


next up previous contents
Next: 4.2.5 Negative Referenzen Up: 4.2 CLS-Unterprogrammbibliothek Previous: 4.2.3 Implementation von Listen

Martin Knaipp
Wed Jun 12 15:41:33 MET DST 1996