Invocation: add nested builder to configure a port

...which brings us right into the middle of the task of building a Turnout...
This commit is contained in:
Fischlurch 2024-07-08 19:24:03 +02:00
parent d3344e7dd3
commit d09b061434
3 changed files with 90 additions and 61 deletions

View file

@ -92,6 +92,7 @@
#include "steam/engine/proc-node.hpp"
#include "steam/engine/turnout.hpp"
#include "lib/several-builder.hpp"
#include "lib/nocopy.hpp"
@ -176,6 +177,7 @@ namespace engine {
using PortData = DataBuilder<POL, Port>;
using LeadRefs = DataBuilder<POL, ProcNodeRef>;
protected:
PortData ports_;
LeadRefs leads_;
@ -195,12 +197,8 @@ namespace engine {
}
void //////////////////////////////////////////////////////////OOO return type
preparePort ()
{
UNIMPLEMENTED ("recursively enter detailed setup of a single processing port");
// return move(*this);
}
/** recursively enter detailed setup of a single processing port */
PortBuilder<POL> preparePort ();
/**
@ -245,7 +243,6 @@ namespace engine {
, util::MoveOnly
{
public:
PortBuilder
inSlots (uint s)
{
@ -271,14 +268,36 @@ namespace engine {
/****************************************************//**
* Terminal: complete the Port wiring and return to the node level.
*/
void //////////////////////////////////////////////////////////OOO return type
NodeBuilder<POL>
completePort()
{
UNIMPLEMENTED("finish and link-in port definition");
}
//////////////////////////////////////////////////////////OOO finish port data setup here
return static_cast<NodeBuilder<POL>&&> (*this);
} // slice away the subclass
private:
PortBuilder(NodeBuilder<POL>&& anchor)
{ }
friend PortBuilder NodeBuilder<POL>::preparePort();
};
/**
* @remark while _logically_ this builder-function _descends_ into the
* definition of a port, for the implementation we _wrap_ the existing
* NodeBuilder and layer a PortBuilder subclass on top thereby shadowing
* the enclosed original builder temporarily; the terminal builder operation
* PortBuilder::completePort() will unwrap and return the original NodeBuilder.
*/
template<class POL>
inline PortBuilder<POL>
NodeBuilder<POL>::preparePort ()
{
return PortBuilder<POL>{move(*this)};
}
/**
* Entrance point for building actual Render Node Connectivity (Level-2)
* @note when using a custom allocator, the first follow-up builder function

View file

@ -139,6 +139,7 @@ namespace engine {
* the invocation sequence actually prepares to call the process function of this
* ProcNode, a buffer table chunk is allocated by the StateProxy and wired in.
*/
#if false /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #1367 : Rebuild the Node Invocation
struct Invocation
: StateAdapter
{
@ -213,6 +214,7 @@ namespace engine {
virtual BuffHandle
allocateBuffer (const lumiera::StreamType* ty) { return current_.allocateBuffer(ty); }
};
#endif /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #1367 : Rebuild the Node Invocation
/**
@ -251,6 +253,19 @@ namespace engine {
};
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1367 : Rebuild the Node Invocation
class Turnout
: public Port
//////////////////////////////OOO non-copyable? move-only??
{
public:
TurnoutSystem
enactTurnout() override
{
UNIMPLEMENTED ("generate next layer of the TurnoutSystem on the stack");
}
};
}}// namespace steam::engine

View file

@ -381,9 +381,7 @@
<icon BUILTIN="info"/>
<node CREATED="1481502327528" ID="ID_75293128" MODIFIED="1576282358162" TEXT="das ist ohnehin schlecht">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...weil es dadurch passieren k&#246;nnte,
@ -483,9 +481,7 @@
<node CREATED="1484871312594" ID="ID_1351400025" MODIFIED="1557498707216" TEXT="erbt zwar von BusTerm"/>
<node CREATED="1484871321473" ID="ID_112216780" MODIFIED="1576282358161" TEXT="hat aber keine connection">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
gemeint ist: keine volle bidirektionale Connection,
@ -504,9 +500,7 @@
</node>
<node CREATED="1484871556194" ID="ID_1978811406" MODIFIED="1576282358161" TEXT="macht Sinn so">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
nur ein Tangible kann downlink-Nachrichten sinnvoll empfangen;
@ -1514,9 +1508,7 @@
</node>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1538263118645" ID="ID_944384957" MODIFIED="1576282358154" TEXT="9/2018 hinreichend behandelt">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
Habe nochmal alle Aufrufe im Einzelnen durchgepr&#252;ft
@ -2780,9 +2772,7 @@
<node CREATED="1534632290500" ID="ID_1165360257" MODIFIED="1534632304077" TEXT="emittiert das signal_remove auf dem Container"/>
<node CREATED="1534632195136" ID="ID_1692600031" MODIFIED="1534632241155" TEXT="Intersssanter Kommentar: man sollte direkt zerst&#xf6;ren">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
Removes @widget from @container. @widget must be inside @container.
@ -4328,9 +4318,7 @@
</node>
<node CREATED="1481320772830" FOLDED="true" HGAP="21" ID="ID_1607125695" MODIFIED="1561827464681" VSHIFT="11">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
Proc: <b>SessionCommand</b>
@ -4346,9 +4334,7 @@
<node CREATED="1481768183970" ID="ID_1887870402" MODIFIED="1518487921056" TEXT="ist offizielle Session-Schnittstelle"/>
<node CREATED="1481768211951" ID="ID_287828489" MODIFIED="1576282358151">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
setzt <i>aktivierten</i>&#160;Dispatcher <font color="#6e080d">zwingend</font>&#160;voraus
@ -4356,9 +4342,7 @@
</body>
</html></richcontent>
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
es gen&#252;gt definitiv nicht, nur die Dispatcher-Komponente(Schnittstelle) erreichen zu k&#246;nnen.
@ -6442,9 +6426,7 @@
</node>
<node CREATED="1493853590149" ID="ID_1075149702" MODIFIED="1576282358136" TEXT="Race beim triggerShutdown">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
siehe guifacade.cpp
@ -9310,9 +9292,7 @@
<icon BUILTIN="smily_bad"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1511572016775" ID="ID_664087042" MODIFIED="1511572067881" TEXT="selbst beim Schreiben steig ich nicht mehr durch">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
....und das ist alarmierend,
@ -27305,9 +27285,7 @@
<node CREATED="1573424578050" ID="ID_1381344686" MODIFIED="1573424594636" TEXT="alle Elemente m&#xfc;&#xdf;ten entfernt und erneut angeh&#xe4;ngt werden">
<node CREATED="1575051390743" ID="ID_734317772" MODIFIED="1575052370826">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
es l&#228;uft auf eine <b>Sortier-Operation</b>&#160;hinaus
@ -86379,7 +86357,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="forward"/>
<node CREATED="1719160274852" ID="ID_1366997301" MODIFIED="1719160281511" TEXT="ein Several&lt;Port&gt;">
<node CREATED="1719160369760" ID="ID_1815539399" MODIFIED="1719160384580" TEXT="hinter jedem Port liegt als Impl. eine Turnout-Instanz"/>
<node CREATED="1719161386359" ID="ID_909255520" MODIFIED="1719161389608" TEXT="der Turnout">
<node CREATED="1719161386359" ID="ID_909255520" MODIFIED="1720458313426" TEXT="der Turnout">
<linktarget COLOR="#ff0020" DESTINATION="ID_909255520" ENDARROW="Default" ENDINCLINATION="-494;717;" ID="Arrow_ID_99470151" SOURCE="ID_635796297" STARTARROW="None" STARTINCLINATION="-675;-43;"/>
<node CREATED="1719161895627" ID="ID_1012063450" MODIFIED="1719785238663" TEXT="Builder f&#xfc;r eine konkretes TurnoutSystem">
<icon BUILTIN="info"/>
</node>
@ -86788,7 +86767,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1719162654773" ID="ID_1902060576" MODIFIED="1719162671608" TEXT="wer bekommt einen OutputSlot, und wer eine (ge&#xf6;ffnete) DataSink?">
<icon BUILTIN="help"/>
<node CREATED="1719272358349" ID="ID_530721901" MODIFIED="1719272392304" TEXT="der Job bekommt eine DataSink"/>
<node CREATED="1719272358349" ID="ID_530721901" MODIFIED="1720458678936" TEXT="der Job bekommt einen OutputSlot"/>
<node CREATED="1719272470222" ID="ID_1647993969" MODIFIED="1719272488848" TEXT="der Job mu&#xdf; davon im Zeitfenster die DataSink(s) allozieren">
<node CREATED="1719272576443" ID="ID_1737558324" MODIFIED="1719272787633" TEXT="es k&#xf6;nnen mehrere DataSinks sein">
<richcontent TYPE="NOTE"><html>
@ -86857,7 +86836,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1719162522590" ID="ID_452219645" MODIFIED="1719162528681" TEXT="als Front-End f&#xfc;r den Cache"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1719883209359" ID="ID_1690420693" MODIFIED="1719883220375" TEXT="mu&#xdf; globales Aufruf-Muster festleten">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1719883209359" ID="ID_1690420693" MODIFIED="1719883220375" TEXT="mu&#xdf; globales Aufruf-Muster festlegen">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1719883229517" ID="ID_819237086" MODIFIED="1719883235920" TEXT="Port liefert Turnout-System"/>
<node CREATED="1719883236252" ID="ID_1120842279" MODIFIED="1719883242430" TEXT="was macht man dann mit diesem?"/>
@ -87391,10 +87370,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1720285518287" ID="ID_525600205" MODIFIED="1720285535616" TEXT="NodeBuilder"/>
<node CREATED="1720285544539" ID="ID_28916107" MODIFIED="1720285547718" TEXT="PortBuilder"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1720314562948" ID="ID_611643324" MODIFIED="1720315408053" TEXT="separaten Allocator f&#xfc;r den Builder einf&#xfc;hren">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1720314562948" ID="ID_611643324" MODIFIED="1720450696694" TEXT="separaten Allocator f&#xfc;r den Builder einf&#xfc;hren">
<linktarget COLOR="#774459" DESTINATION="ID_611643324" ENDARROW="Default" ENDINCLINATION="-1147;68;" ID="Arrow_ID_1972337488" SOURCE="ID_1044694589" STARTARROW="None" STARTINCLINATION="804;73;"/>
<icon BUILTIN="yes"/>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1720318492552" ID="ID_139926760" MODIFIED="1720408749240" TEXT="Probleme / Zweifel">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1720318501983" ID="ID_1668344828" MODIFIED="1720318529687" TEXT="zwei verschiedene Allocatoren in einem Builder sind verwirrend und gef&#xe4;hrlich"/>
@ -87538,8 +87516,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<b>nicht</b>&#160;als template-template-Parameter...
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<richcontent TYPE="NOTE"><html>
<head/>
<body>
@ -87547,8 +87524,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
...denn sonst wird man die <font face="Monospaced" color="#872701">ALO, INIT...</font>&#160;- Parameter nicht los, sondern sie werden Teil des Builder-Typs (wir wollen aber, da&#223; sie nur implizit in den Builder-Typ eingehen)
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1720403191478" ID="ID_1499576078" MODIFIED="1720403239136" TEXT="die Policy verpackt / enh&#xe4;lt die Initialisierung des SeveralBuilders"/>
<node CREATED="1720403252562" ID="ID_1281523727" MODIFIED="1720403262877" TEXT="die Policy definiert ein neues / eigenes Interface"/>
@ -87560,8 +87536,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<i>auf das</i>&#160;mu&#223; sich der Builder abst&#252;tzen, nicht auf den lib::SeveralBuilder oder dessen Policy
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1720403312751" ID="ID_1172888563" MODIFIED="1720403357154" TEXT="und: den default (&#x2259; Heap alloc) einfach als andere Policy daneben stellen">
<richcontent TYPE="NOTE"><html>
@ -87571,8 +87546,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
...nicht versuchen, die beiden zu verbinden oder irgendwie durch default-Parameter ausdr&#252;cken
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1720403358153" ID="ID_437340586" MODIFIED="1720403446512">
<richcontent TYPE="NODE"><html>
@ -87582,8 +87556,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
tja... und jedes nested template braucht ein Pr&#228;fix &quot;<font face="Monospaced" color="#3607cb">template &lt;fun&gt;</font>&quot; in der Syntax
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
</node>
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1720407274166" ID="ID_1545233818" MODIFIED="1720408757702">
@ -87617,6 +87590,24 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1720454107471" ID="ID_1238813567" MODIFIED="1720454187970" TEXT="Allocator im Test verifizieren">
<arrowlink COLOR="#ca3e80" DESTINATION="ID_1795755773" ENDARROW="Default" ENDINCLINATION="333;-16;" ID="Arrow_ID_778082175" STARTARROW="None" STARTINCLINATION="-512;47;"/>
<icon BUILTIN="bell"/>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1720455790739" ID="ID_1106442316" MODIFIED="1720455859799" TEXT="jetzt als n&#xe4;chstes einen Port hinzuf&#xfc;gen">
<linktarget COLOR="#605a85" DESTINATION="ID_1106442316" ENDARROW="Default" ENDINCLINATION="-424;27;" ID="Arrow_ID_984551781" SOURCE="ID_1934059766" STARTARROW="None" STARTINCLINATION="630;-46;"/>
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1720455899256" ID="ID_5858705" MODIFIED="1720456997827" TEXT="den PortBuilder um den NodeBuilder wickeln">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1720456999461" ID="ID_635796297" MODIFIED="1720458313426" TEXT="und jetzt wirds ernst: mu&#xdf; einen Turnout konstruieren">
<arrowlink COLOR="#ff0020" DESTINATION="ID_909255520" ENDARROW="Default" ENDINCLINATION="-494;717;" ID="Arrow_ID_99470151" STARTARROW="None" STARTINCLINATION="-675;-43;"/>
<icon BUILTIN="flag-pink"/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1720458870491" ID="ID_342983817" MODIFIED="1720458909369" TEXT="Butter bei die Fische: was macht das Turnout-System?">
<icon BUILTIN="help"/>
</node>
</node>
</node>
</node>
</node>
@ -87639,8 +87630,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1720285361113" ID="ID_1765678054" MODIFIED="1720285365141" TEXT="anlegen....">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1720285381774" ID="ID_1298904782" MODIFIED="1720285436982" TEXT="die Leads">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1720285381774" ID="ID_1298904782" MODIFIED="1720454238961" TEXT="die Leads">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1720285385878" ID="ID_1429352134" MODIFIED="1720285436983" TEXT="die Ports">
<icon BUILTIN="flag-yellow"/>
@ -87722,7 +87713,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="yes"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1719181203922" ID="ID_1630163115" MODIFIED="1719182613749" TEXT="Nodes bauen">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1719181208787" ID="ID_1934059766" MODIFIED="1719182250419" TEXT="eine Quell-Node mit zwei Ports">
<node CREATED="1719181208787" ID="ID_1934059766" MODIFIED="1720455852460" TEXT="eine Quell-Node mit zwei Ports">
<arrowlink COLOR="#605a85" DESTINATION="ID_1106442316" ENDARROW="Default" ENDINCLINATION="-424;27;" ID="Arrow_ID_984551781" STARTARROW="None" STARTINCLINATION="630;-46;"/>
<icon BUILTIN="full-1"/>
</node>
<node CREATED="1719181289558" ID="ID_1967826855" MODIFIED="1719182252664" TEXT="Node mit einem Lead und zwei Ports">
@ -87858,6 +87850,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1713821728361" ID="ID_1456365802" MODIFIED="1713823527161" TEXT="NodeFactory_test">
<icon BUILTIN="hourglass"/>
<node CREATED="1713823503251" ID="ID_1961332963" MODIFIED="1713823519437" TEXT="m&#xf6;glicherweise einfachsten Fall hier"/>
<node CREATED="1720454088551" ID="ID_1795755773" MODIFIED="1720454187970" TEXT="Einsatz des Custom-Allocators">
<linktarget COLOR="#ca3e80" DESTINATION="ID_1795755773" ENDARROW="Default" ENDINCLINATION="333;-16;" ID="Arrow_ID_778082175" SOURCE="ID_1238813567" STARTARROW="None" STARTINCLINATION="-512;47;"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1713824325760" ID="ID_1661035289" MODIFIED="1713824498751" TEXT="BufferProviderProtocol_test">
<icon BUILTIN="flag-yellow"/>