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:
parent
42f8f8d5af
commit
ea183086ca
2 changed files with 301 additions and 44 deletions
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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ß 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> Zusammenarbeit
|
||||
|
|
@ -5469,9 +5457,7 @@
|
|||
</node>
|
||||
<node COLOR="#435e98" CREATED="1665801881413" ID="ID_856020386" MODIFIED="1665855536788" TEXT="Ergebnis: rein plastisch, glä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ä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<long, WrappedIteratorCore<...."/>
|
||||
<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> 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> Wildcard
|
||||
|
|
@ -82131,7 +82111,8 @@ Date:   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üssen auf stabile BufferProvider verweisen können"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1721059425785" ID="ID_115679136" MODIFIED="1721059440468" TEXT="konkrete Einbindung in den Builder klären">
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1721059425785" ID="ID_115679136" MODIFIED="1721833464687" TEXT="konkrete Einbindung in den Builder klä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:   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ärt: auf was für einem Kontext läuft der?" VSHIFT="12">
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#630f69" CREATED="1720738217256" HGAP="22" ID="ID_1819206244" MODIFIED="1721839797268" TEXT="ungeklärt: auf was für einem Kontext lä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:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
UseHeapAlloc <font color="#584d4d">⟵ <i>default-Policy fü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ängerfristig untergebracht werden">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -87853,8 +87834,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<i>...vermutlich</i> wird es irgendwann so eine Art »Builder-Framework« geben, und dorthin gehören dann solche Definitionen. Derzeit kann ich hierfür noch keine sinnvolle Code-Struktur festlegen
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="hourglass"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -87996,6 +87976,7 @@ Date:   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:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1720738071716" ID="ID_955738037" MODIFIED="1720738741563" TEXT="⟶ das führt in das Thema »Dependency Injection«">
|
||||
<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äuft auf einen mehrstufigen Aufbau hinaus">
|
||||
<node CREATED="1720740199022" ID="ID_804276765" MODIFIED="1720740224343" TEXT="zunä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ächst einmal brauchen wir ein <b>Array</b> von <b>BufferProvider</b>(n)
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1720740227922" ID="ID_212393359" MODIFIED="1720740239065" TEXT="und zwar stets nur fü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ämlich insofern nicht ausimplementiert">
|
||||
<node CREATED="1720744152986" ID="ID_1912567777" MODIFIED="1721829164963" TEXT="nicht sicher ... ist nämlich insofern nicht ausimplementiert">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
der zentrale Test <font color="#480b64" face="Monospaced">verifyStandardCase()</font> ist <i><font color="#882f0d">auskommentiert</font>,</i>  da er sich auf die <b>BufferTable</b> abstützt — 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> ist <i><font color="#882f0d">auskommentiert</font>,</i> da er sich auf die <b>BufferTable</b> abstützt — und mit deren Implementierung bin ich seinerzeit irgendwo in einem ähnlich gelagerten Wald versumpft, in dem ich jetzt auch wieder herumrirre ...
|
||||
</p>
|
||||
<p>
|
||||
 <font size="5">☹</font>
|
||||
|
|
@ -88262,7 +88252,7 @@ Date:   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:   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="⟹ es muß 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:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1721782897853" ID="ID_271206866" MODIFIED="1721785456553" TEXT="Konsequenz ⟹ fanIn und fanOut werden überflü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ündung: der <i>Aufrufer</i> 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 »output slot« liefert
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node CREATED="1721833744653" ID="ID_564134305" MODIFIED="1721833811643">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Einschränkung: der Aufrufer kennt den <i>benötigten Typ</i> 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> 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ä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ö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ätzlichen Ü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ü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önnte das lockern">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1721836140307" HGAP="29" ID="ID_221692167" MODIFIED="1721836198065" TEXT="es könnte quer-Beweglichkeit geben zwischen BufferProvidern" VSHIFT="1">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
heißt konkret, ein BufferProdiver könnte einen BufferDescriptor eines anderen Providers übernehmen und re-interpretieren
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1721835993062" ID="ID_1150690608" MODIFIED="1721836126198" TEXT="das möchte ich nicht — aus Gründen der Wartbarkeit">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
wenn man nur ein opaques Handle herausgibt, dann läßt man sich Spiel für spätere Entwicklung im BufferProvider selber; wenn wir das aufgeben, dann wird die derzeitige <i>Prototyp-Implementierung</i> 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 ⟹ Provider muß 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ästige / problematische Einschrä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 ü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ü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ändige Form lautet...
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<p>
|
||||
<font color="#302948" face="Monospaced">  </font><font color="#755f6a" face="Monospaced">template<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">></font>
|
||||
</p>
|
||||
<p>
|
||||
<font color="#302948" face="Monospaced">  </font><font color="#301b76" face="Monospaced"><b>BuffDescr</b></font>
|
||||
</p>
|
||||
<p>
|
||||
<font color="#302948" face="Monospaced">  BufferProvider::</font><font color="#251e7b" face="Monospaced">getDescriptor</font><font color="#302948" face="Monospaced"> (</font><font color="#981d2b" face="Monospaced"><b>ARGS</b></font><font color="#302948" face="Monospaced">  ...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ä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ürde dann für jeden RenderJob erneut aufgerufen">
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1721841540269" ID="ID_559283136" MODIFIED="1721841555585" TEXT="wo und wie läßt sich aber derzeugt nicht sagen">
|
||||
<icon BUILTIN="hourglass"/>
|
||||
</node>
|
||||
<node CREATED="1721841574145" ID="ID_1702529051" MODIFIED="1721841578897" TEXT="kö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>
|
||||
⟹ das müß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ückstellen — 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ß: zusätzlicher DataBuilder<BufferProvider&>">
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1721841813154" ID="ID_1036403667" MODIFIED="1721842181957" TEXT="warum DataBuilder — nicht notwendig, aber symmetrisch behandelt">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...im aktuellen Stand brauchen wir die Info nur während dem Build-Vorgang; sobald man aber später übergeht zu einem ctor-λ, müßte man die Info in die Node (in den Turnout) materialisieren. Nun könnte man aktuell „einfach“ einen std::vector nehmen — oder aber, genauso „einfach“ 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 ⟹ 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ösung gemäß 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 »Linie« 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: »Service-Kontext« 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:   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üge kommen aus einem »Service-Kontext«">
|
||||
<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ür geeigneten Aufruf schaffen">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1721059780060" ID="ID_611993343" MODIFIED="1721842678142" TEXT="dafü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>
|
||||
|
|
|
|||
Loading…
Reference in a new issue