Invocation: build complex Node tree ... ideas for verification

* this changeset builds a complex processing network for the first time
 * furthermore, some ideas towards verification are spelled out

''verification not implemented''
This commit is contained in:
Fischlurch 2025-01-08 16:39:00 +01:00
parent 890cba49a2
commit 1aae4fdcdd
4 changed files with 242 additions and 34 deletions

View file

@ -218,4 +218,27 @@ namespace engine {
} }
lib::Several<PortRef>
PortDiagnostic::srcPorts()
{
UNIMPLEMENTED ("intrude into the Turnout and find out about source connectivity");
}
/**
* @return the symbolic string representing this processing port,
* as [provided by Node-identification](\ref ProcID::genProcSpec())
*/
string
PortDiagnostic::getProcSpec()
{
p_.procID.genProcSpec();
}
HashVal
PortDiagnostic::getProcHash() ///< @return as [calculated by Node-identification](\ref ProcID)
{
UNIMPLEMENTED ("calculate an unique, stable and reproducible hash-key to identify the Turnout");
}
}} // namespace steam::engine }} // namespace steam::engine

View file

@ -200,15 +200,9 @@ namespace engine {
/** /**
* Key abstraction of the Render Engine: A Data processing Node * Key abstraction of the Render Engine: A Data processing Node.
* *
* @todo it's not clear as of 9/09 if ProcNode shall be an ABC/Interface * @todo WIP 2025 Node-Invocation is reworked from ground up for the »Playback Vertical Slice«
* It might be used as ABC (as was the original intention) when implementing
* several query/information functions. In that case, the ctor will become protected.
* The alternative would be to push down these information-retrieval part into a
* configurable element within Connectivity, in which case we even might drop
* ProcNode as a frontend entirely.
* @todo WIP-WIP-WIP 2024 Node-Invocation is reworked from ground up for the »Playback Vertical Slice«
*/ */
class ProcNode class ProcNode
: util::NonCopyable : util::NonCopyable
@ -217,16 +211,10 @@ namespace engine {
Connectivity wiring_; Connectivity wiring_;
public: public:
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1367 : Rebuild the Node Invocation
ProcNode (Connectivity&& con) ProcNode (Connectivity&& con)
: wiring_(move(con)) : wiring_(move(con))
{ } { }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1367 : Rebuild the Node Invocation
public:
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1367 : Rebuild the Node Invocation
Port& Port&
getPort (uint portIdx) getPort (uint portIdx)
@ -258,14 +246,14 @@ namespace engine {
TurnoutSystem turnoutSystem{nomTime, procKey}; TurnoutSystem turnoutSystem{nomTime, procKey};
return getPort(portIdx).weave (turnoutSystem, output); return getPort(portIdx).weave (turnoutSystem, output);
} }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1367 : Rebuild the Node Invocation
/// „backdoor“ to watch internals from tests /// „backdoor“ to watch internals from tests
friend class ProcNodeDiagnostic; friend class ProcNodeDiagnostic;
}; };
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1367 : Rebuild the Node Invocation /* ========== Diagnostic and Testing ========== */
class ProcNodeDiagnostic class ProcNodeDiagnostic
: util::MoveOnly : util::MoveOnly
{ {
@ -302,5 +290,31 @@ namespace engine {
} }
class PortDiagnostic
: util::MoveOnly
{
Port& p_;
public:
PortDiagnostic (Port& thePort)
: p_{thePort}
{ }
lib::Several<PortRef> srcPorts();
bool isSrc() { return srcPorts().empty(); }
string getProcSpec(); ///< generate a descriptive diagnostic Spec for the Turnout sitting behind this Port
HashVal getProcHash(); ///< calculate an unique, stable and reproducible hash-key to identify the associated operation
};
inline PortDiagnostic
watch (Port& thePort)
{
return PortDiagnostic{thePort};
}
}} // namespace steam::engine }} // namespace steam::engine
#endif /*STEAM_ENGINE_PROC_NODE_H*/ #endif /*STEAM_ENGINE_PROC_NODE_H*/

View file

@ -23,7 +23,9 @@
#include "lib/test/diagnostic-output.hpp"/////////////////TODO #include "lib/test/diagnostic-output.hpp"/////////////////TODO
#include "lib/util.hpp" #include "lib/util.hpp"
#include <array>
using std::array;
using util::isnil; using util::isnil;
//using std::string; //using std::string;
using util::isSameObject; using util::isSameObject;
@ -122,31 +124,79 @@ namespace test {
void void
build_connected_nodes() build_connected_nodes()
{ {
auto srcOp = [](int param, int* res){ *res = param; }; // This operation emulates a data source
auto src_op = [](int param, int* res){ *res = param; };
// A Node with two (source) ports // A Node with two (source) ports
ProcNode n1{prepareNode("n1") ProcNode n1{prepareNode("n1")
.preparePort() .preparePort()
.invoke("a(int)", srcOp) .invoke("a(int)", src_op)
.setParam(5) .setParam(5)
.completePort() .completePort()
.preparePort() .preparePort()
.invoke("b(int)", srcOp) .invoke("b(int)", src_op)
.setParam(23) .setParam(23)
.completePort() .completePort()
.build()}; .build()};
auto add1Op = [](int* src, int* res){ *res = 1 + *src; }; // A node to add some "processing" to each data chain
auto add1_op = [](int* src, int* res){ *res = 1 + *src; };
ProcNode n2{prepareNode("n2") ProcNode n2{prepareNode("n2")
.preparePort() .preparePort()
.invoke("+1(int)(int)", add1Op) .invoke("+1(int)(int)", add1_op)
.connectLead(n1) .connectLead(n1)
.completePort() .completePort()
.preparePort() .preparePort()
.invoke("+1(int)(int)", add1Op) .invoke("+1(int)(int)", add1_op)
.connectLead(n1) .connectLead(n1)
.completePort() .completePort()
.build()}; .build()};
// Need a secondary source, this time with three ports
ProcNode n1b{prepareNode("n1b")
.preparePort()
.invoke("a(int)", src_op)
.setParam(7)
.completePort()
.preparePort()
.invoke("b(int)", src_op)
.setParam(13)
.completePort()
.preparePort()
.invoke("c(int)", src_op)
.setParam(17)
.completePort()
.build()};
// This operation emulates mixing of two source chains
auto mix_op = [](array<int*,2> src, int* res){ *res = (*src[0] + *src[1]) / 2; };
// Wiring for the Mix, building up three ports
// Since the first source-chain has only two ports,
// for the third result port we'll re-use the second source
ProcNode n3{prepareNode("n2")
.preparePort()
.invoke("A.mix(int/2)(int)", mix_op)
.connectLead(n2)
.connectLead(n1b)
.completePort()
.preparePort()
.invoke("B.mix(int/2)(int)", mix_op)
.connectLead(n2)
.connectLead(n1b)
.completePort()
.preparePort()
.invoke("C.mix(int/2)(int)", mix_op)
.connectLeadPort(n2,1)
.connectLead(n1b)
.completePort()
.build()};
SHOW_EXPR(watch(n1).getNodeSpec())
SHOW_EXPR(watch(n1).getPortSpec(0))
SHOW_EXPR(watch(n1).getPortSpec(1))
SHOW_EXPR(watch(n1.getPort(0)).getProcSpec())
SHOW_EXPR(watch(n1.getPort(0)).isSrc())
} }

View file

@ -98899,6 +98899,16 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
<font NAME="Monospaced" SIZE="9"/> <font NAME="Monospaced" SIZE="9"/>
</node> </node>
</node> </node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1736262340508" ID="ID_1540010113" MODIFIED="1736262527878" TEXT="Verdrahtung der Leads verifizieren">
<linktarget COLOR="#d10172" DESTINATION="ID_1540010113" ENDARROW="Default" ENDINCLINATION="-473;38;" ID="Arrow_ID_1593223212" SOURCE="ID_1980325374" STARTARROW="None" STARTINCLINATION="-242;0;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1736267197593" ID="ID_782732599" MODIFIED="1736267203116" TEXT="watch(Node)">
<node CREATED="1736267212093" ID="ID_175731942" MODIFIED="1736267280092" TEXT="verify_connected(Node&amp;, lead#)"/>
<node CREATED="1736267281885" ID="ID_1401668777" MODIFIED="1736267334900" TEXT="verify_connectedPort(Node&amp;, port#, input#)">
<arrowlink COLOR="#ffe4bc" DESTINATION="ID_1514661165" ENDARROW="Default" ENDINCLINATION="100;-5;" ID="Arrow_ID_792010004" STARTARROW="None" STARTINCLINATION="110;7;"/>
</node>
</node>
</node>
</node> </node>
<node CREATED="1728769243429" ID="ID_1535113263" MODIFIED="1728769249651" TEXT="f&#xfc;r einen Port..."> <node CREATED="1728769243429" ID="ID_1535113263" MODIFIED="1728769249651" TEXT="f&#xfc;r einen Port...">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728769266173" ID="ID_664281474" MODIFIED="1728769290143" TEXT="die Identit&#xe4;t der gebundenen Funktion feststellen"> <node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728769266173" ID="ID_664281474" MODIFIED="1728769290143" TEXT="die Identit&#xe4;t der gebundenen Funktion feststellen">
@ -98911,6 +98921,17 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
<arrowlink COLOR="#34417f" DESTINATION="ID_786613770" ENDARROW="Default" ENDINCLINATION="-278;-1402;" ID="Arrow_ID_1689861408" STARTARROW="None" STARTINCLINATION="-284;14;"/> <arrowlink COLOR="#34417f" DESTINATION="ID_786613770" ENDARROW="Default" ENDINCLINATION="-278;-1402;" ID="Arrow_ID_1689861408" STARTARROW="None" STARTINCLINATION="-284;14;"/>
<icon BUILTIN="button_ok"/> <icon BUILTIN="button_ok"/>
</node> </node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1736262340508" ID="ID_1424762602" MODIFIED="1736262533421" TEXT="Verdrahtung der Vorg&#xe4;nger-Ports verifizieren">
<linktarget COLOR="#d10172" DESTINATION="ID_1424762602" ENDARROW="Default" ENDINCLINATION="-390;24;" ID="Arrow_ID_329256820" SOURCE="ID_1980325374" STARTARROW="None" STARTINCLINATION="-202;0;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1736267134171" ID="ID_145839768" MODIFIED="1736267142436" TEXT="watch(Port)">
<node CREATED="1736267174444" ID="ID_1548126776" MODIFIED="1736267185084" TEXT="andocken per Template-Spezialisierung"/>
<node CREATED="1736267024072" ID="ID_1514661165" MODIFIED="1736267328034" TEXT="verify_connected(port, input#)">
<linktarget COLOR="#fdf9be" DESTINATION="ID_1514661165" ENDARROW="Default" ENDINCLINATION="-429;42;" ID="Arrow_ID_1746815334" SOURCE="ID_1677497952" STARTARROW="None" STARTINCLINATION="-358;-43;"/>
<linktarget COLOR="#ffe4bc" DESTINATION="ID_1514661165" ENDARROW="Default" ENDINCLINATION="100;-5;" ID="Arrow_ID_792010004" SOURCE="ID_1401668777" STARTARROW="None" STARTINCLINATION="110;7;"/>
</node>
</node>
</node>
</node> </node>
<node CREATED="1728771335267" ID="ID_1094389177" MODIFIED="1728771344519" TEXT="insgesamt...."> <node CREATED="1728771335267" ID="ID_1094389177" MODIFIED="1728771344519" TEXT="insgesamt....">
<node COLOR="#435e98" CREATED="1728771345748" ID="ID_286542606" MODIFIED="1732112583455" TEXT="reproduzierbare pseudo-Random-Eingabedaten"> <node COLOR="#435e98" CREATED="1728771345748" ID="ID_286542606" MODIFIED="1732112583455" TEXT="reproduzierbare pseudo-Random-Eingabedaten">
@ -99292,8 +99313,8 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
</node> </node>
</node> </node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1728785502988" HGAP="66" ID="ID_1973895762" MODIFIED="1732848541775" TEXT="Prototyping-1" VSHIFT="6"> <node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1728785502988" HGAP="66" ID="ID_1973895762" MODIFIED="1732848541775" TEXT="Prototyping-1" VSHIFT="6">
<linktarget COLOR="#ff6936" DESTINATION="ID_1973895762" ENDARROW="Default" ENDINCLINATION="-884;1900;" ID="Arrow_ID_208548527" SOURCE="ID_694989290" STARTARROW="None" STARTINCLINATION="369;22;"/>
<linktarget COLOR="#ed384d" DESTINATION="ID_1973895762" ENDARROW="Default" ENDINCLINATION="-1324;220;" ID="Arrow_ID_95845616" SOURCE="ID_623146928" STARTARROW="None" STARTINCLINATION="481;51;"/> <linktarget COLOR="#ed384d" DESTINATION="ID_1973895762" ENDARROW="Default" ENDINCLINATION="-1324;220;" ID="Arrow_ID_95845616" SOURCE="ID_623146928" STARTARROW="None" STARTINCLINATION="481;51;"/>
<linktarget COLOR="#ff6936" DESTINATION="ID_1973895762" ENDARROW="Default" ENDINCLINATION="-884;1900;" ID="Arrow_ID_208548527" SOURCE="ID_694989290" STARTARROW="None" STARTINCLINATION="369;22;"/>
<icon BUILTIN="pencil"/> <icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1728787061205" ID="ID_1090922930" MODIFIED="1733007833664" TEXT="das wird jetzt der &#xbb;Butter-bei-die-Fische&#xab;-Testfall"> <node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1728787061205" ID="ID_1090922930" MODIFIED="1733007833664" TEXT="das wird jetzt der &#xbb;Butter-bei-die-Fische&#xab;-Testfall">
<linktarget COLOR="#623946" DESTINATION="ID_1090922930" ENDARROW="Default" ENDINCLINATION="-1038;-60;" ID="Arrow_ID_1590621703" SOURCE="ID_577737571" STARTARROW="None" STARTINCLINATION="-1805;183;"/> <linktarget COLOR="#623946" DESTINATION="ID_1090922930" ENDARROW="Default" ENDINCLINATION="-1038;-60;" ID="Arrow_ID_1590621703" SOURCE="ID_577737571" STARTARROW="None" STARTINCLINATION="-1805;183;"/>
@ -99509,6 +99530,68 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
</node> </node>
</node> </node>
</node> </node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1736262408883" HGAP="59" ID="ID_1980325374" MODIFIED="1736262722331" TEXT="wie kann die korrekte Verdrahtung gepr&#xfc;ft werden?" VSHIFT="96">
<arrowlink COLOR="#d10172" DESTINATION="ID_1540010113" ENDARROW="Default" ENDINCLINATION="-473;38;" ID="Arrow_ID_1593223212" STARTARROW="None" STARTINCLINATION="-242;0;"/>
<arrowlink COLOR="#d10172" DESTINATION="ID_1424762602" ENDARROW="Default" ENDINCLINATION="-390;24;" ID="Arrow_ID_329256820" STARTARROW="None" STARTINCLINATION="-202;0;"/>
<linktarget COLOR="#f43058" DESTINATION="ID_1980325374" ENDARROW="Default" ENDINCLINATION="208;11;" ID="Arrow_ID_777099443" SOURCE="ID_527618200" STARTARROW="None" STARTINCLINATION="484;-30;"/>
<icon BUILTIN="help"/>
<node CREATED="1736262992245" ID="ID_1123908204" MODIFIED="1736262999772" TEXT="das zerf&#xe4;llt in zwei Teilaufgaben">
<node CREATED="1736263008731" ID="ID_622547813" MODIFIED="1736263832709" TEXT="ein Verbindungs-Ziel identifizieren">
<node CREATED="1736263027328" ID="ID_346081728" MODIFIED="1736263046449" TEXT="k&#xf6;nnte im Allgemeinen schwierig werden"/>
<node CREATED="1736263048051" ID="ID_1213127179" MODIFIED="1736263061378" TEXT="w&#xfc;rde vmtl. auf eine Node-Hash-ID aufbauen"/>
<node CREATED="1736263062443" ID="ID_1652250195" MODIFIED="1736263070643" TEXT="ist hier aber einfach...">
<node CREATED="1736263072178" ID="ID_1730228692" MODIFIED="1736263086300" TEXT="wir pr&#xfc;fen gegen ein festes, erwartetes Layout"/>
<node CREATED="1736263087344" ID="ID_89447455" MODIFIED="1736263104925" TEXT="wir haben die Nodes direkt per Referenz greifbar"/>
</node>
</node>
<node CREATED="1736263001244" ID="ID_471515867" MODIFIED="1736263007599" TEXT="an die Verbindungen rankommen">
<node CREATED="1736263233426" ID="ID_1812769389" MODIFIED="1736263590009" TEXT="f&#xfc;r Nodes gibt es einen Testzugang &#x27f6; lib::Several&lt;NodeRef&gt;"/>
<node CREATED="1736263835188" ID="ID_12001050" MODIFIED="1736263857098" TEXT="f&#xfc;r Ports wird&apos;s schwierig &#x2014; da nicht Gegenstand des Interfaces">
<node CREATED="1736263885677" ID="ID_532265632" MODIFIED="1736263906342" TEXT="tritt nur in einem bestimmten WeavingPattern auf"/>
<node CREATED="1736263907378" ID="ID_490139134" MODIFIED="1736263918636" TEXT="...das zwar der Default ist &#x2014; umso schlimmer!"/>
<node CREATED="1736263942477" ID="ID_386851830" MODIFIED="1736266396047" TEXT="die hierf&#xfc;r relevante Node-Info ist weggeworfen worden">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
...und zwar bewu&#223;t;
</p>
<p>
zun&#228;chst wollte ich ja einen Routing-Descriptor, um damit nochemal eine zweite Indirektion / Flexibilisierung gegen&#252;ber dem InvocationAdapter zu machen. Dann hat sich aber die Bedeutung des Invocation-Adapters so verschoben, da&#223; ein Teil seiner Rolle mit der FeedManifold verschmolzen ist, daf&#252;r aber ein rigideres Belegungsschema dem Binding-Functor abverlangt wird. Damit wurde explizite oder schematische Routing-Info eigentlich irrelevant, und ich habe sie durch direkte Referenzen ersetzt. <b>Und das ist nun das Problem</b>.
</p>
</body>
</html>
</richcontent>
</node>
</node>
<node CREATED="1736266569293" ID="ID_1677497952" MODIFIED="1736267148969" TEXT="Idee: verify-connected-to">
<arrowlink COLOR="#fdf9be" DESTINATION="ID_1514661165" ENDARROW="Default" ENDINCLINATION="-429;42;" ID="Arrow_ID_1746815334" STARTARROW="None" STARTINCLINATION="-358;-43;"/>
<icon BUILTIN="idea"/>
<node CREATED="1736266601561" ID="ID_1764393519" MODIFIED="1736266615731" TEXT="sollte als ein Test-Tool bereitgestellt werden"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1736266726272" ID="ID_1019914793" MODIFIED="1736266743347" TEXT="brauche daf&#xfc;r eine Erweiterung des Port-API">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1736266763928" ID="ID_1486436213" MODIFIED="1736266854064" TEXT="getInput(n) &#x27fc; optional&lt;PortRef&gt;">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1736266878204" ID="ID_767157537" MODIFIED="1736266983110" TEXT="k&#xf6;nnte aber auch ein watch(Port)-API sein">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1736266900665" ID="ID_1491413287" MODIFIED="1736266980547" TEXT="dann m&#xfc;&#xdf;te es aber einen entspr. Extension-Point geben">
<icon BUILTIN="yes"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1736266932532" ID="ID_1169427751" MODIFIED="1736266973255" TEXT="das ist einfach: partielle Spezialisierung">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1736266946435" ID="ID_480998861" MODIFIED="1736266973256" TEXT="die generische Variante liefert stets NOOPT">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
</node>
</node>
</node>
</node>
</node> </node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1730821117360" ID="ID_887734089" MODIFIED="1736199388910" TEXT="komplexere Node-Trees"> <node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1730821117360" ID="ID_887734089" MODIFIED="1736199388910" TEXT="komplexere Node-Trees">
<linktarget COLOR="#3e2e67" DESTINATION="ID_887734089" ENDARROW="Default" ENDINCLINATION="-520;56;" ID="Arrow_ID_448844357" SOURCE="ID_1898930555" STARTARROW="None" STARTINCLINATION="152;11;"/> <linktarget COLOR="#3e2e67" DESTINATION="ID_887734089" ENDARROW="Default" ENDINCLINATION="-520;56;" ID="Arrow_ID_448844357" SOURCE="ID_1898930555" STARTARROW="None" STARTINCLINATION="152;11;"/>
@ -99666,9 +99749,9 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
</node> </node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1736215886054" ID="ID_1144604426" MODIFIED="1736215892285" TEXT="komplexe Verbindungen"> <node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1736215886054" ID="ID_1144604426" MODIFIED="1736215892285" TEXT="komplexe Verbindungen">
<icon BUILTIN="pencil"/> <icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1736215894301" ID="ID_1690108933" MODIFIED="1736216006059" TEXT="Node mit mehreren Ports"> <node COLOR="#338800" CREATED="1736215894301" ID="ID_1690108933" MODIFIED="1736261793942" TEXT="Node mit mehreren Ports">
<linktarget COLOR="#8f9395" DESTINATION="ID_1690108933" ENDARROW="Default" ENDINCLINATION="-673;69;" ID="Arrow_ID_603018030" SOURCE="ID_1250657715" STARTARROW="None" STARTINCLINATION="284;25;"/> <linktarget COLOR="#8f9395" DESTINATION="ID_1690108933" ENDARROW="Default" ENDINCLINATION="-673;69;" ID="Arrow_ID_603018030" SOURCE="ID_1250657715" STARTARROW="None" STARTINCLINATION="284;25;"/>
<icon BUILTIN="pencil"/> <icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1736216011781" ID="ID_1584097136" MODIFIED="1736259267553" TEXT="compile-Fehler"> <node COLOR="#435e98" CREATED="1736216011781" ID="ID_1584097136" MODIFIED="1736259267553" TEXT="compile-Fehler">
<icon BUILTIN="broken-line"/> <icon BUILTIN="broken-line"/>
<node COLOR="#b80792" CREATED="1736216019268" ID="ID_1369103994" MODIFIED="1736216043871" TEXT="und ich wollte mir schon diesen Test sparen...."> <node COLOR="#b80792" CREATED="1736216019268" ID="ID_1369103994" MODIFIED="1736216043871" TEXT="und ich wollte mir schon diesen Test sparen....">
@ -99685,8 +99768,7 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
in der friend-Deklaration, sowie im Argument des intendierten Konstruktors (wenigstens bin ich konsequent...) in der friend-Deklaration, sowie im Argument des intendierten Konstruktors (wenigstens bin ich konsequent...)
</p> </p>
</body> </body>
</html> </html></richcontent>
</richcontent>
</node> </node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1736259191642" ID="ID_1271370010" MODIFIED="1736259261946" TEXT="....Templates sind t&#xfc;ckisch"> <node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1736259191642" ID="ID_1271370010" MODIFIED="1736259261946" TEXT="....Templates sind t&#xfc;ckisch">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
@ -99696,8 +99778,7 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
...denn die einzelnen Klauseln werden nur instantiiert wenn angesprochen. In einem bisher nie aktivierten Codepfad k&#246;nnen ganz banale Fehler lange &#252;berdauern ... ...denn die einzelnen Klauseln werden nur instantiiert wenn angesprochen. In einem bisher nie aktivierten Codepfad k&#246;nnen ganz banale Fehler lange &#252;berdauern ...
</p> </p>
</body> </body>
</html> </html></richcontent>
</richcontent>
<icon BUILTIN="clanbomber"/> <icon BUILTIN="clanbomber"/>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1736259230200" ID="ID_1007576844" MODIFIED="1736259246618"> <node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1736259230200" ID="ID_1007576844" MODIFIED="1736259246618">
<richcontent TYPE="NODE"><html> <richcontent TYPE="NODE"><html>
@ -99717,8 +99798,49 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
</node> </node>
</node> </node>
</node> </node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1736215909227" ID="ID_1158388367" MODIFIED="1736215933504" TEXT="parallel gebaute Processing-Chains"> <node COLOR="#338800" CREATED="1736215909227" ID="ID_1158388367" MODIFIED="1736261797410" TEXT="parallel gebaute Processing-Chains">
<icon BUILTIN="hourglass"/> <icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1736261798909" ID="ID_1935775336" MODIFIED="1736261815499" TEXT="Mix-Network aus zwei Source-Chains">
<icon BUILTIN="pencil"/>
<node COLOR="#435e98" CREATED="1736261821538" ID="ID_964402891" MODIFIED="1736262967696" TEXT="au&#xdf;erdem: drei Ports &#x2014; mu&#xdf; eine Quelle also aufdoppeln">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
Das ist ein realistisches Beispiel:
</p>
<ul>
<li>
zwei Clips
</li>
<li>
der erste Quell-Clip ist noch mit einem Effekt belegt
</li>
<li>
allerdings ist der erste Clip auch nur in zwei Ports aufbereitet (warum auch immer)
</li>
<li>
der Mix soll jedoch f&#252;r drei Ports bereitgestellt werden (warum auch immer &#8212; beispielsweise k&#246;nnten die Unterschiede nur im 2.Chain tats&#228;chlich bestehen, weil dieser ein anderes Farbformat hat)
</li>
</ul>
</body>
</html>
</richcontent>
<icon BUILTIN="yes"/>
</node>
<node COLOR="#338800" CREATED="1736262594933" ID="ID_891914799" MODIFIED="1736262738364" TEXT="mit Builder-Termen definieren">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1736262614480" ID="ID_527618200" MODIFIED="1736262735092" TEXT="generierte Verschaltung pr&#xfc;fen">
<arrowlink COLOR="#f43058" DESTINATION="ID_1980325374" ENDARROW="Default" ENDINCLINATION="208;11;" ID="Arrow_ID_777099443" STARTARROW="None" STARTINCLINATION="484;-30;"/>
<icon BUILTIN="flag-yellow"/>
</node>
<node COLOR="#5b280f" CREATED="1736262643100" ID="ID_1582622115" MODIFIED="1736262671755" TEXT="Aufruf wird erst im n&#xe4;chsten Beispiel getestet....">
<icon BUILTIN="stop-sign"/>
</node>
</node> </node>
</node> </node>
</node> </node>
@ -102077,8 +102199,7 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
Im R&#252;ckblick ist das, was mir dann passiert ist, also folgerichtig, und ich habe mich richtig verhalten, indem ich den Ansatz &#8222;h&#228;ngen lie&#223;&#8220;.... Im R&#252;ckblick ist das, was mir dann passiert ist, also folgerichtig, und ich habe mich richtig verhalten, indem ich den Ansatz &#8222;h&#228;ngen lie&#223;&#8220;....
</p> </p>
</body> </body>
</html> </html></richcontent>
</richcontent>
<icon BUILTIN="stop-sign"/> <icon BUILTIN="stop-sign"/>
</node> </node>
<node CREATED="1736198641765" ID="ID_236390246" MODIFIED="1736198686213" TEXT="das wird hinf&#xe4;llig &#x2014; und ohne sowas zerlegt man besser in einzel-Services"> <node CREATED="1736198641765" ID="ID_236390246" MODIFIED="1736198686213" TEXT="das wird hinf&#xe4;llig &#x2014; und ohne sowas zerlegt man besser in einzel-Services">
@ -102103,7 +102224,7 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
</html></richcontent> </html></richcontent>
</node> </node>
<node CREATED="1730425268920" ID="ID_909157635" MODIFIED="1730425292593" TEXT="es mu&#xdf; der Stream-Implementation-Type f&#xfc;r jeden Input und Output eingehen"/> <node CREATED="1730425268920" ID="ID_909157635" MODIFIED="1730425292593" TEXT="es mu&#xdf; der Stream-Implementation-Type f&#xfc;r jeden Input und Output eingehen"/>
<node CREATED="1730425303443" ID="ID_1906269130" MODIFIED="1730426066823" TEXT="diese Infos stammen sogar aus einem h&#xf6;heren Builder-Level"> <node CREATED="1730425303443" ID="ID_1906269130" MODIFIED="1736267321097" TEXT="diese Infos stammen sogar aus einem h&#xf6;heren Builder-Level">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head/> <head/>
<body> <body>