"Connectclass"

Das Problem ist die Handle-Klasse beim Extrudieren bzw. Sweepen von Kurven. Das Ganze ist undurchschaubar und muss von einer Funktion in die nächste geforwardet werden. Damit ist es auch viel Boilerplate.

Die Idee hinter der Connect-Klasse ist, dass es ja immer eine Menge von Funktionen gibt, die sich auch gerne in unterschiedlichen Klassen befinden, die über einen größeren Satz von Parametern austauschen müssen. Diese Parameter werden von mir zu einem Handle verbunden, dass dann durch die Funktionen durchgereicht wird. Eine „ConnectClass“ sollte eine Klasse darstellen, die nur in Funktionen/Methoden erzeugt werden kann, die die Wurzel solcher Konstrukte darstellt. Sie sollte beschreiben, welche Parameter konstant sind und welche Parameter verändert werden können und welche Parameter temporär verändert werden können (also bei Verlassen der Funktion, die die Parameter verändert hat, wieder zurückgesetzt werden müssen).

Es sollte automatisch geprüft werden, welche Funktion auf welche Parameter zugreift, so dass eine Funktion „Caller“, die Funktion „Worker“ aufruft vor dem Aufruf sicherstellen muss, dass alle notwendigen Parameter auch gültig gesetzt sind - entweder in dem sie sie setzt oder indem sie verlangt, dass die Paramter von Aufrufer von „Caller“ gesetzt wurden.

Die Connectionclass wird nicht als üblicher Parameter übergeben, sondern der Aufrufer legt sie per State fest (der Compiler kann sie dann kopieren, sie muss aber nicht explizit als Parameter angegeben werden). Alle Funktionen sind sich einig, einen speziellen Datentyp (z.B. ExtrusionHandle) zu erwarten. Lokal darf eine Variable einen Namen haben. Entsprechend ist zu kennzeichnen, welche Variable die Verbindung darstellt.

worker is code()
connect ExtrusionHandle mutable ref  // ''as eh'' optional zur Abkürzung
{
  ExtrusionHandle.xAxis = Direction3d::X;
  segs is ExtrusionHandle.Segmentation;     // Worker verlangt, dass ExtrusionHandle.Segmentation gültig gesetzt ist.
}

caller is code()
{
  handle as ExtrusionHandle;
  handle2 as ExtrusionHandle;
 
  use handle as connection;
  
  handle.Segmentation = 32; // wird verlangt, sonst kann man worker() nicht aufrufen.
  
  worker();   // Worker erhält eine mutable ref unter dem Namen des Datentyps.
}

Methoden von ExtrusionHandle sind nur aufrufbar, wenn die benötigten Member initialisiert sind.