Invocation: investigate ways to introduce a parameter-functor

While the handling of invocation parameters is now integrated in the node processing,
there is still a gap to close in the Node Builder, which is tricky due to the way
the parameter-functor is now integrated deeply into the setup of the `FeedManifold`;
so the `PortBuilder` is tasked now with implanting a `FeedPrototype` -- which must be
adapted to a ''specific parameter-functor,'' which is only supplied optionally,
as a further build step.

At first this seemed to present a pattern very similar to a ''State Monad'' — and thus
I investigated if encapsulating the build of the prototype into such a State Monad would
simplify the structure of the builder — yet once again, Monads turned out as ''Anti Pattern''
rather: we'd had to ad an extra component, which is superficially generic
but without any tangible relation to patterns of the real world, it would be
rather technical (using lots of composed lambda primitives, which will be condensed
into a single builder function by the compiler / optimiser. But worse still,
this highly complicated setup does not actually solve the problem with N x M
typed contexts — implying that it ''is not actually an abstraction,'' rather just
pretends to be generic.

The benefit of this lengthy design exercise is to understand better the situation
in the builder, which amounts to building up mixed typed context with several
degrees of freedom. It is better to accept this reality and keep it in  plain sight,
i.e. let the builder be explicitly typed from end to end and do not try
to package parts of this selection process behind a virtualisation.
This commit is contained in:
Fischlurch 2024-12-26 05:14:33 +01:00
parent 9f348e6944
commit b46e21e24d
3 changed files with 581 additions and 53 deletions

View file

@ -353,6 +353,9 @@ namespace engine {
/*************************************************************//** /*************************************************************//**
* Terminal: complete the Port wiring and return to the node level. * Terminal: complete the Port wiring and return to the node level.
* @remark this prepares a suitable Turnout instance for a port;
* but due to constraints with memory allocation, actual build
* is delayed and packaged as functor into a PatternData instance.
*/ */
auto auto
completePort() completePort()
@ -369,9 +372,20 @@ namespace engine {
: _Par{move(base)} : _Par{move(base)}
, weavingBuilder_{forward<FUN> (fun), _Par::symbol_, portSpec, _Par::leads_.policyConnect()} , weavingBuilder_{forward<FUN> (fun), _Par::symbol_, portSpec, _Par::leads_.policyConnect()}
, defaultPort_{_Par::patternData_.size()} , defaultPort_{_Par::patternData_.size()}
{ } { } // ^^^ by default use next free port
friend class PortBuilderRoot<POL,DAT>; friend class PortBuilderRoot<POL,DAT>;
/** cross-builder to adapt embedded WeavingBuilder type */
template<class WABO>
PortBuilder (PortBuilder<POL,DAT,WABO>&& prevBuilder, WAB&& adaptedWeavingBuilder)
: _Par{move(prevBuilder)}
, weavingBuilder_{move (adaptedWeavingBuilder)}
, defaultPort_{prevBuilder.defaultPort_}
{ }
template<class PX, class DX, class WX>
friend class PortBuilder;
}; };
@ -401,7 +415,8 @@ namespace engine {
auto auto
PortBuilderRoot<POL,DAT>::invoke (StrView portSpec, FUN fun) PortBuilderRoot<POL,DAT>::invoke (StrView portSpec, FUN fun)
{ {
using WeavingBuilder_FUN = WeavingBuilder<POL, FUN>; using Prototype = typename FeedManifold<FUN>::Prototype;
using WeavingBuilder_FUN = WeavingBuilder<POL, Prototype>;
return PortBuilder<POL,DAT, WeavingBuilder_FUN>{move(*this), move(fun), portSpec}; return PortBuilder<POL,DAT, WeavingBuilder_FUN>{move(*this), move(fun), portSpec};
} }
/* /*

View file

@ -235,18 +235,19 @@ namespace engine {
* actual NodeBuilder and PortBuilder allows to introduce extension points * actual NodeBuilder and PortBuilder allows to introduce extension points
* and helps to abstract away internal technical details of the invocation. * and helps to abstract away internal technical details of the invocation.
* @tparam POL allocation and context configuration policy * @tparam POL allocation and context configuration policy
* @tparam FUN function or invocation adapter to invoke * @tparam PROT Prototype to generate a Feed or invocation adapter to invoke
* @remark in the standard case, PROT is a FeedManifold<FUN>::Prototype and
* thus embeds the processing-functor and possibly a parameter-functor
*/ */
template<class POL, class FUN> template<class POL, class PROT>
struct WeavingBuilder struct WeavingBuilder
: util::MoveOnly : util::MoveOnly
{ {
using Prototype = typename FeedManifold<FUN>::Prototype; using WeavingPattern = MediaWeavingPattern<PROT>;
using WeavingPattern = MediaWeavingPattern<Prototype>;
using TurnoutWeaving = Turnout<WeavingPattern>; using TurnoutWeaving = Turnout<WeavingPattern>;
static constexpr SizMark<sizeof(TurnoutWeaving)> sizMark{}; static constexpr SizMark<sizeof(TurnoutWeaving)> sizMark{};
static constexpr uint FAN_I = Prototype::FAN_I; static constexpr uint FAN_I = PROT::FAN_I;
static constexpr uint FAN_O = Prototype::FAN_O; static constexpr uint FAN_O = PROT::FAN_O;
using TypeMarker = std::function<BuffDescr(BufferProvider&)>; using TypeMarker = std::function<BuffDescr(BufferProvider&)>;
@ -262,15 +263,27 @@ namespace engine {
StrView nodeSymb_; StrView nodeSymb_;
StrView portSpec_; StrView portSpec_;
FUN fun_; PROT prototype_;
template<typename...INIT> template<typename...INIT>
WeavingBuilder(FUN&& init, StrView nodeSymb, StrView portSpec, INIT&& ...alloInit) WeavingBuilder (PROT&& prototype, StrView nodeSymb, StrView portSpec, INIT&& ...alloInit)
: leadPorts{forward<INIT> (alloInit)...} : leadPorts{forward<INIT> (alloInit)...}
, buffTypes{fillDefaultBufferTypes()} , buffTypes{fillDefaultBufferTypes()}
, nodeSymb_{nodeSymb} , nodeSymb_{nodeSymb}
, portSpec_{portSpec} , portSpec_{portSpec}
, fun_{move(init)} , prototype_{move(prototype)}
{ }
/** cross-ctor to switch to another prototype */
template<class PREV>
WeavingBuilder (WeavingBuilder<POL,PREV>&& prevBuilder, PROT&& adaptedPrototype)
: leadPorts {move (prevBuilder.leadPorts)}
, buffTypes {move (prevBuilder.buffTypes)}
, providers {move (prevBuilder.providers)}
, resultSlot{move (prevBuilder.resultSlot)}
, nodeSymb_ {move (prevBuilder.nodeSymb_)}
, portSpec_ {move (prevBuilder.portSpec_)}
, prototype_{move (adaptedPrototype)}
{ } { }
WeavingBuilder&& WeavingBuilder&&
@ -333,7 +346,7 @@ namespace engine {
// provide a free-standing functor to build a suitable Port impl (≙Turnout) // provide a free-standing functor to build a suitable Port impl (≙Turnout)
return [leads = move(leadPorts.build()) return [leads = move(leadPorts.build())
,types = move(outTypes.build()) ,types = move(outTypes.build())
,procFun = move(fun_) ,prototype = move(prototype_)
,resultIdx = resultSlot ,resultIdx = resultSlot
,procID = ProcID::describe (nodeSymb_,portSpec_) ,procID = ProcID::describe (nodeSymb_,portSpec_)
] ]
@ -343,7 +356,7 @@ namespace engine {
,move(leads) ,move(leads)
,move(types) ,move(types)
,resultIdx ,resultIdx
,move(procFun) ,move(prototype)
); );
}; };
} }
@ -382,7 +395,7 @@ namespace engine {
} }
}; };
using OutTypesDescriptors = typename Prototype::template OutTypesApply<BufferDescriptor>; using OutTypesDescriptors = typename PROT::template OutTypesApply<BufferDescriptor>;
using OutDescriptorTup = lib::meta::Tuple<OutTypesDescriptors>; using OutDescriptorTup = lib::meta::Tuple<OutTypesDescriptors>;
/** A tuple of BufferDescriptor instances for all output buffer types */ /** A tuple of BufferDescriptor instances for all output buffer types */

View file

@ -28727,9 +28727,7 @@
<node CREATED="1555947549617" ID="ID_386072993" MODIFIED="1557498707228" TEXT="das compiliert problemlos"/> <node CREATED="1555947549617" ID="ID_386072993" MODIFIED="1557498707228" TEXT="das compiliert problemlos"/>
<node CREATED="1555947561535" ID="ID_858467762" MODIFIED="1557498707228" TEXT="und macht LValue-Initialisierung"> <node CREATED="1555947561535" ID="ID_858467762" MODIFIED="1557498707228" TEXT="und macht LValue-Initialisierung">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
...sichtbar wenn man ein Trackr-Objekt ...sichtbar wenn man ein Trackr-Objekt
@ -29228,9 +29226,7 @@
<node CREATED="1560303652840" ID="ID_1947607603" MODIFIED="1560303667034" TEXT="Konsequenz des generischen &#xbb;Ruler&#xab;-Konzepts"/> <node CREATED="1560303652840" ID="ID_1947607603" MODIFIED="1560303667034" TEXT="Konsequenz des generischen &#xbb;Ruler&#xab;-Konzepts"/>
<node CREATED="1560303597884" ID="ID_1906099403" MODIFIED="1576282358060" TEXT="wurde notwendig wegen der Aufteilung in zwei Canvas"> <node CREATED="1560303597884" ID="ID_1906099403" MODIFIED="1576282358060" TEXT="wurde notwendig wegen der Aufteilung in zwei Canvas">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
vorher war n&#228;mlich das Profil im Canvas selber. vorher war n&#228;mlich das Profil im Canvas selber.
@ -29941,9 +29937,7 @@
<node CREATED="1674510325404" ID="ID_1324802717" MODIFIED="1674513323111" TEXT="Ruler schlie&#xdf;en automatisch das Root-Prelude ein"/> <node CREATED="1674510325404" ID="ID_1324802717" MODIFIED="1674513323111" TEXT="Ruler schlie&#xdf;en automatisch das Root-Prelude ein"/>
<node CREATED="1674510350137" ID="ID_269721067" MODIFIED="1674510480677"> <node CREATED="1674510350137" ID="ID_269721067" MODIFIED="1674510480677">
<richcontent TYPE="NODE"><html> <richcontent TYPE="NODE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
nested enth&#228;lt <i>N&#228;herung</i>&#160;f&#252;r slope-up nested enth&#228;lt <i>N&#228;herung</i>&#160;f&#252;r slope-up
@ -30587,9 +30581,7 @@
</node> </node>
<node CREATED="1569711798770" ID="ID_1246108677" MODIFIED="1569712021835"> <node CREATED="1569711798770" ID="ID_1246108677" MODIFIED="1569712021835">
<richcontent TYPE="NODE"><html> <richcontent TYPE="NODE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
Abstraktion: <b>ViewHook</b>&#160;(-&gt;Canvas) Abstraktion: <b>ViewHook</b>&#160;(-&gt;Canvas)
@ -31504,9 +31496,7 @@
</node> </node>
<node CREATED="1665955930245" ID="ID_886604417" MODIFIED="1665956909622" TEXT="zumindest Glib::ObjectBase-ctor kann man setzen..."> <node CREATED="1665955930245" ID="ID_886604417" MODIFIED="1665956909622" TEXT="zumindest Glib::ObjectBase-ctor kann man setzen...">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
damit kann man zwar einen Klassennamen f&#252;r ein Custom-Widget setzen, also z.B.&#160;&#160;'gtkmm__CustomObject_xyz' (wobei man xyz an den ctor &#252;bergeben hat). Aber das hat keinen Einflu&#223; auf den Tag-Namen, wie er f&#252;r den CSS-Selector relevant ist damit kann man zwar einen Klassennamen f&#252;r ein Custom-Widget setzen, also z.B.&#160;&#160;'gtkmm__CustomObject_xyz' (wobei man xyz an den ctor &#252;bergeben hat). Aber das hat keinen Einflu&#223; auf den Tag-Namen, wie er f&#252;r den CSS-Selector relevant ist
@ -31627,9 +31617,7 @@
<node CREATED="1566517520897" ID="ID_1585833997" MODIFIED="1566517533715" TEXT="nur beim abschlie&#xdf;enden Slope"/> <node CREATED="1566517520897" ID="ID_1585833997" MODIFIED="1566517533715" TEXT="nur beim abschlie&#xdf;enden Slope"/>
<node CREATED="1566517544022" ID="ID_1083102048" MODIFIED="1576282358049" TEXT="f&#xfc;gt dem jeweils letzten hinzu"> <node CREATED="1566517544022" ID="ID_1083102048" MODIFIED="1576282358049" TEXT="f&#xfc;gt dem jeweils letzten hinzu">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
...anstatt f&#252;r jeden schlie&#223;enden nested scope noch ein weiteres Verb hinzuzuf&#252;gen. ...anstatt f&#252;r jeden schlie&#223;enden nested scope noch ein weiteres Verb hinzuzuf&#252;gen.
@ -32143,9 +32131,7 @@
<node CREATED="1563637202035" ID="ID_681324395" MODIFIED="1563637205854" TEXT="Auswege?"> <node CREATED="1563637202035" ID="ID_681324395" MODIFIED="1563637205854" TEXT="Auswege?">
<node CREATED="1563637219445" FOLDED="true" ID="ID_1413699114" MODIFIED="1576282358044" TEXT="Reverse-Engineering"> <node CREATED="1563637219445" FOLDED="true" ID="ID_1413699114" MODIFIED="1576282358044" TEXT="Reverse-Engineering">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
den Zeichenvorgang f&#252;r ein normales Frame-Widget analysieren den Zeichenvorgang f&#252;r ein normales Frame-Widget analysieren
@ -32696,9 +32682,7 @@
<icon BUILTIN="button_cancel"/> <icon BUILTIN="button_cancel"/>
<node CREATED="1566401334135" ID="ID_688081615" MODIFIED="1576282358043" TEXT="doch nicht so schlimm"> <node CREATED="1566401334135" ID="ID_688081615" MODIFIED="1576282358043" TEXT="doch nicht so schlimm">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
weil die CSS-box-shadow-Effekte zum Zeichnen komplexerer Strukturen nur bedingt n&#252;tzlich sind. weil die CSS-box-shadow-Effekte zum Zeichnen komplexerer Strukturen nur bedingt n&#252;tzlich sind.
@ -82215,8 +82199,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1733430960965" ID="ID_1619015453" MODIFIED="1733431403397" TEXT="Spezialfall-Behandlung: Parameter-Nodes"> <node CREATED="1733430960965" ID="ID_1619015453" MODIFIED="1733431403397" TEXT="Spezialfall-Behandlung: Parameter-Nodes">
<linktarget COLOR="#c50127" DESTINATION="ID_1619015453" ENDARROW="Default" ENDINCLINATION="-153;535;" ID="Arrow_ID_1374888051" SOURCE="ID_1513206906" STARTARROW="None" STARTINCLINATION="719;37;"/> <linktarget COLOR="#c50127" DESTINATION="ID_1619015453" ENDARROW="Default" ENDINCLINATION="-153;535;" ID="Arrow_ID_1374888051" SOURCE="ID_1513206906" STARTARROW="None" STARTINCLINATION="719;37;"/>
<linktarget COLOR="#ce5d7e" DESTINATION="ID_1619015453" ENDARROW="Default" ENDINCLINATION="-417;871;" ID="Arrow_ID_386484765" SOURCE="ID_1092181172" STARTARROW="None" STARTINCLINATION="549;-1534;"/> <linktarget COLOR="#ce5d7e" DESTINATION="ID_1619015453" ENDARROW="Default" ENDINCLINATION="-417;871;" ID="Arrow_ID_386484765" SOURCE="ID_1092181172" STARTARROW="None" STARTINCLINATION="549;-1534;"/>
<node CREATED="1733431417535" ID="ID_704224255" MODIFIED="1733431533095" TEXT="ParamAgent-Node"> <node CREATED="1733431417535" ID="ID_704224255" MODIFIED="1735055758856" TEXT="Parameter-Einspeisung">
<node CREATED="1733431561916" ID="ID_310315082" MODIFIED="1733431608129" TEXT="ist (immer?) eine Source-Node"> <node CREATED="1733431417535" ID="ID_1291347161" LINK="#ID_38547756" MODIFIED="1735055873492" TEXT="Plan: &#xbb;ParamAgent&#xab;-Node"/>
<node CREATED="1733431561916" ID="ID_310315082" MODIFIED="1735055821959" TEXT="ist (immer?) eine Source-Node">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head/> <head/>
<body> <body>
@ -82226,8 +82211,89 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</body> </body>
</html></richcontent> </html></richcontent>
</node> </node>
<node COLOR="#5b280f" CREATED="1735055896356" ID="ID_1490602941" MODIFIED="1735055923494" TEXT="Konzept-&#xc4;nderung: spezielle Einspeisung wird &#xfc;berfl&#xfc;ssig">
<icon BUILTIN="stop-sign"/>
<node CREATED="1735058786373" ID="ID_855735841" LINK="#ID_936596772" MODIFIED="1735058963503" TEXT="Analyse und Diskussion konzentrierten sich zun&#xe4;chst auf die Parameter-Versorgungs-Struktur">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...also vor allem die Frage: wirft das jetzt alles &#252;ber den Haufen, kann man es au&#223;en anbauen, oder gar in bestehende Strukturen lediglich hinein-codieren?
</p>
</body>
</html>
</richcontent>
</node> </node>
<node CREATED="1733431522849" ID="ID_1650778246" MODIFIED="1733431535243" TEXT="ParamEval-Node"/> <node CREATED="1735056823011" ID="ID_256116626" LINK="#ID_1150277906" MODIFIED="1735058896369" TEXT="habe dann aber &#xbb;Parametrisierbarkeit&#xab; als Anforderung nochmal grunds&#xe4;tzlich durchdacht">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...da ich (wie so oft) mich bereits viel zu tief ins &#187;wie&#171; verstrickt habe...
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1735057998013" ID="ID_1759924838" LINK="#ID_166227320" MODIFIED="1735059113036" TEXT="daraus entstand ein &#xbb;Misch-Modell&#xab; f&#xfc;r die Verwendung des TurnoutSystem">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...wobei es darum geht, wie die (bisher rein intuitive) Vorstellung vom Turnout-System in tats&#228;chliche Strukturen &#252;bersetzt werden kann, und auf welcher Ebene dabei die Parameter-Verarbeitung sinnvollerweise anzusiedeln ist
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1735058066868" ID="ID_261014041" LINK="#ID_1350706165" MODIFIED="1735058896378" TEXT="mit der Konsequenz da&#xdf; Datentupel direkt in die Verarbeitung hineingenommen werden">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...denn bereits f&#252;r die Umsetzung der verkn&#252;pften, kaskadierenden Storage f&#252;r das Turnout-System mu&#223;te ich massiv in die Meta-Programmierung einsteigen und mir das Instrumentarium f&#252;r den Umgang mit beliebigen Datentupeln bereitlegen ... und so f&#252;hlte ich mich ger&#252;stet, diese Art Datenhaltung direkt in die Kernverarbeitung hineinzunehmen, die dadurch (abz&#252;glich der Metaprogrammierung) &#8222;eigentlich einfach&#8220; wird...
</p>
</body>
</html></richcontent>
</node>
</node>
<node CREATED="1735059136933" ID="ID_609019627" LINK="#ID_1347066000" MODIFIED="1735064562308" TEXT="Parameter werden nun direkt in der FeedManifold abgelegt">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Das bedeutet zweierlei
</p>
<ul>
<li>
die Daten in der Invocation werden <i>breiter</i>&#160;und weisen Parameter-Werte direkt sichtbar aus
</li>
<li>
die Parameter-Verarbeitung aber wandert von der Oberfl&#228;che <i>tief in die Weaving-Patterns hinein</i>&#160;und wird beim Aufruf implizit mit angetriggert.
</li>
</ul>
<p>
Der Ankerpunkt der normalen Verarbeitung sitzt nun im FeedPrototype, wird also sofort im ersten mount()-Schritt der Webe-Sequenz aufgerufen
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1735064599178" ID="ID_152831343" MODIFIED="1735064621219" TEXT="Konsequenz &#x27f9; Builder steuert Parameter via FeedPrototype"/>
<node CREATED="1735064622575" ID="ID_873434155" MODIFIED="1735068695791" TEXT="Ansatzpunkt auf dem Port-Builder">
<arrowlink COLOR="#8595a8" DESTINATION="ID_1218064070" ENDARROW="Default" ENDINCLINATION="-31;-184;" ID="Arrow_ID_1907314003" STARTARROW="None" STARTINCLINATION="-201;17;"/>
<node CREATED="1735064673697" ID="ID_1825450032" MODIFIED="1735064771303" TEXT="brauche Quer-Schwenk auf schon bestehendem (vollen) PortBuilder">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
denn nun wird in der Regel erst mal aus dem PortBuilderRoot das Binding f&#252;r die Processing-Function angelegt &#10233; PortBuilder &#8212; und erst von dort gibt man dann Parameter an &#10233; modifizierter PortBuilder
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1735064779481" ID="ID_1880332085" MODIFIED="1735064805874" TEXT="mu&#xdf; Parametrisierung des eingebetteten WeavingBuilders heben / erg&#xe4;nzen"/>
</node>
</node>
<node CREATED="1733431522849" ID="ID_1650778246" MODIFIED="1735055781159" TEXT="ParamNode: Auswertung"/>
</node> </node>
<node CREATED="1720143945014" ID="ID_1230383106" MODIFIED="1720143962663" TEXT="prepareNode()"> <node CREATED="1720143945014" ID="ID_1230383106" MODIFIED="1720143962663" TEXT="prepareNode()">
<node CREATED="1720143965823" ID="ID_1699834856" MODIFIED="1720144003274" TEXT="addLead(ProcNode&amp;)"/> <node CREATED="1720143965823" ID="ID_1699834856" MODIFIED="1720144003274" TEXT="addLead(ProcNode&amp;)"/>
@ -82271,7 +82337,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</body> </body>
</html></richcontent> </html></richcontent>
</node> </node>
<node CREATED="1728587167953" HGAP="61" ID="ID_581121579" MODIFIED="1728587192330" TEXT="richtet implizites default-Mapping ein" VSHIFT="-11"/> <node CREATED="1728587167953" HGAP="61" ID="ID_581121579" MODIFIED="1735067281228" TEXT="richtet implizites default-Mapping ein (1:1)" VSHIFT="-11"/>
</node> </node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1719970368235" ID="ID_1051554068" MODIFIED="1728586726004" TEXT="Buffer vorbereiten"> <node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1719970368235" ID="ID_1051554068" MODIFIED="1728586726004" TEXT="Buffer vorbereiten">
<icon BUILTIN="hourglass"/> <icon BUILTIN="hourglass"/>
@ -82287,6 +82353,10 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1728587027861" ID="ID_1530575925" MODIFIED="1728587061668" TEXT="connectLeadPort(ProcNode&amp;, p)"/> <node CREATED="1728587027861" ID="ID_1530575925" MODIFIED="1728587061668" TEXT="connectLeadPort(ProcNode&amp;, p)"/>
<node CREATED="1728587063136" ID="ID_26296441" MODIFIED="1728587070363" TEXT="useLeadPort(p)"/> <node CREATED="1728587063136" ID="ID_26296441" MODIFIED="1728587070363" TEXT="useLeadPort(p)"/>
</node> </node>
<node CREATED="1735068628307" ID="ID_1218064070" MODIFIED="1735070937224" TEXT="Konfiguration f&#xfc;r Parameter">
<arrowlink COLOR="#3d55ca" DESTINATION="ID_470723577" ENDARROW="Default" ENDINCLINATION="-1255;-52;" ID="Arrow_ID_767774106" STARTARROW="None" STARTINCLINATION="464;45;"/>
<linktarget COLOR="#8595a8" DESTINATION="ID_1218064070" ENDARROW="Default" ENDINCLINATION="-31;-184;" ID="Arrow_ID_1907314003" SOURCE="ID_873434155" STARTARROW="None" STARTINCLINATION="-201;17;"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1720146340213" ID="ID_1871545026" MODIFIED="1720230570516" TEXT="TODO: API f&#xfc;r Mapping"> <node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1720146340213" ID="ID_1871545026" MODIFIED="1720230570516" TEXT="TODO: API f&#xfc;r Mapping">
<icon BUILTIN="flag-yellow"/> <icon BUILTIN="flag-yellow"/>
<node CREATED="1720146352115" ID="ID_989391502" MODIFIED="1720146395401" TEXT="ausgangsseitig: einfach"> <node CREATED="1720146352115" ID="ID_989391502" MODIFIED="1720146395401" TEXT="ausgangsseitig: einfach">
@ -82378,7 +82448,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="yes"/> <icon BUILTIN="yes"/>
<node CREATED="1721782152173" ID="ID_300319891" MODIFIED="1721782173912" TEXT="zun&#xe4;chst davon au&#xdf;gehen da&#xdf; vollst&#xe4;ndig 1:1 verdrahtet wird"> <node CREATED="1721782152173" ID="ID_300319891" MODIFIED="1721782173912" TEXT="zun&#xe4;chst davon au&#xdf;gehen da&#xdf; vollst&#xe4;ndig 1:1 verdrahtet wird">
<node CREATED="1721782183257" ID="ID_1206563643" MODIFIED="1721782251306" TEXT="jeder Eingangs-/Ausgangs- Slot wird verwendet"/> <node CREATED="1721782183257" ID="ID_1206563643" MODIFIED="1721782251306" TEXT="jeder Eingangs-/Ausgangs- Slot wird verwendet"/>
<node CREATED="1721782197168" ID="ID_1419082615" MODIFIED="1721782223559" TEXT="jeder Eingangs-Slot it auf einen (Lead-#, port-#) aufgeschaltet"/> <node CREATED="1721782197168" ID="ID_1419082615" MODIFIED="1721782223559" TEXT="jeder Eingangs-Slot ist auf einen (Lead-#, port-#) aufgeschaltet"/>
<node CREATED="1721782257358" ID="ID_1166496456" MODIFIED="1721782368194" TEXT="eventuelle Permutationen werden damit auf den Invocation-Adapter abgew&#xe4;lzt"/> <node CREATED="1721782257358" ID="ID_1166496456" MODIFIED="1721782368194" TEXT="eventuelle Permutationen werden damit auf den Invocation-Adapter abgew&#xe4;lzt"/>
</node> </node>
<node CREATED="1721782369990" ID="ID_1222041233" MODIFIED="1721782381279" TEXT="das ist zwar vereinfacht, aber durchaus realistisch"> <node CREATED="1721782369990" ID="ID_1222041233" MODIFIED="1721782381279" TEXT="das ist zwar vereinfacht, aber durchaus realistisch">
@ -93575,7 +93645,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node> </node>
<node COLOR="#338800" CREATED="1734309978110" ID="ID_436098074" MODIFIED="1734727581364" TEXT="umgebaute FeedManifold testen..."> <node COLOR="#338800" CREATED="1734309978110" ID="ID_436098074" MODIFIED="1734727581364" TEXT="umgebaute FeedManifold testen...">
<icon BUILTIN="button_ok"/> <icon BUILTIN="button_ok"/>
<node COLOR="#5b280f" CREATED="1734310000123" ID="ID_1140187367" MODIFIED="1734310088299" TEXT="der alte BuffTable_test ist unpassend &#x2014; weg damit"> <node COLOR="#5b280f" CREATED="1734310000123" ID="ID_1140187367" MODIFIED="1735059213723" TEXT="der alte BuffTable_test ist unpassend &#x2014; weg damit">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head/> <head/>
<body> <body>
@ -96770,6 +96840,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node> </node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1721782550869" ID="ID_173220882" MODIFIED="1721782642416" TEXT="vereinfachtes Aufruf-API: Slots der Reihe nach belegen"> <node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1721782550869" ID="ID_173220882" MODIFIED="1721782642416" TEXT="vereinfachtes Aufruf-API: Slots der Reihe nach belegen">
<linktarget COLOR="#5581a2" DESTINATION="ID_173220882" ENDARROW="Default" ENDINCLINATION="-314;-501;" ID="Arrow_ID_84112739" SOURCE="ID_1583773170" STARTARROW="None" STARTINCLINATION="540;29;"/> <linktarget COLOR="#5581a2" DESTINATION="ID_173220882" ENDARROW="Default" ENDINCLINATION="-314;-501;" ID="Arrow_ID_84112739" SOURCE="ID_1583773170" STARTARROW="None" STARTINCLINATION="540;29;"/>
<linktarget COLOR="#596573" DESTINATION="ID_173220882" ENDARROW="Default" ENDINCLINATION="-96;5;" ID="Arrow_ID_940636281" SOURCE="ID_162016103" STARTARROW="None" STARTINCLINATION="-238;-12;"/>
<icon BUILTIN="flag-yellow"/> <icon BUILTIN="flag-yellow"/>
<node CREATED="1728575111581" ID="ID_1267841334" LINK="#ID_973244167" MODIFIED="1728580405766" TEXT="Nutz-Kontext"> <node CREATED="1728575111581" ID="ID_1267841334" LINK="#ID_973244167" MODIFIED="1728580405766" TEXT="Nutz-Kontext">
<linktarget COLOR="#507ec8" DESTINATION="ID_1267841334" ENDARROW="Default" ENDINCLINATION="-66;-100;" ID="Arrow_ID_537610685" SOURCE="ID_807507393" STARTARROW="None" STARTINCLINATION="-257;20;"/> <linktarget COLOR="#507ec8" DESTINATION="ID_1267841334" ENDARROW="Default" ENDINCLINATION="-66;-100;" ID="Arrow_ID_537610685" SOURCE="ID_807507393" STARTARROW="None" STARTINCLINATION="-257;20;"/>
@ -96866,6 +96937,424 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1721782666679" ID="ID_1453585170" MODIFIED="1721782669193" TEXT="attachToLeadPort(ProcNode&amp; lead, uint portNr)"/> <node CREATED="1721782666679" ID="ID_1453585170" MODIFIED="1721782669193" TEXT="attachToLeadPort(ProcNode&amp; lead, uint portNr)"/>
</node> </node>
</node> </node>
<node CREATED="1735069805612" ID="ID_1563936701" MODIFIED="1735069816302" TEXT="Prototyp konsolidieren und erg&#xe4;nzen">
<node CREATED="1735069829251" ID="ID_162016103" MODIFIED="1735069891462" TEXT="jetzt mehr oder weniger festgelegt auf das vereinfachte API-Schema">
<arrowlink COLOR="#596573" DESTINATION="ID_173220882" ENDARROW="Default" ENDINCLINATION="-96;5;" ID="Arrow_ID_940636281" STARTARROW="None" STARTINCLINATION="-238;-12;"/>
</node>
<node CREATED="1735069924196" ID="ID_470723577" MODIFIED="1735070937224" TEXT="Erg&#xe4;nzung: Parameter-Functor einf&#xfc;hren">
<linktarget COLOR="#3d55ca" DESTINATION="ID_470723577" ENDARROW="Default" ENDINCLINATION="-1255;-52;" ID="Arrow_ID_767774106" SOURCE="ID_1218064070" STARTARROW="None" STARTINCLINATION="464;45;"/>
<node CREATED="1735070066380" ID="ID_924587023" MODIFIED="1735070076918" TEXT="Dieser liegt im FeedPrototype"/>
<node CREATED="1735070078355" ID="ID_322789953" MODIFIED="1735070093472" TEXT="...der wiederum in das MediaWeavingPattern eingebettet wird"/>
<node CREATED="1735070096196" ID="ID_81762855" MODIFIED="1735070200862">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
&#10233; also mu&#223; der WeavingBuilder <i>seine Typ-Parameter schwenken </i>k&#246;nnen
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1735070296999" ID="ID_1127764055" MODIFIED="1735070342009">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
&#10233; und der ihn umschlie&#223;ende PortBuilder mu&#223; <i>diesen Schwenk mitgehen</i>
</p>
</body>
</html>
</richcontent>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1735071406908" ID="ID_41228375" MODIFIED="1735071452254" TEXT="komplexes Man&#xf6;ver &#x2014; wirklich notwendig?">
<icon BUILTIN="help"/>
<node CREATED="1735071458244" ID="ID_122075212" MODIFIED="1735071466991" TEXT="es liegt an dem Typ-basierten Ansatz">
<node CREATED="1735070983365" ID="ID_449846433" MODIFIED="1735071487956" TEXT="WeavingBuilder ist direkt auf FUN (processing-functor) typisiert"/>
<node CREATED="1735071044580" ID="ID_477635560" MODIFIED="1735071058662" TEXT="er hat aber eigentlich nichts mit der Funktion direkt zu tun"/>
<node CREATED="1735071516784" ID="ID_732778350" MODIFIED="1735071606588" TEXT="aber der Funktions-Typ &#xfc;bertr&#xe4;gt sich als Parameter-Typ">
<node CREATED="1735071547401" ID="ID_449444615" MODIFIED="1735071565550" TEXT="zun&#xe4;chst in das delayed-build-&#x3bb;"/>
<node CREATED="1735071568596" ID="ID_971677847" MODIFIED="1735071585639" TEXT="von dort durch die (flexiblen) Turnout-Argumente"/>
</node>
<node CREATED="1735071615207" ID="ID_726829685" MODIFIED="1735071628617" TEXT="der Port-Builder hat damit noch viel weniger zu tun"/>
<node CREATED="1735071630133" ID="ID_801346876" MODIFIED="1735071663344" TEXT="aber er ruft das strikt typisierte WeavingBuilder::build()-Teminal"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#961073" CREATED="1735072215966" ID="ID_37006858" MODIFIED="1735072317471">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
schon das Ding mit <font face="Monospaced">PatternData</font>&#160;ist <i>grauenhaft</i>&#160;&#8212; und s'werd ois no fui schmlimma
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="smily_bad"/>
</node>
<node COLOR="#b80165" CREATED="1735074049579" ID="ID_915001534" MODIFIED="1735074428091" TEXT="einfach fressen &#x2014; geht doch...">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
letztlich auch keine Katastrophe mehr. Da die dar&#252;ber liegenden Ebenen eigentlich nichts mit der Funktion zu tun haben, l&#228;uft es darauf hinaus, zwei d&#228;mliche cross-build-Konstruktoren zu coden. Das ist lediglich l&#228;stig, weil man alle Datenfelder einzeln auff&#252;hren mu&#223;. Die sonstige Verwendung im Code w&#228;re durchaus elegant: der &#228;u&#223;ere Port-Builder ist f&#252;r das Gro&#223;e Ganze zust&#228;ndig, und der WeavingBuilder bekommt nur noch einen vorkonfigurierten Parameter-Funktor und adressiert damit das cross-Builder-API des FeedPrototype....
</p>
<p>
</p>
<p>
Tja ... was mir daran <i>definitiv nicht gef&#228;llt,</i>&#160;ist die Vorstellung, mich in 5 Monaten in diese ganze Struktur von oben bis unten wieder hineindenken zu m&#252;ssen, denn hier gibt es nichts, an dem man sich entlanghangeln k&#246;nnte, sondern man sieht nur einzelne cross-Builder mit WTF-Faktor
</p>
</body>
</html></richcontent>
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="smiley-angry"/>
</node>
<node CREATED="1735073143945" ID="ID_1381147591" MODIFIED="1735073159419" TEXT="einen Paradigmen-Wechsel g&#xe4;be es aber nicht umsonst....">
<node CREATED="1735073161567" ID="ID_230609721" MODIFIED="1735073219920" TEXT="Alternative w&#xe4;re: auf virtuellen heap-basiertes Detail-Build umstellen"/>
<node CREATED="1735073232645" ID="ID_1626158697" MODIFIED="1735073245555" TEXT="der Weaving-Builder w&#xfc;rde dadurch opaque">
<node CREATED="1735073257882" ID="ID_550679913" MODIFIED="1735073284442" TEXT="Port-Builder w&#xfc;rde nur noch ein klassisches OO-Interface benutzen"/>
<node CREATED="1735073290741" ID="ID_514277680" MODIFIED="1735073319016" TEXT="die Implementierung l&#xe4;ge in einem unique-PImpl und w&#xe4;re leicht zu schwenken"/>
<node CREATED="1735073373354" ID="ID_1088177271" MODIFIED="1735073414910" TEXT="jedwede Kollaboration m&#xfc;&#xdf;te auf dieses Interface gemapped werden">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
das ist dann schon Arbeits-Aufwand, und auch jeweils eine Code-Duplikation
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1735073430287" ID="ID_1829149561" MODIFIED="1735073452593" TEXT="und Template-Bloat! jede Parameter-Kombi &#x27f9; neue Subklasse"/>
</node>
<node CREATED="1735073604719" ID="ID_1864319230" MODIFIED="1735073626582" TEXT="vielleicht k&#xf6;nnte man dieses Schema nach innen ziehen....">
<node CREATED="1735073628543" ID="ID_1335487981" MODIFIED="1735073669372" TEXT="es f&#xe4;llt auf da&#xdf; die &#xe4;u&#xdf;eren Builder gar nichts mit dem konkreten Funktions-Typ machen"/>
<node CREATED="1735073702171" ID="ID_357140441" MODIFIED="1735073724309" TEXT="im Besonderen PatternData verwendet die markierten Typen nur intern"/>
<node CREATED="1735073743256" ID="ID_1505413732" MODIFIED="1735073919772" TEXT="der Trick ist: es bekommt einen DataBuilder, der seine Detail-Typisierung l&#xf6;scht">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Denn das ist die zentrale Eigenschaft des lib::Several, die sich immer mehr als Gl&#252;cksgriff herausstellt: man kann Detail-Typen unterbringen und sofort auf das Interface l&#246;schen
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1735073832888" ID="ID_1885951415" MODIFIED="1735073854121">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
insofern ist PatternData tats&#228;chlich eine <b>Funktionale Datenstruktur</b>
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1735074010716" ID="ID_497894747" MODIFIED="1735074029461" TEXT="&#x27f9; bereits die delayed-build-&#x3bb; stellen eine partielle Type-Erasure dar"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1735076701058" ID="ID_1594497500" MODIFIED="1735076753244" TEXT="aber diese selbst m&#xfc;&#xdf;ten dann im voll expandierten Typ-Kontext liegen">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1735076808467" ID="ID_1987141221" MODIFIED="1735076827931" TEXT="das ist nur ein ganz schmales &#xbb;Fenster&#xab;"/>
<node CREATED="1735076958492" ID="ID_1923985971" MODIFIED="1735076984471" TEXT="bedeutet: der Builder-Funktor selber w&#xe4;re nochmal zu virtualisieren"/>
<node CREATED="1735077006689" ID="ID_1621924956" MODIFIED="1735077030338" TEXT="und in diesem Kontext w&#xe4;re dann TurnoutWeaving explizit bekannt"/>
<node COLOR="#5b280f" CREATED="1735077405168" ID="ID_442112396" MODIFIED="1735088873524" TEXT="will man das wirklich?? ist das sauber hinzubekommen?">
<icon BUILTIN="help"/>
<icon BUILTIN="button_cancel"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1735077432719" ID="ID_1540043959" MODIFIED="1735077511808">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
<i>dagegen</i>&#160;spricht da&#223; es die <font size="5">schlimmste Stelle</font>&#160;noch <i>komplexer</i>&#160; macht
</p>
</body>
</html></richcontent>
<icon BUILTIN="smiley-neutral"/>
</node>
<node CREATED="1735077551417" ID="ID_702667838" MODIFIED="1735077575560" TEXT="w&#xe4;re dann in jedem Fall ein extern extrahiertes Konzept">
<node CREATED="1735077582283" ID="ID_1419937742" MODIFIED="1735077594733" TEXT="Idee: PatternPrototype">
<node CREATED="1735077668360" ID="ID_1572740856" MODIFIED="1735077684410" TEXT="ein Prototype tr&#xe4;gt verdeckt den Zieltyp"/>
<node CREATED="1735077702715" ID="ID_106957283" MODIFIED="1735077739698" TEXT="auf dieses lassen sich &#xbb;monadische&#xab; Operationen anwenden"/>
<node CREATED="1735077817175" ID="ID_1781671844" MODIFIED="1735077828703" TEXT="am Ende erstellt man einen &#xbb;Dropper&#xab;"/>
<node COLOR="#5b280f" CREATED="1735077629430" ID="ID_1074716100" MODIFIED="1735087947887" TEXT="Implementiert als Monaden-PImpl-Closure">
<arrowlink COLOR="#8f0248" DESTINATION="ID_617959831" ENDARROW="Default" ENDINCLINATION="-297;13;" ID="Arrow_ID_1098066299" STARTARROW="None" STARTINCLINATION="-44;189;"/>
<icon BUILTIN="smiley-oh"/>
<icon BUILTIN="button_cancel"/>
<node CREATED="1735078125358" ID="ID_136488948" MODIFIED="1735078143596" TEXT="Monaden Pattern: der PImpl w&#xe4;re auch zugleich stets ein &#xbb;Dropper&#xab;"/>
<node CREATED="1735078463341" ID="ID_182866671" MODIFIED="1735078480475" TEXT="bedeutet praktisch: wir sammeln eine Funktions-Kompositions-Kette">
<node CREATED="1735078887507" ID="ID_234346405" MODIFIED="1735079065872" TEXT="Drp&lt;s&gt;(conf) &#x27fc; Result"/>
<node CREATED="1735078926164" ID="ID_1379676123" MODIFIED="1735079083713" TEXT="trans &#x2254; s1 &#x27fc; Drp&lt;s2&gt;"/>
<node CREATED="1735079120696" ID="ID_1417520420" MODIFIED="1735079169027" TEXT="flatMap &#x2254; Drp&lt;s1&gt;(trans) &#x27fc; Drp&lt;s2&gt;"/>
</node>
<node CREATED="1735083060482" ID="ID_1667417991" LINK="https://bartoszmilewski.com/2015/05/14/using-monads-in-c-to-solve-constraints-2-the-state-monad/" MODIFIED="1735083086241" TEXT="oft zitiertes Blog zum Thema State-Monad in C++">
<node CREATED="1735083142128" ID="ID_838802314" MODIFIED="1735085109564" TEXT="Skizze &#xfc;bersetzt in die Dom&#xe4;nen-Sprache">
<node CREATED="1735083148933" ID="ID_1603799843" MODIFIED="1735083165272" TEXT="die eigentliche Monade w&#xe4;re in diesem Fall ein Kontext-abh&#xe4;ngiger Builder"/>
<node CREATED="1735083170676" ID="ID_1807827438" MODIFIED="1735083184254" TEXT="sie wird als generische Funktion repr&#xe4;sentiert">
<node CREATED="1735083224647" ID="ID_357203242" MODIFIED="1735085129523" STYLE="bubble">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
<font face="Monospaced" size="2">template&lt;class RES&gt; </font>
</p>
<p>
<font face="Monospaced" size="2">using Builder = function&lt;pair&lt;RES, Ctx&gt;(Ctx)&gt;;</font>
</p>
</body>
</html></richcontent>
</node>
</node>
<node CREATED="1735083355115" ID="ID_948018502" MODIFIED="1735083375276" TEXT="das Ausf&#xfc;hren des Buildes ist ebenfalls getemplated">
<node CREATED="1735083391366" ID="ID_1830633229" MODIFIED="1735085129525" STYLE="bubble">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<pre http-equiv="content-type" content="text/html; charset=utf-8"><font size="2">template&lt;class RES&gt;
pair&lt;RES, Ctx&gt;
runBuild(Builder&lt;RES&gt; buildr, Ctx c)
{
return buildr(c);
}</font></pre>
</body>
</html></richcontent>
</node>
</node>
<node CREATED="1735083531244" ID="ID_887291828" MODIFIED="1735084336495">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
eine Anpassung macht aus einem Resultat
</p>
<p>
einen weiteren Kontext-abh&#228;ngigen Builder
</p>
</body>
</html></richcontent>
<node CREATED="1735084374346" ID="ID_251054028" MODIFIED="1735085129526" STYLE="bubble">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
template&lt;class R1, class R2&gt;
</p>
<p>
Extension = function&lt;Builder&lt;R2&gt;(R1)&gt;
</p>
</body>
</html></richcontent>
</node>
</node>
<node CREATED="1735084497618" ID="ID_144401469" MODIFIED="1735084520999" TEXT="StM-Bind: erweitert Builder mit Extension">
<node CREATED="1735084555112" ID="ID_526318709" MODIFIED="1735085129528" STYLE="bubble">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<pre http-equiv="content-type" content="text/html; charset=utf-8"><font size="2">template&lt;class R1, class R2&gt;
auto
StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
{
return [b1, ext](Ctx c) {
pair&lt;R1, Ctx&gt; inter = runBuild(b1, c);
Builder&lt;R1&gt; extBuilder = extension(inter.val);
return runBuild(extBuilder, inter.ctx);
};
}</font></pre>
</body>
</html></richcontent>
</node>
</node>
</node>
<node CREATED="1735085155713" ID="ID_91630511" MODIFIED="1735085163604" TEXT="Analyse: was bedeutet das?">
<node CREATED="1735085165968" ID="ID_1397898573" MODIFIED="1735085183680" TEXT="JA! das unterlassen die Monaden-Fans immer!!">
<icon BUILTIN="yes"/>
</node>
<node CREATED="1735085211882" ID="ID_376314736" MODIFIED="1735085228875" TEXT="Builder ist ein verpackter Konstruktor">
<node CREATED="1735085243326" ID="ID_1544244288" MODIFIED="1735085272422" TEXT="der Context (&#x2259; der State-Type) ist nicht generisch, sondern fest">
<icon BUILTIN="messagebox_warning"/>
</node>
<node CREATED="1735085301038" ID="ID_1439223805" MODIFIED="1735085321532" TEXT="bedeutet, der Builder leistet noch Context-Access und Fragen der Allokation"/>
<node CREATED="1735085388346" ID="ID_1350556446" MODIFIED="1735085410947" TEXT="der Builder ist nat&#xfc;rlich spezifisch f&#xfc;r den Zieltyp (also wird daf&#xfc;r instantiiert)"/>
<node CREATED="1735085347590" ID="ID_1769552863" MODIFIED="1735085367545" TEXT="ein solcher Builder ist in gegebenem Context trivial anwendbar"/>
</node>
<node CREATED="1735085440371" ID="ID_420114900" MODIFIED="1735085526006" TEXT="Extension ist ein Builder mit Ausgangswert">
<node CREATED="1735085528479" ID="ID_300550356" MODIFIED="1735085550992" TEXT="sie nimmt zus&#xe4;tzlch einen Resultat-Wert auseinander"/>
<node CREATED="1735085553469" ID="ID_1930370122" MODIFIED="1735085570109" TEXT="diese Auswertung verkn&#xfc;pft sie mit einem beliebigen Kontext"/>
<node CREATED="1735085572689" ID="ID_896011841" MODIFIED="1735085598234" TEXT="und au&#xdf;erdem der Kenntis, wie daraus ein anderes Resultat zu machen ist"/>
<node BACKGROUND_COLOR="#eec1ad" COLOR="#690f14" CREATED="1735085609627" ID="ID_1025994608" MODIFIED="1735085764429" TEXT="und wie immer: hier ist liegt die Schwachstelle im Design">
<icon BUILTIN="broken-line"/>
<node CREATED="1735085636305" ID="ID_927677139" MODIFIED="1735085672458" TEXT="die Extension bricht die Abstraktions-Barrieren"/>
<node CREATED="1735085711330" ID="ID_1346895578" MODIFIED="1735085731808" TEXT="sie braucht Innen-Wissen aus beiden Resultat-Wert-Typen"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#160099" CREATED="1735085733579" ID="ID_1305341489" MODIFIED="1735087782829" TEXT="sinnvoll, wenn es einen cross-Builder gibt">
<linktarget COLOR="#ffd9d9" DESTINATION="ID_1305341489" ENDARROW="Default" ENDINCLINATION="62;193;" ID="Arrow_ID_430493193" SOURCE="ID_994101136" STARTARROW="None" STARTINCLINATION="707;24;"/>
<icon BUILTIN="idea"/>
</node>
</node>
</node>
</node>
</node>
<node CREATED="1735086211755" ID="ID_701904422" MODIFIED="1735086229217" TEXT="Eine L&#xf6;sung m&#xfc;&#xdf;te ein virtuelles Interface davor setzen">
<node CREATED="1735086250846" ID="ID_330636404" MODIFIED="1735086261537" TEXT="der Dropper wird mit einem Builder initialisiert"/>
<node CREATED="1735086264140" ID="ID_634535142" MODIFIED="1735086288940" TEXT="der Dropper kann letztlich das Build-Ergebnis in Target-Storage &#xbb;abwerfen&#xab;"/>
<node CREATED="1735086318523" ID="ID_1141364327" MODIFIED="1735086335654" TEXT="zur Aktivierung w&#xfc;rde man um den Dropper-Aufruf noch eine Context-Closure legen"/>
<node CREATED="1735087086515" ID="ID_1646435189" MODIFIED="1735087096913" TEXT="aber an der Extension bricht dieses Schema zusammen">
<node CREATED="1735087098644" ID="ID_204548349" MODIFIED="1735087117916" TEXT="man m&#xfc;&#xdf;te sie durch die &#xe4;u&#xdf;ere Kapsel hindurch &#xbb;tunneln&#xab;"/>
<node CREATED="1735087268541" ID="ID_689754717" MODIFIED="1735087401382" TEXT="das Interface h&#xe4;tte einen generischen Scope-opener akzeptieren"/>
<node CREATED="1735087321583" ID="ID_439012999" MODIFIED="1735087383473" TEXT="und m&#xfc;&#xdf;te dann aber innen den vollen Kontext erlangen"/>
<node CREATED="1735087428183" ID="ID_1867212718" MODIFIED="1735087436898" TEXT="vielleicht unter Einschr&#xe4;nkungen machber"/>
<node CREATED="1735087438342" ID="ID_241035152" MODIFIED="1735087822376">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
aber das w&#228;re das <b>eigentliche Problem</b>
</p>
</body>
</html>
</richcontent>
<linktarget COLOR="#e60333" DESTINATION="ID_241035152" ENDARROW="Default" ENDINCLINATION="10;109;" ID="Arrow_ID_933810453" SOURCE="ID_1041065646" STARTARROW="None" STARTINCLINATION="185;0;"/>
</node>
</node>
</node>
<node COLOR="#5b280f" CREATED="1735087456820" ID="ID_1270458115" MODIFIED="1735087757672" TEXT="Bewertung">
<icon BUILTIN="stop-sign"/>
<node CREATED="1735087483505" ID="ID_1653197556" MODIFIED="1735087508507" TEXT="das Monaden-Pattern ist nicht hilfreich, sondern generiert Komplexit&#xe4;t"/>
<node CREATED="1735087509988" ID="ID_1096990119" MODIFIED="1735087524290" TEXT="es gaukelt eine Generizit&#xe4;t vor, die in der realen Code-Anwendung kaum gegeben ist"/>
<node CREATED="1735087525794" ID="ID_994101136" MODIFIED="1735087803059" TEXT="tats&#xe4;chlich sind Extensions nur f&#xfc;r eng verwandte Familien von Ergebnis-Typen m&#xf6;glich">
<arrowlink COLOR="#ffd9d9" DESTINATION="ID_1305341489" ENDARROW="Default" ENDINCLINATION="62;193;" ID="Arrow_ID_430493193" STARTARROW="None" STARTINCLINATION="707;24;"/>
</node>
<node CREATED="1735087582666" ID="ID_79845688" MODIFIED="1735087606371" TEXT="der Umstand, da&#xdf; aber ein Builder produziert werden mu&#xdf;, ist ausgesprochen sch&#xe4;dlich"/>
<node CREATED="1735087610229" ID="ID_646462012" MODIFIED="1735087627706" TEXT="denn dadurch werden die &#xbb;Innereien&#xab; der Implementierung zum Interface"/>
<node CREATED="1735087632088" ID="ID_1041065646" MODIFIED="1735087830681" TEXT="und am &#xe4;rgerlichsten ist: die Monaden l&#xf6;sen nicht das eigentliche Abstraktions-Problem">
<arrowlink COLOR="#e60333" DESTINATION="ID_241035152" ENDARROW="Default" ENDINCLINATION="10;109;" ID="Arrow_ID_933810453" STARTARROW="None" STARTINCLINATION="185;0;"/>
</node>
<node CREATED="1735087660504" ID="ID_1110978024" MODIFIED="1735087744965" TEXT="aber sie haben mich dazu verleitet, zwei Stunden ein abstraktes Glasprelen-Spiel zu spielen"/>
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1735087462480" ID="ID_617959831" MODIFIED="1735087947887" TEXT="wieder einmal zeigt sich: Monaden sind ein Anti-Pattern">
<linktarget COLOR="#8f0248" DESTINATION="ID_617959831" ENDARROW="Default" ENDINCLINATION="-297;13;" ID="Arrow_ID_1098066299" SOURCE="ID_1074716100" STARTARROW="None" STARTINCLINATION="-44;189;"/>
<icon BUILTIN="broken-line"/>
</node>
</node>
</node>
<node CREATED="1735087957628" ID="ID_275278484" MODIFIED="1735087974193" TEXT="l&#xe4;&#xdf;t sich die Nu&#xdf; anderweitig &#xbb;knacken&#xab;?">
<node CREATED="1735088084332" ID="ID_763618049" MODIFIED="1735088096557" TEXT="die Monaden-Analyse war aufschlu&#xdf;reich">
<icon BUILTIN="idea"/>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1735088098781" ID="ID_695336563" MODIFIED="1735088114699" TEXT="das eigentliche Problem liegt beim Binden des cross-Build">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1735088196944" ID="ID_1162104881" MODIFIED="1735088208625" TEXT="von au&#xdf;en kommt ein beliebiger Parameter-Funktor"/>
<node CREATED="1735088504606" ID="ID_377379402" MODIFIED="1735088520521" TEXT="der m&#xfc;&#xdf;te auf anderem Wege einem direkten Type-Check unterzogen werden"/>
<node CREATED="1735088522088" ID="ID_923803280" MODIFIED="1735088542357" TEXT="danach m&#xfc;&#xdf;te man ihn in eine Transport-Adapter-Template packen"/>
<node CREATED="1735088651451" ID="ID_1814236832" MODIFIED="1735088660561" TEXT="und das w&#xfc;rde maximal einmal gehen"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1735088667424" ID="ID_598416611" MODIFIED="1735089069120" TEXT="Fazit: die Idee ist nicht durchf&#xfc;hrbar">
<linktarget COLOR="#808b95" DESTINATION="ID_598416611" ENDARROW="Default" ENDINCLINATION="-413;31;" ID="Arrow_ID_278502135" SOURCE="ID_214266111" STARTARROW="None" STARTINCLINATION="193;10;"/>
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/>
<node CREATED="1735088678945" ID="ID_488299231" MODIFIED="1735088762832" TEXT="sie ist grenzwertig komplex">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
insofern hier n&#228;mlich bereits akzidentelle Komplexit&#228;t generiert wird
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1735088698388" ID="ID_83306944" MODIFIED="1735088798351" TEXT="sie gr&#xfc;ndet nicht in einer unterliegenden Natur der Sache">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Man kann die Struktur zwar extrahieren, aber die extrahierte Version l&#228;&#223;t sich nicht sinnvoll in einfachereren Begriffen darstellen
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1735088715306" ID="ID_263857744" MODIFIED="1735088861764" TEXT="sie ist nur im speziellen Fall anwendbar und erh&#xf6;ht dessen Komplexit&#xe4;t">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...insofern hier Komplexit&#228;t nicht durch eine Abstraktion reduziert wurde, sondern nur durch Modularisierbarkeit und Zwischenschritte beherrschbarer gemacht wird; aber dies wird durch Generieren zus&#228;tzlicher Komplexit&#228;t erkauft, was den Ansatz insgesamt in Frage stellt
</p>
</body>
</html>
</richcontent>
</node>
</node>
</node>
</node>
</node>
</node>
</node>
<node CREATED="1735088890536" ID="ID_1912509930" MODIFIED="1735088910847">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
<u>Fazit</u>: <i>bite the bullet...</i>
</p>
</body>
</html>
</richcontent>
<node CREATED="1735088938963" ID="ID_526104668" MODIFIED="1735088951323" TEXT="im Grunde haben wir hier ein N x M - Kontext-Problem"/>
<node CREATED="1735088953058" ID="ID_214266111" MODIFIED="1735089069119" TEXT="so etwas l&#xe4;&#xdf;t sich nicht durch Virtualisierung einkapseln">
<arrowlink COLOR="#808b95" DESTINATION="ID_598416611" ENDARROW="Default" ENDINCLINATION="-413;31;" ID="Arrow_ID_278502135" STARTARROW="None" STARTINCLINATION="193;10;"/>
</node>
<node CREATED="1735088975232" ID="ID_679771852" MODIFIED="1735177124298" TEXT="Erweiterung des getypten Schemas erscheint dem gegen&#xfc;ber als das kleinere &#xdc;bel"/>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1735179976719" ID="ID_322289273" MODIFIED="1735186473122" TEXT="akzeptiert: das kleinste &#xdc;bel realisieren">
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1735180082021" ID="ID_1895704384" MODIFIED="1735186470454" TEXT="Umstellung im WeavingBuilder">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1735180095165" ID="ID_365437797" MODIFIED="1735186464181" TEXT="Funktion auf Prototype heben">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1735180109811" ID="ID_1651523951" MODIFIED="1735186467903" TEXT="diesen als Template-Parameter durchziehen">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1735180141362" ID="ID_267016965" MODIFIED="1735187728844" TEXT="cross-ctor zum Wechsel des Prototype coden">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1735180184969" ID="ID_1122594888" MODIFIED="1735180355412" TEXT="builder-API: adaptParam (FUN)">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1735180359089" ID="ID_1172912698" MODIFIED="1735187755366" TEXT="Umstellung im PortBuilder">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1735181212051" ID="ID_125700986" MODIFIED="1735188770190" TEXT="cross-ctor zum Wechsel des WeavingBuilder">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1735181233629" ID="ID_1985191791" MODIFIED="1735181641405" TEXT="builder-API">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1735181285893" ID="ID_922294490" MODIFIED="1735181304690" TEXT="setParam(PAR)">
<node CREATED="1735181646685" HGAP="92" ID="ID_537303944" MODIFIED="1735181686682" TEXT="feste dropper-Funktion verwenden" VSHIFT="-1">
<font NAME="SansSerif" SIZE="10"/>
</node>
</node>
<node CREATED="1735181310482" ID="ID_828844081" MODIFIED="1735181326359" TEXT="retrieveParam(Accessor)">
<node CREATED="1735181646685" HGAP="31" ID="ID_1181419965" MODIFIED="1735181823571" TEXT="Parameter aus TurnoutSystem per Accessro abholen">
<font NAME="SansSerif" SIZE="10"/>
</node>
</node>
<node CREATED="1735181577102" ID="ID_524332742" MODIFIED="1735181609213" TEXT="attachAutomation(AUTO)">
<node CREATED="1735181646685" HGAP="30" ID="ID_1875790841" MODIFIED="1735181809869" TEXT="zeitbasierte Funktion adaptieren (Zeit aus Turnoutsystem)">
<font NAME="SansSerif" SIZE="10"/>
</node>
</node>
<node CREATED="1735181611673" ID="ID_55961674" MODIFIED="1735181622980" TEXT="attachParamFun(FUN)">
<node CREATED="1735181646685" HGAP="47" ID="ID_1130785304" MODIFIED="1735181798380" TEXT="beliebige Funktion auf TurnoutSystem" VSHIFT="-1">
<font NAME="SansSerif" SIZE="10"/>
</node>
</node>
</node>
</node>
</node>
</node>
</node>
</node> </node>
</node> </node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1720622703868" ID="ID_332813706" MODIFIED="1729962145775" TEXT="in Bausteine zerlegen"> <node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1720622703868" ID="ID_332813706" MODIFIED="1729962145775" TEXT="in Bausteine zerlegen">
@ -96873,7 +97362,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="flag-yellow"/> <icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1728500237115" ID="ID_1324415480" MODIFIED="1728500255724" TEXT="unklar: wo wird die Flexibilit&#xe4;t f&#xfc;r WeavingPatters eingef&#xfc;hrt?"> <node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1728500237115" ID="ID_1324415480" MODIFIED="1728500255724" TEXT="unklar: wo wird die Flexibilit&#xe4;t f&#xfc;r WeavingPatters eingef&#xfc;hrt?">
<icon BUILTIN="help"/> <icon BUILTIN="help"/>
<node CREATED="1728500258076" ID="ID_1366737489" MODIFIED="1728500314815" TEXT="ich hab jetzt einen SimpleWeavingPatternBuilder"> <node CREATED="1728500258076" ID="ID_1366737489" MODIFIED="1735069723322" TEXT="ich hab jetzt einen SimpleWeavingPatternBuilder">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head/> <head/>
<body> <body>
@ -96882,6 +97371,17 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</p> </p>
</body> </body>
</html></richcontent> </html></richcontent>
<node CREATED="1735069383501" ID="ID_125046801" MODIFIED="1735069460926" TEXT="umbenannt in &#xbb;WeavingBuilder&#xab;">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Das Pattern hei&#223;t jetzt auch MediaWeavingPattern und ist zum Standard geworden; der Build-Mechanismus im Port-Builder k&#246;nnte jedes <i>dazu kompatible Pattern</i>&#160;&#160;ebenfalls handhaben
</p>
</body>
</html>
</richcontent>
</node>
</node> </node>
<node CREATED="1728500461049" ID="ID_187214045" MODIFIED="1728500587071" TEXT="die Konvention ist : Turnout baut direkt auf WeavingPattern auf"> <node CREATED="1728500461049" ID="ID_187214045" MODIFIED="1728500587071" TEXT="die Konvention ist : Turnout baut direkt auf WeavingPattern auf">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
@ -97804,14 +98304,14 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<arrowlink COLOR="#7e1ab2" DESTINATION="ID_1750696847" ENDARROW="Default" ENDINCLINATION="266;-492;" ID="Arrow_ID_379194887" STARTARROW="None" STARTINCLINATION="-138;440;"/> <arrowlink COLOR="#7e1ab2" DESTINATION="ID_1750696847" ENDARROW="Default" ENDINCLINATION="266;-492;" ID="Arrow_ID_379194887" STARTARROW="None" STARTINCLINATION="-138;440;"/>
<icon BUILTIN="button_ok"/> <icon BUILTIN="button_ok"/>
</node> </node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1733430838925" ID="ID_1513206906" MODIFIED="1733533298660" TEXT="Exkurs: Einbindung in den Node-Builder betrachten"> <node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1733430838925" ID="ID_1513206906" MODIFIED="1735055648443" TEXT="Exkurs: Einbindung in den Node-Builder betrachten">
<arrowlink COLOR="#c50127" DESTINATION="ID_1619015453" ENDARROW="Default" ENDINCLINATION="-153;535;" ID="Arrow_ID_1374888051" STARTARROW="None" STARTINCLINATION="719;37;"/> <arrowlink COLOR="#c50127" DESTINATION="ID_1619015453" ENDARROW="Default" ENDINCLINATION="-153;535;" ID="Arrow_ID_1374888051" STARTARROW="None" STARTINCLINATION="719;37;"/>
<linktarget COLOR="#d20e48" DESTINATION="ID_1513206906" ENDARROW="Default" ENDINCLINATION="-46;111;" ID="Arrow_ID_1518420686" SOURCE="ID_1712932544" STARTARROW="None" STARTINCLINATION="84;4;"/> <linktarget COLOR="#d20e48" DESTINATION="ID_1513206906" ENDARROW="Default" ENDINCLINATION="-46;111;" ID="Arrow_ID_1518420686" SOURCE="ID_1712932544" STARTARROW="None" STARTINCLINATION="84;4;"/>
<icon BUILTIN="flag-yellow"/> <icon BUILTIN="flag-yellow"/>
</node> </node>
</node> </node>
</node> </node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1733533054398" ID="ID_1712932544" MODIFIED="1733533461389" TEXT="stecke fest &#x2014; mu&#xdf; mehrere Aspekte gleichzeitig f&#xf6;rdern"> <node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1733533054398" ID="ID_1712932544" MODIFIED="1735055648442" TEXT="stecke fest &#x2014; mu&#xdf; mehrere Aspekte gleichzeitig f&#xf6;rdern">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head/> <head/>
<body> <body>
@ -97821,8 +98321,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</body> </body>
</html></richcontent> </html></richcontent>
<arrowlink COLOR="#d20e48" DESTINATION="ID_1513206906" ENDARROW="Default" ENDINCLINATION="-46;111;" ID="Arrow_ID_1518420686" STARTARROW="None" STARTINCLINATION="84;4;"/> <arrowlink COLOR="#d20e48" DESTINATION="ID_1513206906" ENDARROW="Default" ENDINCLINATION="-46;111;" ID="Arrow_ID_1518420686" STARTARROW="None" STARTINCLINATION="84;4;"/>
<arrowlink COLOR="#d20e48" DESTINATION="ID_1860532476" ENDARROW="Default" ENDINCLINATION="169;-7;" ID="Arrow_ID_1150766303" STARTARROW="None" STARTINCLINATION="117;6;"/> <arrowlink COLOR="#d20e48" DESTINATION="ID_1860532476" ENDARROW="Default" ENDINCLINATION="158;-8;" ID="Arrow_ID_1150766303" STARTARROW="None" STARTINCLINATION="86;4;"/>
<arrowlink COLOR="#d20e48" DESTINATION="ID_190733802" ENDARROW="Default" ENDINCLINATION="799;-49;" ID="Arrow_ID_1240305866" STARTARROW="None" STARTINCLINATION="788;37;"/> <arrowlink COLOR="#d20e48" DESTINATION="ID_190733802" ENDARROW="Default" ENDINCLINATION="799;-49;" ID="Arrow_ID_1240305866" STARTARROW="None" STARTINCLINATION="802;37;"/>
<icon BUILTIN="broken-line"/> <icon BUILTIN="broken-line"/>
</node> </node>
</node> </node>
@ -97857,8 +98357,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<arrowlink COLOR="#fe433f" DESTINATION="ID_481525559" ENDARROW="Default" ENDINCLINATION="1490;75;" ID="Arrow_ID_570772162" STARTARROW="None" STARTINCLINATION="-530;-37;"/> <arrowlink COLOR="#fe433f" DESTINATION="ID_481525559" ENDARROW="Default" ENDINCLINATION="1490;75;" ID="Arrow_ID_570772162" STARTARROW="None" STARTINCLINATION="-530;-37;"/>
<linktarget COLOR="#f9407e" DESTINATION="ID_1587342377" ENDARROW="Default" ENDINCLINATION="330;471;" ID="Arrow_ID_316456085" SOURCE="ID_635342516" STARTARROW="None" STARTINCLINATION="684;35;"/> <linktarget COLOR="#f9407e" DESTINATION="ID_1587342377" ENDARROW="Default" ENDINCLINATION="330;471;" ID="Arrow_ID_316456085" SOURCE="ID_635342516" STARTARROW="None" STARTINCLINATION="684;35;"/>
<icon BUILTIN="flag-yellow"/> <icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1733532910801" ID="ID_1860532476" MODIFIED="1733533358706" TEXT="brauche unmittelbar als N&#xe4;chstes ein minimales Turnout-System"> <node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1733532910801" ID="ID_1860532476" MODIFIED="1735055624142" TEXT="brauche unmittelbar als N&#xe4;chstes ein minimales Turnout-System">
<linktarget COLOR="#d20e48" DESTINATION="ID_1860532476" ENDARROW="Default" ENDINCLINATION="169;-7;" ID="Arrow_ID_1150766303" SOURCE="ID_1712932544" STARTARROW="None" STARTINCLINATION="117;6;"/> <linktarget COLOR="#d20e48" DESTINATION="ID_1860532476" ENDARROW="Default" ENDINCLINATION="158;-8;" ID="Arrow_ID_1150766303" SOURCE="ID_1712932544" STARTARROW="None" STARTINCLINATION="86;4;"/>
<icon BUILTIN="yes"/> <icon BUILTIN="yes"/>
</node> </node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734059376947" ID="ID_603334752" MODIFIED="1734059596013" TEXT="mu&#xdf; Storage-Layout f&#xfc;r das Turnout-System festlegen"> <node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734059376947" ID="ID_603334752" MODIFIED="1734059596013" TEXT="mu&#xdf; Storage-Layout f&#xfc;r das Turnout-System festlegen">
@ -99176,8 +99676,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<arrowlink COLOR="#ce5d7e" DESTINATION="ID_1619015453" ENDARROW="Default" ENDINCLINATION="-417;871;" ID="Arrow_ID_386484765" STARTARROW="None" STARTINCLINATION="549;-1534;"/> <arrowlink COLOR="#ce5d7e" DESTINATION="ID_1619015453" ENDARROW="Default" ENDINCLINATION="-417;871;" ID="Arrow_ID_386484765" STARTARROW="None" STARTINCLINATION="549;-1534;"/>
<icon BUILTIN="flag-yellow"/> <icon BUILTIN="flag-yellow"/>
</node> </node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1733531683777" ID="ID_190733802" MODIFIED="1733533461389" TEXT="einfachen Node &#x27f7; Parameter - Feed durchspielen"> <node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1733531683777" ID="ID_190733802" MODIFIED="1735055629198" TEXT="einfachen Node &#x27f7; Parameter - Feed durchspielen">
<linktarget COLOR="#d20e48" DESTINATION="ID_190733802" ENDARROW="Default" ENDINCLINATION="799;-49;" ID="Arrow_ID_1240305866" SOURCE="ID_1712932544" STARTARROW="None" STARTINCLINATION="788;37;"/> <linktarget COLOR="#d20e48" DESTINATION="ID_190733802" ENDARROW="Default" ENDINCLINATION="799;-49;" ID="Arrow_ID_1240305866" SOURCE="ID_1712932544" STARTARROW="None" STARTINCLINATION="802;37;"/>
<icon BUILTIN="flag-yellow"/> <icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1733531749477" ID="ID_811325982" MODIFIED="1733532161164" TEXT="im NodeFeed_test anlegen"> <node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1733531749477" ID="ID_811325982" MODIFIED="1733532161164" TEXT="im NodeFeed_test anlegen">
<arrowlink COLOR="#fe433f" DESTINATION="ID_1987832971" ENDARROW="Default" ENDINCLINATION="1285;255;" ID="Arrow_ID_284789378" STARTARROW="None" STARTINCLINATION="-530;-37;"/> <arrowlink COLOR="#fe433f" DESTINATION="ID_1987832971" ENDARROW="Default" ENDINCLINATION="1285;255;" ID="Arrow_ID_284789378" STARTARROW="None" STARTINCLINATION="-530;-37;"/>