# Knoten in DynamicNodes

Knoten sind die kleinste ausführbare Einheit in DynamicNodes. Ihre Funktion wird mit einer .NET-Sprache (C#, VisualBasic.NET, JScript, ...) implementiert.

Knoten besitzen Anschlüsse in Form von Ein- und Ausgängen. Jeder Ausgang mit mehreren Eingängen verbunden werden. Jeder Eingang kann mit höchstens einem Ausgang verbunden werden.

Ein Flussgraph in DynamicNodes

Jeder Anschluss besitzt Speicherplatz für genau eine Marke. Dieser Speicherplatz ist auch immer mit einer Marke belegt.

Eine Marke ist eine Art Daten-Container, welcher im Wesentlichen einen Markenwert und einen Markenstatus besitzt. Der Markenstatus kann drei Zustände der Marke angeben: "nicht belegt", "ungültig" und "gültig". Ist eine Marke "nicht belegt" bedeutet dass, das die Marke leer ist, also keine Daten transportiert. Hat die Marke den Status "gültig", kann der Wert der Marke verarbeitet werden. Hat die Marke den Status "ungültig", kann der Wert der Marke ebenfalls verarbeitet werden (die formalen Voraussetzungen sind gegeben), der Wert ist aber ggf. nicht sinnvoll (starker Rundungsfehler o.ä.) bzw. entspricht nicht dem exakten Ergebnis einer Berechnung.

Der Markenwert wird als Referenz gespeichert. Das bedeutet, das mehrere Marken auf den gleichen Wert verweisen können.

Zurück zu den Anschlüssen: Wird die Marke auf einem Eingang durch eine neue Marke ersetzt, wird der Knoten in der Regel aktiviert. Es reicht, dass ein einziger Eingang neu belegt wird. Da auf allen Eingängen immer eine Marke liegt, kann die Operation des Knoten ausgeführt werden. Von allen nicht aktualisierten Eingängen werden also alte Marken verwendet. Die Operation des Knotens hat die Möglichkeit während der Ausführung keine, einige oder alle Ausgänge mit neuen Marken zu belegen. Sobald die Aktivierung des Knoten abgeschlossen ist, werden die Marken aller aktualisierten Ausgänge an die verbundenen Eingänge weitergeleitet. Ist ein Ausgang mit mehreren Eingängen verbunden, erhält jeder Eingang eine Kopie der Marke. Alle Kopien verweisen auf den selben Wert.

Wird ein Ausgang während der Ausführung der Operation mehrmals mit einer neuen Marke belegt, bleibt nur die letzte erhalten und wird an evtl. verbundene Knoten weitergeleitet.

Erhält ein Eingang über eine Verbindung eine neue Marke, beginnt der Prozess von vorn. Für die meisten Knoten kann definiert werden, ob er parallelisiert werden soll, oder nicht. Ist ein Knoten parallelisiert (Standardeinstellung) wird seine Operation in einem eigenen Thread ausgeführt.

Sequenzdiagramm zur Aktivierung eines Knotens

Knoten können bestimmen, wie sie im Editor angezeigt werden sollen. Sie können ihre Darstellung wenn notwendig auch während der Operation aktualisieren (z.B. Status einer zeitaufwändigen Operation visualisieren). Knoten können bestimmen wie die Anschlüsse angeordnet werden sollen.

Jeder Anschluss besitzt die Fähigkeit die Kompatibilität zu einem beliebigen anderen Knoten zu bestimmen. Die Kompatibilität kann auf unterschiedlichen Wegen definiert werden. Die einfachste Form ist eine Liste mit unterstützten Datentypen. Einige Anschlüsse sind generisch, d.h. sie sind unabhängig von Datentypen mit allen anderen Anschlüssen kompatibel. Der Eingang des Knotens "Basis/Anzeige" in ein Beispiel dafür.