Invocation: draft implementation of the weaving-pattern for parameters

Still having some doubts if using a ''weaving-pattern'' is the right approach here,
but if we do, then the steps would be mapped as drafted here. This includes
passing additional parameters, notably the `TurnoutSystem&` to every step.
This commit is contained in:
Fischlurch 2025-01-02 22:40:46 +01:00
parent 2468f6d0ee
commit e131320a81
4 changed files with 111 additions and 41 deletions

View file

@ -219,7 +219,7 @@ namespace engine {
}
void
shed (Feed& feed, OptionalBuff outBuff)
shed (Feed& feed, TurnoutSystem&, OptionalBuff outBuff)
{
for (uint i=0; i<outTypes.size(); ++i)
{
@ -232,13 +232,13 @@ namespace engine {
}
void
weft (Feed& feed)
weft (Feed& feed, TurnoutSystem&)
{
feed.invoke(); // process data
}
BuffHandle
fix (Feed& feed)
fix (Feed& feed, TurnoutSystem&)
{
if constexpr (Feed::hasInput())
for (uint i=0; i<leadPort.size(); ++i)

View file

@ -201,15 +201,17 @@ namespace engine {
using Functors = typename SPEC::Functors;
using DataBlock = typename SPEC::ChainCons::NewFrame;
using BlockBuilder = typename SPEC::BlockBuilder;
using PostProcessor = function<void(TurnoutSystem&)>;
BlockBuilder blockBuilder_;
function<void(TurnoutSystem&)> postProcess_;
PostProcessor postProcess_;
Port& delegatePort_;
struct Feed
: util::NonCopyable
{
lib::UninitialisedStorage<DataBlock> buffer;
OptionalBuff outBuff;
DataBlock& block() { return buffer[0]; }
@ -222,39 +224,57 @@ namespace engine {
/** forwarding-ctor to provide the detailed input/output connections */
ParamWeavingPattern (BlockBuilder builder)
ParamWeavingPattern (BlockBuilder builder, PostProcessor postProc, Port& delegate)
: blockBuilder_{move (builder)}
, postProcess_{move (postProc)}
, delegatePort_{delegate}
{ }
/** Preparation: create a Feed data frame to use as local scope */
Feed
mount (TurnoutSystem& turnoutSys)
{
return Feed{};
}
/** Invoke the parameter-functors to create the basic parameter data */
void
pull (Feed& feed, TurnoutSystem& turnoutSys)
{
UNIMPLEMENTED ("pull parameter functors");
feed.emplaceParamDataBlock (blockBuilder_, turnoutSys);
}
/** Link the param-data-block into the current TurnoutSystem,
* possibly post-process the param data. From this point on,
* nodes within the nested scope can draw from this data.
*/
void
shed (Feed& feed, OptionalBuff outBuff)
shed (Feed& feed, TurnoutSystem& turnoutSys, OptionalBuff outBuff)
{
UNIMPLEMENTED ("connect and postprocess");
turnoutSys.attachChainBlock(feed.block());
feed.outBuff = outBuff;
if (postProcess_)
postProcess_(turnoutSys);
}
/** recursively invoke the delegate port, while the generated
* parameter-data is indirectly reachable through the TurnoutSystem
*/
void
weft (Feed& feed)
weft (Feed& feed, TurnoutSystem& turnoutSys)
{
UNIMPLEMENTED ("forward to delegate");
feed.outBuff = delegatePort_.weave (turnoutSys, feed.outBuff);
}
/** clean-up: detach the parameter-data-block.
* @return the output buffer produced by the recursive delegate call.
*/
BuffHandle
fix (Feed& feed)
fix (Feed& feed, TurnoutSystem& turnoutSys)
{
UNIMPLEMENTED ("clean-up and return result buff");
turnoutSys.detachChainBlock(feed.block());
return feed.outBuff;
}
};

View file

@ -94,9 +94,9 @@ namespace engine {
using Feed = typename PAT::Feed;
ASSERT_MEMBER_FUNCTOR (&PAT::mount, Feed(TurnoutSystem&));
ASSERT_MEMBER_FUNCTOR (&PAT::pull, void(Feed&, TurnoutSystem&));
ASSERT_MEMBER_FUNCTOR (&PAT::shed, void(Feed&, OptionalBuff));
ASSERT_MEMBER_FUNCTOR (&PAT::weft, void(Feed&));
ASSERT_MEMBER_FUNCTOR (&PAT::fix, BuffHandle(Feed&));
ASSERT_MEMBER_FUNCTOR (&PAT::shed, void(Feed&, TurnoutSystem&, OptionalBuff));
ASSERT_MEMBER_FUNCTOR (&PAT::weft, void(Feed&, TurnoutSystem&));
ASSERT_MEMBER_FUNCTOR (&PAT::fix, BuffHandle(Feed&, TurnoutSystem&));
return sizeof(PAT);
}
@ -135,9 +135,9 @@ namespace engine {
{
Feed feed = PAT::mount (turnoutSys);
PAT::pull (feed, turnoutSys);
PAT::shed (feed, outBuff);
PAT::weft (feed);
return PAT::fix (feed);
PAT::shed (feed, turnoutSys, outBuff);
PAT::weft (feed, turnoutSys);
return PAT::fix (feed, turnoutSys);
}
};

View file

@ -82345,8 +82345,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
Das hei&#223;t, hier haben wir immer einen festen Satz an Parametern, die stets im TurnoutSystem eingebettet vorliegen; diese k&#246;nnen aber als HeteroData-Chain erweitert werden um die Bl&#246;cke, die wir &#252;ber eine (oder eine Kette von) ParamBuildSpec erzeugen
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
</node>
</node>
@ -94384,8 +94383,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
denn ich kann nicht ein non-copyable-Member fertig per Konstruktor bekommen....
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1735607937133" ID="ID_328206928" MODIFIED="1735607951086" TEXT="oder wenn man den Funktor bekommt und selber aufruft"/>
</node>
@ -94400,7 +94398,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1735609243446" ID="ID_812134786" MODIFIED="1735609281948" TEXT="eine Inkonsistenz ergibt sich in shed()....">
<node CREATED="1735609283480" ID="ID_1850616450" MODIFIED="1735609297842" TEXT="denn den (optionalen) Ausgabe-Buffer g&#xe4;be es erst hier"/>
<node CREATED="1735609299238" ID="ID_665339625" MODIFIED="1735609315400" TEXT="der rekursive Call hatte keinen zur Verf&#xfc;gung"/>
<node CREATED="1735609349100" ID="ID_396734688" MODIFIED="1735609491766" TEXT="als m&#xfc;&#xdf;te man hier dann das BuffHandle &#x201e;umleiten&#x201c;">
<node CREATED="1735609349100" ID="ID_396734688" MODIFIED="1735839879611" TEXT="also m&#xfc;&#xdf;te man hier dann das BuffHandle &#x201e;umleiten&#x201c;">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
@ -94408,8 +94406,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
hei&#223;t, man m&#252;&#223;te entweder explizit umkopieren, oder es br&#228;uchte eine Konvention, wie man das (optional) gegebene BuffHandle dann eben doch frei gibt; letztlich wird ja ein BuffHandle zur&#252;ckgegeben, und das w&#228;re dann dasjenige, da&#223; vom rekursiven Call belegt wurde. K&#246;nnte sogar klappen, ist aber<i>&#160;als Trickserei</i>&#160;zu werten.
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
</node>
<node CREATED="1735609494932" ID="ID_1864279920" MODIFIED="1735609503487" TEXT="der weft()-Aufruf w&#xe4;re komplett NOP">
@ -94421,8 +94418,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
Die Aufteilung in diese f&#252;nf Schritte dient vor allem der Gliederung der Abl&#228;ufe; es ist aber nur bedingt ein &#187;Protokoll&#171;, in dem in bestimmten Schritten etwas Festgelegtes <i>passieren mu&#223;...</i>
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1735609517769" ID="ID_302975776" MODIFIED="1735609561229" TEXT="trotzdem ein Hinweis, da&#xdf; mit dem Design etwas nicht stimmt">
<richcontent TYPE="NOTE"><html>
@ -94432,8 +94428,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
Wenn man Strukturen biegen, leer machen oder umdeuten mu&#223;...
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
</node>
<node CREATED="1735609958198" ID="ID_962342769" MODIFIED="1735609995692" TEXT="oder man macht alles in irgend einem anderen passenden Aufruf">
@ -94497,8 +94492,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
...da gibt es definitiv keinen anderen Ausweg, und eigentlich wird ja dadurch auch erst die Builder-Notation wirklich sinnvoll; da&#223; man ein non-copyable-Objekt aus einer Funktion &#8222;abwerfen&#8220; kann ist sowiso grenzwertig....
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<node BACKGROUND_COLOR="#c8cbaf" CREATED="1735697219515" ID="ID_1960332816" MODIFIED="1735777474732" TEXT="warum &#xe4;rgere ich mich jetz so dr&#xfc;ber?">
<icon BUILTIN="smiley-angry"/>
</node>
@ -94522,8 +94516,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<font color="#491fdd" size="2">(und ich mache es dennoch, weil ich wei&#223;, da&#223; f&#252;r einen Film-Editor des geplanten Kallibers alle diese abgefuckten Sonderf&#228;lle dann sp&#228;ter auch tats&#228;chlich gefordert und eingesetzt werden)</font>&#160;
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/>
</node>
@ -94552,26 +94545,28 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1735780756823" ID="ID_1015981716" MODIFIED="1735780763078" TEXT="Umbau!">
<icon BUILTIN="flag-pink"/>
<node CREATED="1735780764829" ID="ID_819223004" MODIFIED="1735780789925" TEXT="den &#xbb;Slot&#xab; in einen statischen Accessor umschreiben">
<node COLOR="#338800" CREATED="1735780756823" ID="ID_1015981716" MODIFIED="1735786874406" TEXT="Umbau!">
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1735780764829" ID="ID_819223004" MODIFIED="1735786878694" TEXT="den &#xbb;Slot&#xab; in einen statischen Accessor umschreiben">
<node CREATED="1735783005113" ID="ID_686667351" MODIFIED="1735783018619" TEXT="hier w&#xe4;re der Back-Link auf die Spec gradezu gemeingef&#xe4;hrlich"/>
<node CREATED="1735783020065" ID="ID_1376680768" MODIFIED="1735783041921" TEXT="im Grunde braucht man hier nur den Typ, den man in andere Accessor-Funktoren einbettet">
<icon BUILTIN="idea"/>
</node>
</node>
<node CREATED="1735780792553" ID="ID_598255406" MODIFIED="1735781123512" TEXT="daf&#xfc;r eine makeBlockBuilder()-Funktion (destruktiv)">
<node COLOR="#435e98" CREATED="1735780792553" ID="ID_598255406" MODIFIED="1735786880350" TEXT="daf&#xfc;r eine makeBlockBuilder()-Funktion (destruktiv)">
<node CREATED="1735780814414" ID="ID_971841806" MODIFIED="1735780821795" TEXT="schiebt das Funktoren-Tupel dorthin"/>
<node CREATED="1735780823097" ID="ID_363538159" MODIFIED="1735780849748" TEXT="die sonstige Spec sollte keinen direkten Bezug auf die Funktoren mehr haben"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1735783048795" ID="ID_1635709601" MODIFIED="1735783108281" TEXT="der BlockBuilder wandert dann in das WeavingPattern">
<node COLOR="#435e98" CREATED="1735783048795" ID="ID_1635709601" MODIFIED="1735786883950" TEXT="der BlockBuilder wandert dann in das WeavingPattern">
<arrowlink COLOR="#3538b8" DESTINATION="ID_487478594" ENDARROW="Default" ENDINCLINATION="16;-84;" ID="Arrow_ID_602775247" STARTARROW="None" STARTINCLINATION="-450;23;"/>
<icon BUILTIN="yes"/>
</node>
</node>
</node>
</node>
<node CREATED="1735783082614" ID="ID_487478594" MODIFIED="1735783101705" TEXT="BlockBuilder">
<node COLOR="#435e98" CREATED="1735783082614" ID="ID_487478594" MODIFIED="1735786895446" TEXT="BlockBuilder">
<linktarget COLOR="#3538b8" DESTINATION="ID_487478594" ENDARROW="Default" ENDINCLINATION="16;-84;" ID="Arrow_ID_602775247" SOURCE="ID_1635709601" STARTARROW="None" STARTINCLINATION="-450;23;"/>
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="forward"/>
<node COLOR="#435e98" CREATED="1735783113618" ID="ID_853147988" MODIFIED="1735783152469" TEXT="ist der Terminal-Build-Schritt aus einer Spec">
<icon BUILTIN="info"/>
</node>
@ -94579,17 +94574,72 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="idea"/>
</node>
</node>
<node COLOR="#435e98" CREATED="1735853717958" ID="ID_1283283019" MODIFIED="1735853788068" TEXT="PostProcessor">
<node CREATED="1735853724797" ID="ID_576524085" MODIFIED="1735853737791" TEXT="function&lt;void(TurnoutSystem&amp;&gt;)"/>
<node CREATED="1735853739462" ID="ID_600675024" MODIFIED="1735853769179" TEXT="sieht bereits die erzeugten Daten und kann sie noch aufbereiten und verkn&#xfc;pfen"/>
</node>
<node COLOR="#435e98" CREATED="1735853780334" ID="ID_973032450" MODIFIED="1735853788069" TEXT="Delegate-Port">
<node CREATED="1735853791636" ID="ID_1555898520" MODIFIED="1735853800765" TEXT="wird rekursiv im Scope aufgerufen"/>
<node CREATED="1735853802011" ID="ID_1786497684" MODIFIED="1735853850153" TEXT="eingeschlossene Nodes/Ports k&#xf6;nnen per paramter-functor auf die Parameter zugreifen"/>
</node>
</node>
</node>
<node CREATED="1735354094901" ID="ID_357401280" LINK="#ID_1484484879" MODIFIED="1735416065935" TEXT="Grundstruktur / Schrittfolge">
<node CREATED="1735354099466" ID="ID_1086019960" MODIFIED="1735354156573" TEXT="mount : Feed-Frame erzeugen"/>
<node CREATED="1735354158273" ID="ID_1400465949" MODIFIED="1735354198247" TEXT="pull : Param-Funktor aufrufen und Tupel erstellen"/>
<node CREATED="1735354158273" ID="ID_1400465949" MODIFIED="1735839974225" TEXT="pull : Param-Funktor aufrufen und Param-Daten generieren"/>
<node CREATED="1735354209348" ID="ID_1189493104" MODIFIED="1735354256129" TEXT="shed : Chain-Block erstellen und nachverarbeiten">
<node CREATED="1735775241705" ID="ID_324071186" MODIFIED="1735775250821" TEXT="Link in das Turnout-System"/>
</node>
<node CREATED="1735354287727" ID="ID_348185915" MODIFIED="1735354316106" TEXT="weft : Target-Node aufrufen"/>
<node CREATED="1735354360652" ID="ID_128985053" MODIFIED="1735354376078" TEXT="fix : Chain-Block abh&#xe4;ngen und Output-Buffer zur&#xfc;ckggeben"/>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1735840381592" ID="ID_451855978" MODIFIED="1735840578272" TEXT="Diskussion / Zweifel">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1735840478887" ID="ID_743455927" MODIFIED="1735840497889" TEXT="das mit dem &#xbb;Weaving-Pattern&#xab; erscheint willk&#xfc;rlich">
<node CREATED="1735841184088" ID="ID_1956237484" MODIFIED="1735841195299" TEXT="im Besonderen die Aufruf-Parameter passen nicht">
<node CREATED="1735842992849" ID="ID_255773054" MODIFIED="1735843139194" TEXT="....dann sollte man diese angleichen">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
mit dem Ziel, die Einteilung des Weaving-Schemas zu erhalten und universeller nutzbar zu machen
</p>
</body>
</html>
</richcontent>
<linktarget COLOR="#dae6f4" DESTINATION="ID_255773054" ENDARROW="Default" ENDINCLINATION="121;149;" ID="Arrow_ID_1145206955" SOURCE="ID_1242855477" STARTARROW="None" STARTINCLINATION="68;7;"/>
</node>
</node>
<node CREATED="1735842413716" ID="ID_1956076232" MODIFIED="1735842442352" TEXT="diese sind aber der einzige konkrete Unterschied in den Methoden"/>
<node CREATED="1735842754765" ID="ID_1751038926" MODIFIED="1735842960627" TEXT="die Bedeutung der Schritte ist ideell">
<arrowlink COLOR="#fefde2" DESTINATION="ID_311986134" ENDARROW="Default" ENDINCLINATION="-14;-140;" ID="Arrow_ID_974408569" STARTARROW="None" STARTINCLINATION="-42;3;"/>
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="idea"/>
</node>
</node>
<node CREATED="1735840499381" ID="ID_1164540853" MODIFIED="1735840514990" TEXT="eigentlich w&#xe4;re ein einziger Methoden-Scope viel einfacher">
<node CREATED="1735840533872" ID="ID_1476649083" MODIFIED="1735840552275" TEXT="dann w&#xfc;rde sogar die UninitialisedStorage wegfallen"/>
<node CREATED="1735840877817" ID="ID_1946328043" MODIFIED="1735840884667" TEXT="und damit auch der Feed"/>
</node>
<node CREATED="1735840983354" ID="ID_163798204" MODIFIED="1735841006387" TEXT="andererseits habe ich nun Turnout festgelegt auf das Weaving-Pattern-Schema"/>
<node CREATED="1735841008467" ID="ID_1895614723" MODIFIED="1735841037735" TEXT="das hei&#xdf;t, es m&#xfc;&#xdf;te eine alternative Port-Implementierung sein">
<node CREATED="1735841057608" ID="ID_1138290614" MODIFIED="1735841067182" TEXT="und das ist auch wieder schlecht"/>
<node CREATED="1735841068719" ID="ID_706216251" MODIFIED="1735841081018" TEXT="da noch ein weiterer Extension-Point / Freiheits-Grad"/>
</node>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1735842777063" ID="ID_311986134" MODIFIED="1735842960627" TEXT="es handelt sich um eine architektonische Ordnung">
<linktarget COLOR="#fefde2" DESTINATION="ID_311986134" ENDARROW="Default" ENDINCLINATION="-14;-140;" ID="Arrow_ID_974408569" SOURCE="ID_1751038926" STARTARROW="None" STARTINCLINATION="-42;3;"/>
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/>
<node CREATED="1735842802502" ID="ID_1802914816" MODIFIED="1735842812713" TEXT="dadurch werden R&#xe4;ume eingeteilt"/>
<node CREATED="1735842814052" ID="ID_244068487" MODIFIED="1735842820850" TEXT="und Ebenen unterschieden"/>
<node CREATED="1735842887435" ID="ID_1242855477" MODIFIED="1735843049714" TEXT="sinnvoll zu respektieren">
<arrowlink COLOR="#dae6f4" DESTINATION="ID_255773054" ENDARROW="Default" ENDINCLINATION="121;149;" ID="Arrow_ID_1145206955" STARTARROW="None" STARTINCLINATION="68;7;"/>
<icon BUILTIN="yes"/>
</node>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1720620607691" ID="ID_1114186515" MODIFIED="1720620622602" TEXT="diese Invocation nun konfigurierbar machen">