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:
parent
890cba49a2
commit
1aae4fdcdd
4 changed files with 242 additions and 34 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
* 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«
|
||||
* @todo WIP 2025 Node-Invocation is reworked from ground up for the »Playback Vertical Slice«
|
||||
*/
|
||||
class ProcNode
|
||||
: util::NonCopyable
|
||||
|
|
@ -217,16 +211,10 @@ namespace engine {
|
|||
Connectivity wiring_;
|
||||
|
||||
public:
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1367 : Rebuild the Node Invocation
|
||||
ProcNode (Connectivity&& con)
|
||||
: wiring_(move(con))
|
||||
{ }
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1367 : Rebuild the Node Invocation
|
||||
|
||||
|
||||
public:
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1367 : Rebuild the Node Invocation
|
||||
|
||||
Port&
|
||||
getPort (uint portIdx)
|
||||
|
|
@ -258,14 +246,14 @@ namespace engine {
|
|||
TurnoutSystem turnoutSystem{nomTime, procKey};
|
||||
return getPort(portIdx).weave (turnoutSystem, output);
|
||||
}
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1367 : Rebuild the Node Invocation
|
||||
|
||||
/// „backdoor“ to watch internals from tests
|
||||
friend class ProcNodeDiagnostic;
|
||||
};
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1367 : Rebuild the Node Invocation
|
||||
/* ========== Diagnostic and Testing ========== */
|
||||
|
||||
class ProcNodeDiagnostic
|
||||
: 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
|
||||
#endif /*STEAM_ENGINE_PROC_NODE_H*/
|
||||
|
|
|
|||
|
|
@ -23,7 +23,9 @@
|
|||
#include "lib/test/diagnostic-output.hpp"/////////////////TODO
|
||||
#include "lib/util.hpp"
|
||||
|
||||
#include <array>
|
||||
|
||||
using std::array;
|
||||
using util::isnil;
|
||||
//using std::string;
|
||||
using util::isSameObject;
|
||||
|
|
@ -122,31 +124,79 @@ namespace test {
|
|||
void
|
||||
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
|
||||
ProcNode n1{prepareNode("n1")
|
||||
.preparePort()
|
||||
.invoke("a(int)", srcOp)
|
||||
.invoke("a(int)", src_op)
|
||||
.setParam(5)
|
||||
.completePort()
|
||||
.preparePort()
|
||||
.invoke("b(int)", srcOp)
|
||||
.invoke("b(int)", src_op)
|
||||
.setParam(23)
|
||||
.completePort()
|
||||
.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")
|
||||
.preparePort()
|
||||
.invoke("+1(int)(int)", add1Op)
|
||||
.invoke("+1(int)(int)", add1_op)
|
||||
.connectLead(n1)
|
||||
.completePort()
|
||||
.preparePort()
|
||||
.invoke("+1(int)(int)", add1Op)
|
||||
.invoke("+1(int)(int)", add1_op)
|
||||
.connectLead(n1)
|
||||
.completePort()
|
||||
.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())
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -98899,6 +98899,16 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension)
|
|||
<font NAME="Monospaced" SIZE="9"/>
|
||||
</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&, lead#)"/>
|
||||
<node CREATED="1736267281885" ID="ID_1401668777" MODIFIED="1736267334900" TEXT="verify_connectedPort(Node&, 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 CREATED="1728769243429" ID="ID_1535113263" MODIFIED="1728769249651" TEXT="für einen Port...">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728769266173" ID="ID_664281474" MODIFIED="1728769290143" TEXT="die Identität der gebundenen Funktion feststellen">
|
||||
|
|
@ -98911,6 +98921,17 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension)
|
|||
<arrowlink COLOR="#34417f" DESTINATION="ID_786613770" ENDARROW="Default" ENDINCLINATION="-278;-1402;" ID="Arrow_ID_1689861408" STARTARROW="None" STARTINCLINATION="-284;14;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1736262340508" ID="ID_1424762602" MODIFIED="1736262533421" TEXT="Verdrahtung der Vorgä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 CREATED="1728771335267" ID="ID_1094389177" MODIFIED="1728771344519" TEXT="insgesamt....">
|
||||
<node COLOR="#435e98" CREATED="1728771345748" ID="ID_286542606" MODIFIED="1732112583455" TEXT="reproduzierbare pseudo-Random-Eingabedaten">
|
||||
|
|
@ -99292,8 +99313,8 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension)
|
|||
</node>
|
||||
</node>
|
||||
<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="#ff6936" DESTINATION="ID_1973895762" ENDARROW="Default" ENDINCLINATION="-884;1900;" ID="Arrow_ID_208548527" SOURCE="ID_694989290" STARTARROW="None" STARTINCLINATION="369;22;"/>
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1728787061205" ID="ID_1090922930" MODIFIED="1733007833664" TEXT="das wird jetzt der »Butter-bei-die-Fische«-Testfall">
|
||||
<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<R1> b1, Extension<R1,R2> extension)
|
|||
</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ü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ä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önnte im Allgemeinen schwierig werden"/>
|
||||
<node CREATED="1736263048051" ID="ID_1213127179" MODIFIED="1736263061378" TEXT="wü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ü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ür Nodes gibt es einen Testzugang ⟶ lib::Several<NodeRef>"/>
|
||||
<node CREATED="1736263835188" ID="ID_12001050" MODIFIED="1736263857098" TEXT="für Ports wird's schwierig — 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 — umso schlimmer!"/>
|
||||
<node CREATED="1736263942477" ID="ID_386851830" MODIFIED="1736266396047" TEXT="die hierfür relevante Node-Info ist weggeworfen worden">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
...und zwar bewußt;
|
||||
</p>
|
||||
<p>
|
||||
zunächst wollte ich ja einen Routing-Descriptor, um damit nochemal eine zweite Indirektion / Flexibilisierung gegenüber dem InvocationAdapter zu machen. Dann hat sich aber die Bedeutung des Invocation-Adapters so verschoben, daß ein Teil seiner Rolle mit der FeedManifold verschmolzen ist, dafü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ü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) ⟼ optional<PortRef>">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1736266878204" ID="ID_767157537" MODIFIED="1736266983110" TEXT="kö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üß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 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;"/>
|
||||
|
|
@ -99666,9 +99749,9 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension)
|
|||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1736215886054" ID="ID_1144604426" MODIFIED="1736215892285" TEXT="komplexe Verbindungen">
|
||||
<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;"/>
|
||||
<icon BUILTIN="pencil"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1736216011781" ID="ID_1584097136" MODIFIED="1736259267553" TEXT="compile-Fehler">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<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<R1> b1, Extension<R1,R2> extension)
|
|||
in der friend-Deklaration, sowie im Argument des intendierten Konstruktors (wenigstens bin ich konsequent...)
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1736259191642" ID="ID_1271370010" MODIFIED="1736259261946" TEXT="....Templates sind tückisch">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -99696,8 +99778,7 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension)
|
|||
...denn die einzelnen Klauseln werden nur instantiiert wenn angesprochen. In einem bisher nie aktivierten Codepfad können ganz banale Fehler lange überdauern ...
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="clanbomber"/>
|
||||
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1736259230200" ID="ID_1007576844" MODIFIED="1736259246618">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
|
|
@ -99717,8 +99798,49 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension)
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1736215909227" ID="ID_1158388367" MODIFIED="1736215933504" TEXT="parallel gebaute Processing-Chains">
|
||||
<icon BUILTIN="hourglass"/>
|
||||
<node COLOR="#338800" CREATED="1736215909227" ID="ID_1158388367" MODIFIED="1736261797410" TEXT="parallel gebaute Processing-Chains">
|
||||
<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ßerdem: drei Ports — muß 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ür drei Ports bereitgestellt werden (warum auch immer — beispielsweise könnten die Unterschiede nur im 2.Chain tatsä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ü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ächsten Beispiel getestet....">
|
||||
<icon BUILTIN="stop-sign"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -102077,8 +102199,7 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension)
|
|||
Im Rückblick ist das, was mir dann passiert ist, also folgerichtig, und ich habe mich richtig verhalten, indem ich den Ansatz „hängen ließ“....
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="stop-sign"/>
|
||||
</node>
|
||||
<node CREATED="1736198641765" ID="ID_236390246" MODIFIED="1736198686213" TEXT="das wird hinfällig — und ohne sowas zerlegt man besser in einzel-Services">
|
||||
|
|
@ -102103,7 +102224,7 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension)
|
|||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1730425268920" ID="ID_909157635" MODIFIED="1730425292593" TEXT="es muß der Stream-Implementation-Type für jeden Input und Output eingehen"/>
|
||||
<node CREATED="1730425303443" ID="ID_1906269130" MODIFIED="1730426066823" TEXT="diese Infos stammen sogar aus einem höheren Builder-Level">
|
||||
<node CREATED="1730425303443" ID="ID_1906269130" MODIFIED="1736267321097" TEXT="diese Infos stammen sogar aus einem höheren Builder-Level">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
|
|
|
|||
Loading…
Reference in a new issue