Invocation: Prototyping to clarify buffer type marking

Requirement analysis shows that the ''actual buffer provider'' to use
constitutes yet another independent degree of freedom, which conceivably
must be handled by the Builder internals rather than by the Domain Ontology.

Thus the simple solution to use a `BuffDescr` to mark the type must be augmented
to also allow configuration of the underlying `BufferProvider`, which generates
the descriptor and can later be invoked with this descriptor to ''lock  an actual Buffer.''

In some cases, setup of the buffer types could even be more complicated and require
access to the actual (runtime) invocaton context; such extreme cases however
could be rendered as an extension of the scheme established here,
by storing the (up to now transient) constructor functors persistently.
Which leads to the decision not to care for those extremely complicated
corner cases right now, and thus to construct all buffer descriptors
in the `build()` call
This commit is contained in:
Fischlurch 2024-07-24 20:29:37 +02:00
parent 42f8f8d5af
commit ea183086ca
2 changed files with 301 additions and 44 deletions

View file

@ -41,6 +41,7 @@
//#include "vault/gear/job.h"
#include "lib/several-builder.hpp"
#include "steam/engine/turnout.hpp"
#include "steam/engine/buffer-provider.hpp"
//#include "lib/util-foreach.hpp"
//#include "lib/iter-adapter.hpp"
//#include "lib/meta/function.hpp"
@ -48,7 +49,9 @@
//#include "lib/util.hpp"
//#include <utility>
#include <functional>
//#include <array>
#include <vector>
namespace steam {
@ -72,6 +75,20 @@ namespace engine {
DataBuilder<POL, PortRef> leadPort;
DataBuilder<POL, BuffDescr> outTypes;
using TypeMarker = std::function<BuffDescr(BufferProvider&)>;
using ProviderRef = std::reference_wrapper<BufferProvider>;
std::vector<TypeMarker> buffTypes;
std::vector<ProviderRef> providers;
struct ServiceCtx
{
ProviderRef mem;
ProviderRef cache;
ProviderRef output;
};
ServiceCtx ctx; //////////////////////////////////////////OOO need to wire that top-down through all builders!
SimpleWeavingBuilder
attachToLeadPort(ProcNode& lead, uint portNr)
{
@ -81,21 +98,49 @@ namespace engine {
return move(*this);
}
template<class BU>
SimpleWeavingBuilder
appendBufferTypes(size_t cnt, BuffDescr const& descriptor)
appendBufferTypes(size_t cnt)
{
outTypes.fillElm (cnt, descriptor);
ENSURE (outTypes.size() < N);
while (cnt--)
buffTypes.emplace_back([](BufferProvider& provider)
{ return provider.getDescriptor<BU>(); });
ENSURE (buffTypes.size() < N);
return move(*this);
}
SimpleWeavingBuilder
selectOutputSlot(size_t i)
{
maybeFillDefaultProviders (i+1);
ENSURE (providers.size() > i);
providers[i] = ctx.output;
}
auto
build()
{
maybeFillDefaultProviders (buffTypes.size());
uint i=0;
for (auto& typeCtor : buffTypes)
outTypes.emplace (typeCtor(providers[i]));
ENSURE (leadPort.size() < N);
ENSURE (outTypes.size() < N);
using Product = Turnout<SimpleDirectInvoke<N,FUN>>;
///////////////////////////////OOO need a way to prepare SeveralBuilder-instances for leadPort and outDescr --> see NodeBuilder
return Product{leadPort.build(), outTypes.build};
}
private:
void
maybeFillDefaultProviders (size_t maxSlots)
{
for (uint i=providers.size(); i < maxSlots; ++i)
providers.emplace_back (ctx.mem);
}
};
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1367 : (End)Prototyping: how to assemble a Turnout

View file

@ -4214,9 +4214,7 @@
</node>
<node CREATED="1481768341149" ID="ID_1200042703" MODIFIED="1576282358150" TEXT="implizite Bindung an eine Session-Instanz">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...und zwar wirklich sehr implizit,
@ -4235,9 +4233,7 @@
</node>
<node CREATED="1481768566167" ID="ID_702026185" MODIFIED="1576282358149" TEXT="kann jederzeit asynchron geschlossen werden">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
das folgt einfach aus den logischen Eigenschaften der beteiligten Komponenten,
@ -4263,9 +4259,7 @@
<node CREATED="1481509901926" ID="ID_1612540786" MODIFIED="1518487921056" TEXT="in proc::control"/>
<node CREATED="1481767522123" ID="ID_789146708" MODIFIED="1518487921056">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
wer besitzt die
@ -4307,9 +4301,7 @@
<node CREATED="1481767758347" ID="ID_1773256683" MODIFIED="1518487921057" TEXT="con">
<node CREATED="1481767797062" ID="ID_1542908203" MODIFIED="1518487921057">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
mu&#223; alle Operationen durchschleifen
@ -4322,9 +4314,7 @@
</node>
<node CREATED="1481767831105" ID="ID_1351930491" MODIFIED="1576282358148" TEXT="fragiler Lebenszyklus">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
meint: zwei gekoppelte Statusvariable
@ -4788,9 +4778,7 @@
</node>
<node CREATED="1483921000340" HGAP="-60" ID="ID_1814046433" MODIFIED="1518487921058" VSHIFT="31">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
<i>Idee:</i>&#160;Zusammenarbeit
@ -5469,9 +5457,7 @@
</node>
<node COLOR="#435e98" CREATED="1665801881413" ID="ID_856020386" MODIFIED="1665855536788" TEXT="Ergebnis: rein plastisch, gl&#xe4;nzend, scharf">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
letztlich bin ich davon abgekommen, einen <i>gezeichneten </i>Pfeil zu integrieren; auch die Insets habe ich aufgegeben, dadurch wird das Design stringenter. Die Hervorhebung erfolgt nur durch ein Glanzlicht oben links, im Zusammenspiel mit den 2px Gehrungen und einem zus&#228;tzlichen Schatten an der Kehle der Gehrung
@ -7208,9 +7194,7 @@
<node CREATED="1506180752096" ID="ID_837824348" MODIFIED="1506180752096" TEXT="anchorage">
<node CREATED="1506180752097" ID="ID_456798717" MODIFIED="1576282358130" TEXT="explicitly anchored">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...and this anchorage can be covered and backed by the currently existing UI configuration
@ -9300,9 +9284,7 @@
<node CREATED="1512182682149" ID="ID_1240670384" MODIFIED="1512182695423" TEXT="IterableDecorator&lt;long, WrappedIteratorCore&lt;...."/>
<node CREATED="1512182696579" ID="ID_1928279872" MODIFIED="1512182724615">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
also IterableDecorator aufgesetzt auf die Core <i>im</i>&#160;Transformer
@ -12459,9 +12441,7 @@
</node>
<node COLOR="#338800" CREATED="1517509541382" FOLDED="true" ID="ID_1722401650" MODIFIED="1561827469153">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
realer Pfad endet mit elided <i>nach</i>&#160;Wildcard
@ -82131,7 +82111,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1721059378917" ID="ID_1450630309" MODIFIED="1721059396201" TEXT="in jeden Port wird ein Muster von BufferDescriptoren eingewoben"/>
<node CREATED="1721059397330" ID="ID_1692352230" MODIFIED="1721059419603" TEXT="diese m&#xfc;ssen auf stabile BufferProvider verweisen k&#xf6;nnen"/>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1721059425785" ID="ID_115679136" MODIFIED="1721059440468" TEXT="konkrete Einbindung in den Builder kl&#xe4;ren">
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1721059425785" ID="ID_115679136" MODIFIED="1721833464687" TEXT="konkrete Einbindung in den Builder kl&#xe4;ren">
<arrowlink COLOR="#614050" DESTINATION="ID_1921234844" ENDARROW="Default" ENDINCLINATION="-857;-31;" ID="Arrow_ID_440207625" STARTARROW="None" STARTINCLINATION="-5;199;"/>
<icon BUILTIN="flag-pink"/>
</node>
</node>
@ -86937,7 +86918,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1719790776594" ID="ID_544743149" MODIFIED="1720738214985" TEXT="Erweiterung: also einen Funktor / lazyVal verwenden">
<icon BUILTIN="hourglass"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#630f69" CREATED="1720738217256" HGAP="22" ID="ID_1819206244" MODIFIED="1720738248310" TEXT="ungekl&#xe4;rt: auf was f&#xfc;r einem Kontext l&#xe4;uft der?" VSHIFT="12">
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#630f69" CREATED="1720738217256" HGAP="22" ID="ID_1819206244" MODIFIED="1721839797268" TEXT="ungekl&#xe4;rt: auf was f&#xfc;r einem Kontext l&#xe4;uft der?" VSHIFT="12">
<linktarget COLOR="#b42d6a" DESTINATION="ID_1819206244" ENDARROW="Default" ENDINCLINATION="43;40;" ID="Arrow_ID_1051671986" SOURCE="ID_960529387" STARTARROW="None" STARTINCLINATION="13;-15;"/>
<icon BUILTIN="help"/>
</node>
</node>
@ -87842,8 +87824,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
UseHeapAlloc <font color="#584d4d">&#10229; <i>default-Policy f&#252;r alle Builder</i></font>
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1721751472948" ID="ID_458575687" MODIFIED="1721751542135" TEXT="unklar wo diese l&#xe4;ngerfristig untergebracht werden">
<richcontent TYPE="NOTE"><html>
@ -87853,8 +87834,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<i>...vermutlich</i>&#160;wird es irgendwann so eine Art &#187;Builder-Framework&#171; geben, und dorthin geh&#246;ren dann solche Definitionen. Derzeit kann ich hierf&#252;r noch keine sinnvolle Code-Struktur festlegen
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<icon BUILTIN="hourglass"/>
</node>
</node>
@ -87996,6 +87976,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</p>
</body>
</html></richcontent>
<arrowlink COLOR="#332ba3" DESTINATION="ID_960529387" ENDARROW="Default" ENDINCLINATION="-46;-257;" ID="Arrow_ID_977971374" STARTARROW="None" STARTINCLINATION="-22;219;"/>
<icon BUILTIN="yes"/>
<node CREATED="1720573045524" ID="ID_1644013527" MODIFIED="1720573072547" TEXT="BufferDescriptor sind beliebig duplizierbar"/>
<node CREATED="1720573073663" ID="ID_1122948575" MODIFIED="1720573088876" TEXT="es wird ein unique-Key erzeugt und in einer Map registriert"/>
@ -88214,19 +88195,28 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1720738071716" ID="ID_955738037" MODIFIED="1720738741563" TEXT="&#x27f6; das f&#xfc;hrt in das Thema &#xbb;Dependency Injection&#xab;">
<arrowlink COLOR="#799399" DESTINATION="ID_639065262" ENDARROW="Default" ENDINCLINATION="-236;978;" ID="Arrow_ID_1822706622" STARTARROW="None" STARTINCLINATION="-560;-40;"/>
<node CREATED="1720740188800" ID="ID_1355509523" MODIFIED="1720740198332" TEXT="l&#xe4;uft auf einen mehrstufigen Aufbau hinaus">
<node CREATED="1720740199022" ID="ID_804276765" MODIFIED="1720740224343" TEXT="zun&#xe4;chst einmal brauchen wir: ein Array von BufferProvider(n)"/>
<node CREATED="1720740199022" ID="ID_804276765" MODIFIED="1721829306667">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
<u>Stufe-1</u>: zun&#228;chst einmal brauchen wir ein <b>Array</b>&#160;von <b>BufferProvider</b>(n)
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1720740227922" ID="ID_212393359" MODIFIED="1720740239065" TEXT="und zwar stets nur f&#xfc;r den Output">
<icon BUILTIN="idea"/>
</node>
<node CREATED="1720740386677" ID="ID_1612599283" MODIFIED="1720740403146" TEXT="die stecken aber bereits in den BufferDescriptoren">
<icon BUILTIN="idea"/>
<node CREATED="1720744136468" ID="ID_993267865" MODIFIED="1720744150638" TEXT="nur dreht das jetzt irgendwie das Buffer-Handling-Protokoll herum, oder?"/>
<node CREATED="1720744152986" ID="ID_1912567777" MODIFIED="1720744316536" TEXT="nicht sicher ... ist n&#xe4;mlich insofern nicht ausimplementiert">
<node CREATED="1720744152986" ID="ID_1912567777" MODIFIED="1721829164963" TEXT="nicht sicher ... ist n&#xe4;mlich insofern nicht ausimplementiert">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
der zentrale Test <font color="#480b64" face="Monospaced">verifyStandardCase()</font>&#160;ist <i><font color="#882f0d">auskommentiert</font>,</i>&#160; da er sich auf die <b>BufferTable</b>&#160;abst&#252;tzt &#8212; und mit deren Implementierung bin ich seinerzeit irgendwo in genau dem gleichen Wald versumpft, in dem ich jetzt auch wieder stecke ...
der zentrale Test <font color="#480b64" face="Monospaced">verifyStandardCase()</font>&#160;ist <i><font color="#882f0d">auskommentiert</font>,</i>&#160;da er sich auf die <b>BufferTable</b>&#160;abst&#252;tzt &#8212; und mit deren Implementierung bin ich seinerzeit irgendwo in einem &#228;hnlich gelagerten Wald versumpft, in dem ich jetzt auch wieder herumrirre ...
</p>
<p>
&#160;<font size="5">&#9785;</font>
@ -88262,7 +88252,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<arrowlink COLOR="#c985a7" DESTINATION="ID_1166727208" ENDARROW="Default" ENDINCLINATION="22;-40;" ID="Arrow_ID_1352529511" STARTARROW="None" STARTINCLINATION="-89;5;"/>
<icon BUILTIN="button_ok"/>
<node CREATED="1720744605651" ID="ID_359076277" MODIFIED="1720744625532" TEXT="und den ersten Teil vom Protokoll auf den Descriptor aufdoppeln"/>
<node CREATED="1720744635577" ID="ID_1963665306" MODIFIED="1720744647424" TEXT="bis zu dem Punkt, wo man ein Handle bekommt">
<node COLOR="#435e98" CREATED="1720744635577" ID="ID_1963665306" MODIFIED="1721829237404" TEXT="bis zu dem Punkt, wo man ein Handle bekommt">
<node CREATED="1720744739253" ID="ID_632663606" MODIFIED="1720744746500" TEXT="announce (count)"/>
<node CREATED="1720744756734" ID="ID_1183744537" MODIFIED="1720744759345" TEXT="lockBuffer()"/>
</node>
@ -88282,6 +88272,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1720745690535" ID="ID_1166727208" MODIFIED="1720745750241" TEXT="damit ist das Problem in die Build-Phase verschoben">
<linktarget COLOR="#c985a7" DESTINATION="ID_1166727208" ENDARROW="Default" ENDINCLINATION="22;-40;" ID="Arrow_ID_1352529511" SOURCE="ID_399616777" STARTARROW="None" STARTINCLINATION="-89;5;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1721829317586" ID="ID_1767202690" MODIFIED="1721829350735" TEXT="&#x27f9; es mu&#xdf; ein Array mit BufferDescriptoren belegt werden"/>
</node>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1720740474467" ID="ID_671960069" MODIFIED="1720740569295" TEXT="zweite Stufe: sollte dieses Array aus einer kompakteren Darstellung aufbauen">
@ -88401,6 +88392,225 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
<node COLOR="#435e98" CREATED="1721782897853" ID="ID_271206866" MODIFIED="1721785456553" TEXT="Konsequenz &#x27f9; fanIn und fanOut werden &#xfc;berfl&#xfc;ssig"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1721833352848" ID="ID_1921234844" MODIFIED="1721844764395" TEXT="das verschobene Probem stellt sich wieder: Einbinden des Model-Context">
<arrowlink COLOR="#494465" DESTINATION="ID_611993343" ENDARROW="Default" ENDINCLINATION="-3;-124;" ID="Arrow_ID_490283859" STARTARROW="Default" STARTINCLINATION="-2;70;"/>
<linktarget COLOR="#614050" DESTINATION="ID_1921234844" ENDARROW="Default" ENDINCLINATION="-857;-31;" ID="Arrow_ID_440207625" SOURCE="ID_115679136" STARTARROW="None" STARTINCLINATION="-5;199;"/>
<icon BUILTIN="pencil"/>
<node CREATED="1721833537792" ID="ID_1044157417" MODIFIED="1721833598223">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
<i>was bis jetzt feststeht</i>: dem Weaving-Pattern werden <font face="Monospaced" color="#37285a"><b>BufferDescriptor</b></font>s gegeben
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="info"/>
</node>
<node CREATED="1721833630028" ID="ID_1463882000" MODIFIED="1721833743407">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
Begr&#252;ndung: der <i>Aufrufer</i>&#160;legt das zusammen mit der konkreten Funktion fest
</p>
</body>
</html>
</richcontent>
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Der Aufrufer ist Code im Kontext der Domain-Ontology, und nur von dort kann bekannt sein, was die eingebundene Funktion konkret auf jedem &#187;output slot&#171; liefert
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1721833744653" ID="ID_564134305" MODIFIED="1721833811643">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
Einschr&#228;nkung: der Aufrufer kennt den <i>ben&#246;tigten Typ</i>&#160;des Buffers
</p>
</body>
</html>
</richcontent>
<font NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="messagebox_warning"/>
<node COLOR="#5b280f" CREATED="1721833852346" ID="ID_1878630710" MODIFIED="1721833866578">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
aber auch <b>nur</b>&#160;diesen
</p>
</body>
</html></richcontent>
<icon BUILTIN="stop-sign"/>
</node>
<node CREATED="1721833868061" ID="ID_980398879" MODIFIED="1721833976734" TEXT="die Wahl des BufferProviders ist ein unabh&#xe4;ngier Freiheitsgrad">
<arrowlink COLOR="#fedfc2" DESTINATION="ID_1041103864" ENDARROW="Default" ENDINCLINATION="21;-35;" ID="Arrow_ID_1774824176" STARTARROW="None" STARTINCLINATION="-182;8;"/>
<icon BUILTIN="idea"/>
</node>
</node>
<node CREATED="1721833899892" ID="ID_1041103864" MODIFIED="1721833989156" TEXT="der BufferProvider selbst bestimmt sich aufgrund...">
<linktarget COLOR="#fedfc2" DESTINATION="ID_1041103864" ENDARROW="Default" ENDINCLINATION="21;-35;" ID="Arrow_ID_1774824176" SOURCE="ID_980398879" STARTARROW="None" STARTINCLINATION="-182;8;"/>
<node CREATED="1721834016729" ID="ID_70679854" MODIFIED="1721834024172" TEXT="der Lage des Ergebnis-Slots">
<node CREATED="1721834105126" ID="ID_43786504" MODIFIED="1721834128606" TEXT="diese wiederum legt der Aufruf-Kontext fest (zusammen mit der Funktion)"/>
<node CREATED="1721834129579" ID="ID_1593311003" MODIFIED="1721834149717" TEXT="man k&#xf6;nnte einen fall-back auf den 1.Slot zugrundelegen">
<icon BUILTIN="idea"/>
</node>
</node>
<node CREATED="1721834025376" ID="ID_853984700" MODIFIED="1721834036731" TEXT="aus zus&#xe4;tzlichen &#xdc;berlegungen zum Caching"/>
<node CREATED="1721834044974" ID="ID_1751951250" MODIFIED="1721834055712" TEXT="und als Fallback: ein generischer Memory-Buffer-Provider"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1721835912891" ID="ID_174258961" MODIFIED="1721835947007" TEXT="Aufgabe f&#xfc;r die Builder-Mechanik">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1721835960018" ID="ID_393730575" MODIFIED="1721835975204" TEXT="der BufferDescriptor gilt als opaques Handle"/>
<node CREATED="1721835976166" ID="ID_1045731243" MODIFIED="1721835984813" TEXT="er ist implizit an den BufferProvider gebunden">
<node COLOR="#5b280f" CREATED="1721835986478" ID="ID_131800806" MODIFIED="1721836014435" TEXT="man k&#xf6;nnte das lockern">
<icon BUILTIN="button_cancel"/>
<node CREATED="1721836140307" HGAP="29" ID="ID_221692167" MODIFIED="1721836198065" TEXT="es k&#xf6;nnte quer-Beweglichkeit geben zwischen BufferProvidern" VSHIFT="1">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
hei&#223;t konkret, ein BufferProdiver k&#246;nnte einen BufferDescriptor eines anderen Providers &#252;bernehmen und re-interpretieren
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="idea"/>
</node>
</node>
<node CREATED="1721835993062" ID="ID_1150690608" MODIFIED="1721836126198" TEXT="das m&#xf6;chte ich nicht &#x2014; aus Gr&#xfc;nden der Wartbarkeit">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
wenn man nur ein opaques Handle herausgibt, dann l&#228;&#223;t man sich Spiel f&#252;r sp&#228;tere Entwicklung im BufferProvider selber; wenn wir das aufgeben, dann wird die derzeitige <i>Prototyp-Implementierung</i>&#160;zum Standard; und es ist immer eine sehr schlechte Idee, eine Implementierung zum Standard werden zu lassen
</p>
</body>
</html></richcontent>
</node>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1721838715106" ID="ID_742042797" MODIFIED="1721838751008" TEXT="unangenehme Konsequenz &#x27f9; Provider mu&#xdf; vor derm Descriptor festgelegt sein">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1721838753885" ID="ID_117794585" MODIFIED="1721838768742" TEXT="das widerspricht unimttelbar der Builder-API-Logik"/>
<node CREATED="1721838769522" ID="ID_230120050" MODIFIED="1721838872487" TEXT="und stellt eine l&#xe4;stige / problematische Einschr&#xe4;nkung dar">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
und zwar, weil wir ja auf den Aufrufer / den Kontext der Domain-Ontology angewiesen sind, um &#252;berhaupt zu wissen, wie viele Slots es geben wird
</p>
</body>
</html></richcontent>
</node>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1721838899545" ID="ID_960529387" MODIFIED="1721844774406" TEXT="doch wieder auf die Buffer-Konstruktor-Closure zur&#xfc;ckkommen?">
<arrowlink COLOR="#b42d6a" DESTINATION="ID_1819206244" ENDARROW="Default" ENDINCLINATION="43;40;" ID="Arrow_ID_1051671986" STARTARROW="None" STARTINCLINATION="13;-15;"/>
<linktarget COLOR="#332ba3" DESTINATION="ID_960529387" ENDARROW="Default" ENDINCLINATION="-46;-257;" ID="Arrow_ID_977971374" SOURCE="ID_1119846327" STARTARROW="None" STARTINCLINATION="-22;219;"/>
<font NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="help"/>
<icon BUILTIN="hourglass"/>
<node CREATED="1721839964216" ID="ID_1856959877" MODIFIED="1721840149213" STYLE="bubble">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
<u>zur Erinnerung</u>: die vollst&#228;ndige Form lautet...
</p>
<p>
</p>
<p>
<font color="#302948" face="Monospaced">&#160; </font><font color="#755f6a" face="Monospaced">template&lt;typename </font><font color="#981d2b" face="Monospaced"><b>BU</b></font><font color="#755f6a" face="Monospaced">, typename...</font><font color="#981d2b" face="Monospaced"><b>ARGS</b></font><font color="#755f6a" face="Monospaced">&gt;</font>
</p>
<p>
<font color="#302948" face="Monospaced">&#160; </font><font color="#301b76" face="Monospaced"><b>BuffDescr</b></font>
</p>
<p>
<font color="#302948" face="Monospaced">&#160;&#160;BufferProvider::</font><font color="#251e7b" face="Monospaced">getDescriptor</font><font color="#302948" face="Monospaced">&#160;(</font><font color="#981d2b" face="Monospaced"><b>ARGS</b></font><font color="#302948" face="Monospaced">&#160; ...args)</font>
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="idea"/>
</node>
<node COLOR="#5b280f" CREATED="1721841418133" HGAP="22" ID="ID_358050145" MODIFIED="1721841447356" TEXT="das w&#xe4;re dann aber noch eine weitere Indirektion" VSHIFT="11">
<icon BUILTIN="hourglass"/>
<node CREATED="1721841466978" ID="ID_4652150" MODIFIED="1721841494399" TEXT="wird notwendig, wenn die Buffer-Inlays etwas aus dem Aufrufkontext brauchen"/>
<node CREATED="1721841495395" ID="ID_821702891" MODIFIED="1721841509445" TEXT="w&#xfc;rde dann f&#xfc;r jeden RenderJob erneut aufgerufen">
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1721841540269" ID="ID_559283136" MODIFIED="1721841555585" TEXT="wo und wie l&#xe4;&#xdf;t sich aber derzeugt nicht sagen">
<icon BUILTIN="hourglass"/>
</node>
<node CREATED="1721841574145" ID="ID_1702529051" MODIFIED="1721841578897" TEXT="k&#xf6;nnte sein...">
<node CREATED="1721841579777" ID="ID_361824580" MODIFIED="1721841591634" TEXT="etwas aus einem erweiterten (Laufzeit)InvocationContext"/>
<node CREATED="1721841609140" ID="ID_659302347" MODIFIED="1721841630342" TEXT="oder etwas aus den bereits berechneten Input-Buffers">
<icon BUILTIN="messagebox_warning"/>
</node>
<node CREATED="1721841662463" ID="ID_133028304" MODIFIED="1721841693713">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
&#10233; das m&#252;&#223;te dann in den <font face="Monospaced"><b>shed()</b></font>-Aufruf gehen
</p>
</body>
</html>
</richcontent>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1721841712750" ID="ID_931617773" MODIFIED="1721841728142" TEXT="vorerst zur&#xfc;ckstellen &#x2014; aber im Blick behalten">
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/>
</node>
</node>
<node CREATED="1721841753852" ID="ID_1576582238" MODIFIED="1721841810960" TEXT="Kompromi&#xdf;: zus&#xe4;tzlicher DataBuilder&lt;BufferProvider&amp;&gt;">
<icon BUILTIN="yes"/>
<node CREATED="1721841813154" ID="ID_1036403667" MODIFIED="1721842181957" TEXT="warum DataBuilder &#x2014; nicht notwendig, aber symmetrisch behandelt">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...im aktuellen Stand brauchen wir die Info nur w&#228;hrend dem Build-Vorgang; sobald man aber sp&#228;ter &#252;bergeht zu einem ctor-&#955;, m&#252;&#223;te man die Info in die Node (in den Turnout) materialisieren. Nun k&#246;nnte man aktuell &#8222;einfach&#8220; einen std::vector nehmen &#8212; oder aber, genauso &#8222;einfach&#8220; einen weiteren SeveralBuilder mitlaufen lassen. Vorteil: der Speicher liegt im AllocationCluster / Nachteil: der Speicher wird verschwendet
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1721842211509" ID="ID_136741154" MODIFIED="1721842223063" TEXT="nun kann man zwei Richtungen einschlagen...">
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1721842070408" ID="ID_405313573" MODIFIED="1721842263407" TEXT="wennschon dennschon &#x27f9; dann auch gleich vorsorglich mit materialisieren">
<icon BUILTIN="hourglass"/>
</node>
<node CREATED="1721842097228" ID="ID_1188450049" MODIFIED="1721842266293" TEXT="oder: beide Infos in einen Vector und die Buffer-Descriptor im build()-Aufruf">
<icon BUILTIN="forward"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1721842271062" ID="ID_957156267" MODIFIED="1721842285156" TEXT="zweite L&#xf6;sung gem&#xe4;&#xdf; YAGNI">
<icon BUILTIN="yes"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1721842299017" ID="ID_1202882632" MODIFIED="1721842607346" TEXT="daraus resultiert eine weitere &#xbb;Linie&#xab; von Builder-Funktionen">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1721842328021" ID="ID_1494182835" MODIFIED="1721844743382" TEXT="selectOutputSlot()">
<icon BUILTIN="button_ok"/>
</node>
<node CREATED="1721842335404" ID="ID_1250028316" MODIFIED="1721842383194" TEXT="setAllCached()"/>
<node CREATED="1721842384902" ID="ID_533404449" MODIFIED="1721842395765" TEXT="setCached(i...i)"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1721842523924" ID="ID_1665424296" MODIFIED="1721842678142" TEXT="zudem: &#xbb;Service-Kontext&#xab; bereitstellen">
<arrowlink COLOR="#5d434b" DESTINATION="ID_611993343" ENDARROW="Default" ENDINCLINATION="60;-165;" ID="Arrow_ID_819933510" STARTARROW="None" STARTINCLINATION="-74;5;"/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
</node>
</node>
@ -88434,7 +88644,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1721004007263" ID="ID_786297934" LINK="#ID_1545807598" MODIFIED="1721059679494" TEXT="diese Bez&#xfc;ge kommen aus einem &#xbb;Service-Kontext&#xab;">
<icon BUILTIN="idea"/>
<node CREATED="1721059719341" ID="ID_1138040537" MODIFIED="1721059730831" TEXT="sie werden aber bereits zur Build-Zeit gelinkt"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1721059780060" ID="ID_611993343" MODIFIED="1721059787267" TEXT="daf&#xfc;r geeigneten Aufruf schaffen">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1721059780060" ID="ID_611993343" MODIFIED="1721842678142" TEXT="daf&#xfc;r geeigneten Aufruf schaffen">
<linktarget COLOR="#494465" DESTINATION="ID_611993343" ENDARROW="Default" ENDINCLINATION="-3;-124;" ID="Arrow_ID_490283859" SOURCE="ID_1921234844" STARTARROW="Default" STARTINCLINATION="-2;70;"/>
<linktarget COLOR="#5d434b" DESTINATION="ID_611993343" ENDARROW="Default" ENDINCLINATION="60;-165;" ID="Arrow_ID_819933510" SOURCE="ID_1665424296" STARTARROW="None" STARTINCLINATION="-74;5;"/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>