CXI-Basis-Programmierreferenz / Version 2 / Datenspeicherung / CxiTree / Ableitung CxiTreeSubst /
CxiTreeSubst :: CxiTreeSubst (CxiTree& basis, CxiName pname = 0)
CxiHandle cxiCreateCxiTreeSubst (CxiHandle basis, CxiName pname)
Benutzt einen CXI-Teilbaum als eigenständigen Baum
basis:
CXI-Baum, dessen Teilbaum benutzt werden soll.
pname:
Bei NULL (Vorgabe) wird das aktuelle Sichtfenster von basis zur Wurzel des TreeSubst, sonst der durch pname angegebene Unterbaum des Sichtfensters.
return:
Die C-Funktion liefert das Handle des neuen CXI-Objekts, NULL im Fehlerfall
Die Klasse CxiTreeSubst verwaltet den angegebenen Teilbaum von basis als eigenen Baum. Dies entspricht etwa dem SUBST-Befehl des Dateisystems. Der als TreeSubst benutzte Teilbaum besitzt ein von basis unabhängiges eigenes Sichtfenster.
Das CxiTreeSubst-Objekt erbt alle CxiTree-Eigenschaften von basis, also das Speichermedium (Datei, Heap) und die Optionen (cxiOptReadOnly, cxiOptVirtual etc.). Es kann die Ableitung CxiTreeSubstRO statt CxiTreeSubst verwendet werden, um Veränderungen des Basis- über das Subst-Objekt zu verhindern.
Nicht automatisch geerbt werden die von der Klasse CxiNode verwalteten Eigenschaften, insbesondere Resource-Blöcke. Diese müssen für jedes CxiTreeSubst-Objekt getrennt definiert werden oder mit der Funktion InheritResource explizit vererbt werden.
Solange der TreeSubst existiert, sind folgende Einschränkungen zu beachten:
Der als Parameter basis angegebene Baum darf nicht geschlossen oder gelöscht werden, solange dieser oder ein anderer auf basis bezogener TreeSubst existiert.
Der Programmierer muss sicherstellen, dass niemals derselbe Knoten sowohl über basis als auch über den TreeSubst verändert wird. In diesem Fall können sonst die interne CXI-Datenstruktur und der Heap des Programms zerstört werden. Allgemein sollte vermieden werden, dass in basis und in auf basis bezogenen CxiTreeSubst-Objekten der gleiche Knoten mehrfach das aktuelle Sichtfenster ist.
Es sollten keine Löschungen von Knoten oder ganzen Teilbäumen vorgenommen werden, da das CXI-System in diesem Fall nicht immer feststellen kann, ob dadurch eine Unterbaum-Referenz ungültig wird. Diese Einschränkung gilt nicht, wenn sichergestellt ist, dass sich weder das Sichtfenster von basis noch das Sichtfenster von irgendeinem auf basis bezogenen CxiTreeSubst-Objekt innerhalb des zu löschenden Teilbaums befinden.
Anmerkung: Die Neuanlage von Knoten ist problemlos möglich, solange Punkt 2 erfüllt ist.
Mit CxiTreeSubst ist es möglich, eine "CxiTree-Collection" aufzubauen, indem ein CXI-Baum (Parameter basis) erstellt wird, dessen Wurzel nur aus Unterbaum-Variablen besteht. Für jede dieser Variablen wird ein CxiTreeSubst-Objekt angelegt, das den entsprechenden Teilbaum bearbeitet. Über basis selbst erfolgen keine Zugriffe, damit sind die obigen Einschränkungen erfüllt. Ist basis ein CxiTreeFile-Objekt, erhält man durch dieses Vorgehen quasi eine Datei, die mehrere CXI-Bäume enthält.
Die Klasse CxiTreeSubst erbt die Baum-Funktionen von CxiTree, alle anderen Zugriffsfunktionen - auch den Destruktor - von CxiNode. Ob der Konstruktor erfolgreich war, kann anschließend durch einen Aufruf von Status() abgefragt werden.
Portabilität:
Diese Funktion ist in allen unterstützten Systemen verfügbar. Die C-Funktion ist als Makro implementiert.
Siehe auch:
Klassen CxiTreeSubst und CxiTreeSubstRO
InheritResource - Resourcezuordnungen erben
CxiTreeSubstRO() - {Konstruktor für geschützten Teilbaum}
DeleteCxiTree - Freigabe eines CxiHandle