Invocation: provide simplified API to inject fixed parameter values

* ...by defining a parameter-functor to »drop off« a given value
 * ...also add a static sanity check to reject unsuitable parameter-functor \\
   (e.g. for a processing-functor with different or even no parameters)
This commit is contained in:
Fischlurch 2024-12-27 03:55:06 +01:00
parent 52d2c47439
commit c4b2902dd4
5 changed files with 79 additions and 25 deletions

View file

@ -605,6 +605,13 @@ namespace engine {
template<typename PFX>
using Adapted = FeedPrototype<FUN,PFX>;
/** is the given functor suitable as parameter functor for this Feed? */
template<typename PFX>
static constexpr bool isSuitable()
{
return hasParam() and _Trait::template isParamFun<PFX>();
}
/**
* Cross-Builder to add configuration with a given parameter-functor.
* @return new FeedPrototype instance outfitted with the current

View file

@ -369,6 +369,29 @@ namespace engine {
};
}
template<class AUTO>
auto
attachAutomation (AUTO&& aFun)
{
return attachParamFun ([automation = forward<AUTO>(aFun)]
(TurnoutSystem& turnoutSys)
{
Time nomTime = Time::ZERO; ////////////////////OOO need to retrieve that from turnoutSys
return automation(nomTime);
});
}
template<typename PAR>
auto
setParam (PAR paramVal)
{
return attachParamFun ([=](TurnoutSystem&) -> PAR
{
return paramVal;
});
}
/*************************************************************//**
* Terminal: complete the Port wiring and return to the node level.

View file

@ -301,6 +301,9 @@ namespace engine {
auto
adaptParam (PFX paramFunctor)
{
static_assert (PROT::template isSuitable<PFX>()
,"suitable as param-functor for given processing-functor");
//
using AdaptedWeavingBuilder = Adapted<PFX>;
//
return AdaptedWeavingBuilder{move(*this)

View file

@ -95,30 +95,27 @@ namespace test {
}
/** @test TODO build a Node with a fixed invocation parameter
* @todo WIP 12/24 🔁 define implement
/** @test build a Node with a fixed invocation parameter
* @todo 12/24 define implement
*/
void
build_Node_fixedParam()
{
auto procFun = [](ushort param, uint* buff){ *buff = param; };
auto paramFun = [](TurnoutSystem&){ return LIFE_AND_UNIVERSE_4EVER; };
ProcNode node{prepareNode("Test")
.preparePort()
.invoke("fun()",procFun)
.attachParamFun(paramFun)
.invoke("fun()", procFun)
.setParam (LIFE_AND_UNIVERSE_4EVER)
.completePort()
.build()};
CHECK (LIFE_AND_UNIVERSE_4EVER == invokeRenderNode (node));
UNIMPLEMENTED ("build node with fixed param");
}
/** @test TODO build a Node with dynamically generated parameter
* @todo WIP 12/24 define implement
* @todo WIP 12/24 🔁 define implement
*/
void
build_Node_dynamicParam()

View file

@ -82346,8 +82346,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<i>&#187;dropper-Funktion&#171;</i>&#160;verwenden, die einen fest hinterlegten Parameter-Wert f&#252;r jede Invocation in die FeedManifold setzt
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1735181310482" ID="ID_222695945" MODIFIED="1735234327441" TEXT="retrieveParam(Accessor)">
<richcontent TYPE="NOTE"><html>
@ -82377,8 +82376,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
beliebiger Parameter-Funktor, der auf dem TurnoutSystem arbeitet und einen passenden Parameter-Wert produziert; Typisierung wird zur compile-Zeit gepr&#252;ft.
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1720146340213" ID="ID_1871545026" MODIFIED="1720230570516" TEXT="TODO: API f&#xfc;r Mapping">
@ -88866,10 +88864,13 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734877552951" ID="ID_1383452569" MODIFIED="1734879501751" TEXT="Parameter: fest und funktionsgeneriert">
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734877552951" ID="ID_1383452569" MODIFIED="1735267749563" TEXT="Parameter: fest und funktionsgeneriert">
<linktarget COLOR="#406cd3" DESTINATION="ID_1383452569" ENDARROW="Default" ENDINCLINATION="-1339;91;" ID="Arrow_ID_1946653398" SOURCE="ID_600115804" STARTARROW="None" STARTINCLINATION="-1035;100;"/>
<linktarget COLOR="#406cd3" DESTINATION="ID_1383452569" ENDARROW="Default" ENDINCLINATION="-1070;72;" ID="Arrow_ID_71441743" SOURCE="ID_985974600" STARTARROW="None" STARTINCLINATION="-1035;100;"/>
<icon BUILTIN="flag-yellow"/>
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1735267723607" ID="ID_1259281567" MODIFIED="1735267745234" TEXT="&#xbb;Dropper&#xab; Parameter-Funktor">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1733531449614" ID="ID_481525559" MODIFIED="1734059241149" TEXT="speziell auch Anlegen einer Parameter-Node">
<linktarget COLOR="#406cd3" DESTINATION="ID_481525559" ENDARROW="Default" ENDINCLINATION="-140;9;" ID="Arrow_ID_55724637" SOURCE="ID_1678162572" STARTARROW="None" STARTINCLINATION="-358;-24;"/>
@ -91582,8 +91583,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1734060427954" ID="ID_714381100" MODIFIED="1734060440806" TEXT="draus dann ein Storage-Layout in der Render-Engine entwickelt"/>
<node CREATED="1734060460509" ID="ID_1434138828" LINK="#ID_532258033" MODIFIED="1734060510084" TEXT="HetroData : Hilfskomponente zur Implementierung des Turnout-Systems"/>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734132938355" ID="ID_695632181" MODIFIED="1734755866478" TEXT="Umbauten">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1734132938355" ID="ID_695632181" MODIFIED="1735267849984" TEXT="Umbauten">
<icon BUILTIN="button_ok"/>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#582d92" CREATED="1734133041626" ID="ID_1421951599" MODIFIED="1734725184858">
<richcontent TYPE="NODE"><html>
<head/>
@ -93710,7 +93711,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node COLOR="#338800" CREATED="1734133474862" ID="ID_1734639141" MODIFIED="1734831257737" TEXT="MediaWeavingPattern intern anpassen">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1734730549338" ID="ID_979346169" MODIFIED="1734831179403" TEXT="Schwenk auf die neue Architektur">
<node COLOR="#338800" CREATED="1734730549338" FOLDED="true" ID="ID_979346169" MODIFIED="1735267873376" TEXT="Schwenk auf die neue Architektur">
<icon BUILTIN="button_ok"/>
<node CREATED="1734730561471" ID="ID_645384678" MODIFIED="1734732327705">
<richcontent TYPE="NODE"><html>
@ -97348,6 +97349,9 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
<node COLOR="#338800" CREATED="1735180184969" ID="ID_1122594888" MODIFIED="1735233392749" TEXT="builder-API: adaptParam (FUN)">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1735267648052" ID="ID_1897790338" MODIFIED="1735267667745" TEXT="static-Check auf passende Param-Fun-Signatur">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1735180359089" ID="ID_1172912698" MODIFIED="1735244903164" TEXT="Umstellung im PortBuilder">
<icon BUILTIN="pencil"/>
@ -97357,13 +97361,13 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1735181233629" ID="ID_1985191791" MODIFIED="1735236214569" TEXT="builder-API">
<linktarget COLOR="#3c90e2" DESTINATION="ID_1985191791" ENDARROW="Default" ENDINCLINATION="-235;385;" ID="Arrow_ID_1852952623" SOURCE="ID_1227470787" STARTARROW="None" STARTINCLINATION="512;27;"/>
<icon BUILTIN="pencil"/>
<node CREATED="1735181285893" ID="ID_922294490" MODIFIED="1735181304690" TEXT="setParam(PAR)">
<node COLOR="#435e98" CREATED="1735181285893" ID="ID_922294490" MODIFIED="1735267634837" 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">
<node CREATED="1735181646685" HGAP="31" ID="ID_1181419965" MODIFIED="1735265718809" TEXT="Parameter aus TurnoutSystem per Accessor abholen">
<font NAME="SansSerif" SIZE="10"/>
</node>
</node>
@ -97383,8 +97387,8 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
<node CREATED="1735235825819" ID="ID_340685726" MODIFIED="1735235829758" TEXT="Testf&#xe4;lle">
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1735235055662" ID="ID_895934657" LINK="#ID_1383452569" MODIFIED="1735235856739" TEXT="Parameterbehandlung im Node-Builder">
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1735245149850" ID="ID_1185930169" MODIFIED="1735245179039" TEXT="&#xbb;Dropper&#xab; f&#xfc;r fest konfigurierte Parameter-Werte">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1735245149850" ID="ID_1185930169" MODIFIED="1735267765133" TEXT="&#xbb;Dropper&#xab; f&#xfc;r fest konfigurierte Parameter-Werte">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1735245164581" ID="ID_1648154346" MODIFIED="1735245175431" TEXT="Automations-Funktion &#xfc;ber die nominalTime">
<icon BUILTIN="hourglass"/>
@ -97461,8 +97465,30 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
</html></richcontent>
<icon BUILTIN="yes"/>
</node>
<node CREATED="1735246648677" ID="ID_1390294887" MODIFIED="1735246967617" TEXT="SimpleWeavnigPattern &#x27f6; MediaWeavingPattern ist jetzt Default">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
&#220;ber das Prototyping hat eine Art Normierung stattgefunden; ich bin jetzt sicher, da&#223; die allermeisten Aufgaben zur Medien-Berechnung in dieses Standard-Pattern abgebildet werden k&#246;nnen, vor allem durch die stark erweiterte Flexibilit&#228;t des Buffer- und Parameter-Bindings
</p>
</body>
</html>
</richcontent>
<arrowlink COLOR="#4b5f94" DESTINATION="ID_1436882221" ENDARROW="Default" ENDINCLINATION="114;-2;" ID="Arrow_ID_1816177660" STARTARROW="None" STARTINCLINATION="-320;14;"/>
</node>
</node>
</node>
<node COLOR="#435e98" CREATED="1735246847847" ID="ID_183039781" MODIFIED="1735246927561" TEXT="preparePort().invoke&lt;FUN&gt;()">
<icon BUILTIN="info"/>
<node CREATED="1735246883954" ID="ID_1713827403" MODIFIED="1735246895021" TEXT="das wurde nun zum Standard-Pattern normiert"/>
<node CREATED="1735246896422" ID="ID_1436882221" MODIFIED="1735246967617" TEXT="verwendet MediaWeavingPattern">
<linktarget COLOR="#4b5f94" DESTINATION="ID_1436882221" ENDARROW="Default" ENDINCLINATION="114;-2;" ID="Arrow_ID_1816177660" SOURCE="ID_1390294887" STARTARROW="None" STARTINCLINATION="-320;14;"/>
</node>
<node CREATED="1735246909755" ID="ID_403760027" MODIFIED="1735246916593" TEXT="adaptiert processing-functor"/>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734139914450" ID="ID_284201304" MODIFIED="1735245128858" TEXT="Steuerung der Parameter-Verarbeitung">
<linktarget COLOR="#d90755" DESTINATION="ID_284201304" ENDARROW="Default" ENDINCLINATION="428;-33;" ID="Arrow_ID_1685749535" SOURCE="ID_1127056731" STARTARROW="None" STARTINCLINATION="-2201;158;"/>
<linktarget COLOR="#a71e73" DESTINATION="ID_284201304" ENDARROW="Default" ENDINCLINATION="-170;12;" ID="Arrow_ID_170732865" SOURCE="ID_616768316" STARTARROW="None" STARTINCLINATION="150;11;"/>
@ -97476,8 +97502,7 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
erfolgt <i>als Teil der Konfiguration</i>&#160;eines Ports
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1735236128667" ID="ID_1783311284" MODIFIED="1735236188426">
<richcontent TYPE="NODE"><html>
@ -97487,8 +97512,7 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
also <i>nachdem</i>&#160;man den Processing-Functor gegeben hat
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1735236141057" ID="ID_1227470787" MODIFIED="1735236224224" TEXT="feste oder dynamische Parameter werden unterst&#xfc;tzt">
<arrowlink COLOR="#3c90e2" DESTINATION="ID_1985191791" ENDARROW="Default" ENDINCLINATION="-235;385;" ID="Arrow_ID_1852952623" STARTARROW="None" STARTINCLINATION="512;27;"/>