Invocation: investigate kind of data to be represented in ProcID

...especially the extended attributes remain somewhat nebulous,
since non of the prospective usages are close to being implemented right now.

It seems, we'll get two distinct sources at construction time of the Node
 * additional qualifiers from the Library plug-in
 * internal flags or qualifiers provided by the `NodeBuilder`

Another related concern seems to be generation of cache-keys,
which however will ''consume'' the proc-hash generated by the ProcID,
but not change the ID itself; cache-key generation is a tricky subject
and was somewhat overlooked regarding the connection to the `BufferProvider`.

Opened a new ticket #1292 as reminder for this issue.
This commit is contained in:
Fischlurch 2025-02-03 22:10:10 +01:00
parent 583b73bc62
commit 72543a8b34
6 changed files with 166 additions and 26 deletions

View file

@ -136,6 +136,7 @@ namespace engine {
* @note this function may be used right away, without prior announcing, but then
* the client should be prepared for exceptions. The #announce operation allows
* to establish a reliably available baseline.
* @todo 2/2025 might need to accept a cache key as additional parameter //////////////////////////////////TICKET #1392 : get cache key from computation to the cache backend
*/
BuffHandle
BufferProvider::lockBuffer (BuffDescr const& type)

View file

@ -345,7 +345,7 @@ namespace engine {
template<typename...INIT>
ParamStorage (INIT&& ...paramInit)
: param{forward<INIT> (paramInit)...}
{ }
{ } /////////////////////////////TICKET #1392 : pick up actual param and compute cache key
};
/** FeedManifold building block: hold input buffer pointers */

View file

@ -111,22 +111,25 @@ namespace engine {
/**
* Metadata to qualify a Port (and implicitly the enclosing Node).
* @note must be essentially immutable; should ensure that implementation
* never changes anything constituent for the \ref hash_value(),
* due to de-duplication into a hashtable (see proc-node.cpp).
*/
class ProcID
{
StrView nodeName_;
StrView portQual_;
StrView argLists_;
ProcAttrib attrib_{};
ProcAttrib attrib_;
ProcID (StrView nodeSymb, StrView portQual, StrView argLists);
ProcID (StrView nodeSymb, StrView portQual, StrView argLists, ProcAttrib);
using ProcNodeRef = std::reference_wrapper<ProcNode>;
using Leads = lib::Several<ProcNodeRef>;
public:
/** build and register a processing ID descriptor */
static ProcID& describe (StrView nodeSymb, StrView portSpec);
static ProcID& describe (StrView nodeSymb, StrView portSpec, ProcAttrib extAttrib =ProcAttrib{});
/* === symbolic descriptors === */

View file

@ -183,9 +183,11 @@ namespace engine {
* @remark this is the only public access point to ProcID entries,
* which are automatically deduplicated and managed in a common registry
* and retained until end of the Lumiera process (never deleted).
* @todo isn't returning a non-const reference dangerous? someone might add
* mutable state then, thereby undercutting de-duplication into a hashtable.
*/
ProcID&
ProcID::describe (StrView nodeSymb, StrView portSpec)
ProcID::describe (StrView nodeSymb, StrView portSpec, ProcAttrib extAttrib)
{
REQUIRE (not isnil (nodeSymb));
REQUIRE (not isnil (portSpec));
@ -196,7 +198,7 @@ namespace engine {
"Node:%s Spec:%s"}
% nodeSymb % portSpec
};
auto res = procRegistry.insert (ProcID{nodeSymb, portSpec.substr(0,p), portSpec.substr(p)});
auto res = procRegistry.insert (ProcID{nodeSymb, portSpec.substr(0,p), portSpec.substr(p), extAttrib});
ProcID& entry{unConst (*res.first)};
if (res.second)
{// new record placed into the registry
@ -209,10 +211,11 @@ namespace engine {
}
/** @internal */
ProcID::ProcID (StrView nodeSymb, StrView portQual, StrView argLists)
ProcID::ProcID (StrView nodeSymb, StrView portQual, StrView argLists, ProcAttrib extAttrib)
: nodeName_{nodeSymb}
, portQual_{portQual}
, argLists_{argLists}
, attrib_{extAttrib}
{ }
/**
@ -386,6 +389,7 @@ namespace engine {
}
namespace {// create a »backdoor access« into actual weaving-pattern instances
using _DummyProc = void(&)(NullType*);
@ -393,12 +397,25 @@ namespace engine {
using _DummyMediaWeaving = MediaWeavingPattern<_DummyProto>;
using _RecastMediaWeaving = _TurnoutDiagnostic<_DummyMediaWeaving>;
using _EmptySpec = decltype(buildParamSpec());
using _DummyParamWeaving = ParamWeavingPattern<_EmptySpec>;
using _RecastParamWeaving = _TurnoutDiagnostic<_DummyParamWeaving>;
lib::Several<PortRef> EMPTY_PRECURSORS;
}
/**
* Intrude into the Turnout and find out about source connectivity
* Intrude into the Turnout and find out about source connectivity.
* At interface level, this information about predecessor ports is not retained,
* but for the most common weaving patterns (Port implementations) there is a way
* to access implementation internals, bypassing the \ref Port interface; otherwise
* a reference to an empty port collection is returned.
* @warning this is a possibly dangerous low-level access, bypassing type safety.
* It relies on flags in the ProcID attributes to be set properly by the builder,
* and it relies on a common shared prefix in the memory layout of weaving patterns.
* @remark the \ref Port interface is kept minimal, since a very large number of
* implementations and template instantiations can be expected, so that any further
* function would cause a lot of additional and mostly redundant code generation.
*/
lib::Several<PortRef> const&
PortDiagnostic::srcPorts()
@ -408,7 +425,12 @@ namespace engine {
auto [leads,types] = _RecastMediaWeaving::accessInternal (p_);
return leads;
}
/////////////////////////////////////////////////OOO add branch here to support Proxy-patterns
else
if (p_.procID.hasProxyPatt())
{
Port& delegate = std::get<0>(_RecastParamWeaving::accessInternal (p_));
return watch(delegate).srcPorts();
} // recursive invocation on delegate of proxy
else
return EMPTY_PRECURSORS;
}

View file

@ -144,6 +144,8 @@ namespace engine {
/**
* @internal »Backdoor« for diagnostic
* @warning must be kept **layout compatible** with Turnout

View file

@ -94909,6 +94909,12 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="hourglass"/>
</node>
</node>
<node BACKGROUND_COLOR="#e4cbbd" COLOR="#5c4d6e" CREATED="1738617559127" ID="ID_18160045" MODIFIED="1738617902695" TEXT="mu&#xdf; au&#xdf;erdem (vmtl von hier) den Cache-Key erzeugen und weitergeben">
<arrowlink COLOR="#af2675" DESTINATION="ID_1411259351" ENDARROW="Default" ENDINCLINATION="-494;-17;" ID="Arrow_ID_1232505506" STARTARROW="None" STARTINCLINATION="-450;17;"/>
<arrowlink COLOR="#783a55" DESTINATION="ID_633737306" ENDARROW="Default" ENDINCLINATION="-1160;-50;" ID="Arrow_ID_1295433861" STARTARROW="None" STARTINCLINATION="-616;23;"/>
<linktarget COLOR="#b40c3e" DESTINATION="ID_18160045" ENDARROW="Default" ENDINCLINATION="-19;46;" ID="Arrow_ID_17227246" SOURCE="ID_1338134836" STARTARROW="Default" STARTINCLINATION="7;-7;"/>
<icon BUILTIN="bell"/>
</node>
</node>
<node BACKGROUND_COLOR="#e3beb5" COLOR="#435e98" CREATED="1720995636884" FOLDED="true" ID="ID_200677331" MODIFIED="1736092997728" TEXT="Buffer freigeben">
<icon BUILTIN="button_ok"/>
@ -94943,6 +94949,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#ad111a" CREATED="1736092669235" ID="ID_1338134836" MODIFIED="1736092914290" TEXT="verbleibt ein konzeptionelles Problem mit dem Buffer/Output-Protocol">
<arrowlink COLOR="#a65655" DESTINATION="ID_1747509213" ENDARROW="Default" ENDINCLINATION="44;-64;" ID="Arrow_ID_301544135" STARTARROW="None" STARTINCLINATION="-229;9;"/>
<arrowlink COLOR="#ba0855" DESTINATION="ID_1580601333" ENDARROW="Default" ENDINCLINATION="-484;22;" ID="Arrow_ID_1229889232" STARTARROW="None" STARTINCLINATION="-571;787;"/>
<arrowlink COLOR="#b40c3e" DESTINATION="ID_18160045" ENDARROW="Default" ENDINCLINATION="-19;46;" ID="Arrow_ID_17227246" STARTARROW="Default" STARTINCLINATION="7;-7;"/>
<icon BUILTIN="broken-line"/>
</node>
</node>
@ -102842,7 +102849,7 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
</body>
</html></richcontent>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1736434648599" ID="ID_265360833" MODIFIED="1736434922646" TEXT="aber leider wird der Weaving-Pattern-Typ erased...">
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1736434648599" ID="ID_265360833" MODIFIED="1738618579796" TEXT="aber leider wird der Weaving-Pattern-Typ erased...">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
@ -102851,6 +102858,7 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
</p>
</body>
</html></richcontent>
<linktarget COLOR="#7e535f" DESTINATION="ID_265360833" ENDARROW="Default" ENDINCLINATION="167;179;" ID="Arrow_ID_383544765" SOURCE="ID_951843735" STARTARROW="None" STARTINCLINATION="397;18;"/>
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1736434939874" ID="ID_606745199" MODIFIED="1736434947980" TEXT="M&#xf6;glichkeiten einer API-Erweiterung">
<node CREATED="1736434971612" ID="ID_584172400" MODIFIED="1736436108981" TEXT="KISS! Port::getLeadPorts() &#x27fc; Several&lt;PortRef&gt; const&amp;">
@ -103260,7 +103268,7 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1734653165700" HGAP="21" ID="ID_159987338" MODIFIED="1734654458033" TEXT="unklar wie weit BufferProvider entwickelt ist" VSHIFT="51">
<linktarget COLOR="#cc6e7f" DESTINATION="ID_159987338" ENDARROW="Default" ENDINCLINATION="-37;-657;" ID="Arrow_ID_717618496" SOURCE="ID_1168268714" STARTARROW="None" STARTINCLINATION="827;61;"/>
<linktarget COLOR="#cc6e7f" DESTINATION="ID_159987338" ENDARROW="Default" ENDINCLINATION="677;44;" ID="Arrow_ID_544228779" SOURCE="ID_1155618733" STARTARROW="Default" STARTINCLINATION="128;-1039;"/>
<linktarget COLOR="#cc6e7f" DESTINATION="ID_159987338" ENDARROW="Default" ENDINCLINATION="1184;730;" ID="Arrow_ID_544228779" SOURCE="ID_1155618733" STARTARROW="Default" STARTINCLINATION="128;-1039;"/>
<icon BUILTIN="messagebox_warning"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1735004660507" ID="ID_1747509213" LINK="https://issues.lumiera.org/ticket/1387" MODIFIED="1736092774165" TEXT="#1387 Buffer Memory Handling konsolidieren">
<linktarget COLOR="#ff2921" DESTINATION="ID_1747509213" ENDARROW="Default" ENDINCLINATION="-965;-57;" ID="Arrow_ID_1750574936" SOURCE="ID_1088386150" STARTARROW="None" STARTINCLINATION="1192;64;"/>
@ -103274,6 +103282,15 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
<linktarget COLOR="#fecea8" DESTINATION="ID_1501030777" ENDARROW="Default" ENDINCLINATION="192;835;" ID="Arrow_ID_978869219" SOURCE="ID_1527577597" STARTARROW="None" STARTINCLINATION="-278;34;"/>
<icon BUILTIN="broken-line"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1738617745890" ID="ID_1411259351" MODIFIED="1738618119545" TEXT="#1392 mu&#xdf; Cache-Key direkt aus dem realen Parameter erstellen">
<arrowlink COLOR="#d04039" DESTINATION="ID_633737306" ENDARROW="Default" ENDINCLINATION="-1569;-1487;" ID="Arrow_ID_128618199" STARTARROW="None" STARTINCLINATION="-580;25;"/>
<linktarget COLOR="#af2675" DESTINATION="ID_1411259351" ENDARROW="Default" ENDINCLINATION="-494;-17;" ID="Arrow_ID_1232505506" SOURCE="ID_18160045" STARTARROW="None" STARTINCLINATION="-450;17;"/>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1738618218098" ID="ID_1541754433" MODIFIED="1738618391949" TEXT="brauche f&#xfc;r Cache-Key einen Zugang zur ProcID">
<arrowlink COLOR="#783a50" DESTINATION="ID_480339842" ENDARROW="Default" ENDINCLINATION="341;-17;" ID="Arrow_ID_1543965957" STARTARROW="None" STARTINCLINATION="-621;37;"/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1734893714728" ID="ID_1390040531" MODIFIED="1735016474202" TEXT="Invocation auf Node-Level">
@ -104890,6 +104907,11 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
</body>
</html></richcontent>
<linktarget COLOR="#ff461d" DESTINATION="ID_518441567" ENDARROW="Default" ENDINCLINATION="475;-655;" ID="Arrow_ID_743151366" SOURCE="ID_1999491710" STARTARROW="None" STARTINCLINATION="197;254;"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1738618246550" ID="ID_480339842" MODIFIED="1738618616535" TEXT="Cache-Key braucht feste und bewegliche Elemente">
<arrowlink COLOR="#952535" DESTINATION="ID_951843735" ENDARROW="Default" ENDINCLINATION="-118;-596;" ID="Arrow_ID_1126783803" STARTARROW="None" STARTINCLINATION="296;16;"/>
<linktarget COLOR="#783a50" DESTINATION="ID_480339842" ENDARROW="Default" ENDINCLINATION="341;-17;" ID="Arrow_ID_1543965957" SOURCE="ID_1541754433" STARTARROW="None" STARTINCLINATION="-621;37;"/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node CREATED="1730497062384" ID="ID_1375039507" MODIFIED="1730497334994" TEXT="gebraucht wird: eine stabile und lesbare Notation f&#xfc;r Test und Diagnose">
<richcontent TYPE="NOTE"><html>
@ -105078,6 +105100,26 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
</html></richcontent>
</node>
</node>
<node CREATED="1738620151988" ID="ID_1727618457" MODIFIED="1738626611424" TEXT="Datenquellen">
<linktarget COLOR="#7c96df" DESTINATION="ID_1727618457" ENDARROW="Default" ENDINCLINATION="-212;1484;" ID="Arrow_ID_461907343" SOURCE="ID_386805431" STARTARROW="None" STARTINCLINATION="-147;-11;"/>
<icon BUILTIN="info"/>
<node CREATED="1738620162667" ID="ID_859114026" MODIFIED="1738620180964" TEXT="die Basis der Spec mu&#xdf; vom Library-Plug-in aufgebaut werden"/>
<node CREATED="1738626154352" ID="ID_1745958923" MODIFIED="1738626173029" TEXT="ggfs Qualifier / feste Parameter als extended attributes"/>
<node CREATED="1738626174466" ID="ID_1967709533" MODIFIED="1738626198594" TEXT="Node-Builder mu&#xdf; Flags (WeavingPattern-Klassifikation) beisteuern"/>
<node CREATED="1738626199966" ID="ID_694414688" MODIFIED="1738626258270" TEXT="aktuelle Parameter : Cache-Key-Berechnung greift nur zu">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...braucht einen aktuellen Port-Hash, berechnet aber auf dieser Basis direkt den Beitrag der aktuell erzeugten Parameter-Werte
</p>
</body>
</html>
</richcontent>
</node>
</node>
<node BACKGROUND_COLOR="#ece6a4" COLOR="#690f14" CREATED="1738620081716" ID="ID_1555844568" MODIFIED="1738620127887" TEXT="Design">
<icon BUILTIN="yes"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1730508735166" ID="ID_1955634373" MODIFIED="1730509071058" TEXT="generell: auf ein Getter-API setzen">
<icon BUILTIN="yes"/>
<node CREATED="1730508758773" ID="ID_1040159044" MODIFIED="1730508787495" TEXT="bedeutet: komplett abstrahieren von der Berechnung und Storage"/>
@ -105141,6 +105183,7 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1730510962225" ID="ID_786613770" MODIFIED="1738288973161" TEXT="Metadaten-Zugriff / API">
<arrowlink COLOR="#4416dc" DESTINATION="ID_1600745522" ENDARROW="Default" ENDINCLINATION="-224;60;" ID="Arrow_ID_1199285145" STARTARROW="None" STARTINCLINATION="183;0;"/>
<linktarget COLOR="#34417f" DESTINATION="ID_786613770" ENDARROW="Default" ENDINCLINATION="-278;-1402;" ID="Arrow_ID_1689861408" SOURCE="ID_1257287659" STARTARROW="None" STARTINCLINATION="-284;14;"/>
@ -106235,30 +106278,66 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1738560736897" ID="ID_1797279581" MODIFIED="1738561206068" TEXT="in ProcID : Pseudo-Zugriffs-Typen aufbauen">
<node COLOR="#338800" CREATED="1738560736897" ID="ID_1797279581" MODIFIED="1738609792464" TEXT="in ProcID : Pseudo-Zugriffs-Typen aufbauen">
<linktarget COLOR="#5795ce" DESTINATION="ID_1797279581" ENDARROW="Default" ENDINCLINATION="59;-122;" ID="Arrow_ID_1406281476" SOURCE="ID_256800788" STARTARROW="None" STARTINCLINATION="-557;0;"/>
<icon BUILTIN="pencil"/>
<icon BUILTIN="button_ok"/>
<node CREATED="1738560756846" ID="ID_1546561363" MODIFIED="1738561090267">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
MediaWeavingPattern &#10229;&#160;&#160;Dummy-Funktion <font face="Monospaced" color="#861717">void</font><font face="Monospaced" color="#e90606">(&amp;)</font><font face="Monospaced" color="#861717">(NullType*)</font>
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<linktarget COLOR="#176f59" DESTINATION="ID_1546561363" ENDARROW="Default" ENDINCLINATION="-212;0;" ID="Arrow_ID_1862669471" SOURCE="ID_1862733256" STARTARROW="None" STARTINCLINATION="30;3;"/>
</node>
<node CREATED="1738560756846" ID="ID_452167360" MODIFIED="1738609484973">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
ParamWeavingPattern &#10229;&#160;&#160;empty Spec <font color="#861717" face="Monospaced">buildParamSpec()</font>
</p>
</body>
</html></richcontent>
<linktarget COLOR="#176f59" DESTINATION="ID_452167360" ENDARROW="Default" ENDINCLINATION="-212;0;" ID="Arrow_ID_1149659296" SOURCE="ID_1453988552" STARTARROW="None" STARTINCLINATION="30;3;"/>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1738518799268" ID="ID_1696634308" MODIFIED="1738518818558" TEXT="M&#xf6;glichkeit zum Setzen der Flags schaffen">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1738626351341" ID="ID_176066207" MODIFIED="1738626501531" TEXT="Design schwierig zu entscheiden">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
....da ich im Moment nur spekuliere, und ein konkreter Bezugspunkt noch in weiter Ferne liegt; wegen der de-Duplikation sollten alle Quellen bereits in den statischen Factory-Aufruf gehen; man k&#246;nnte nat&#252;rlich eine Builder-DSL davor setzen (nicht da&#223; wir schon genug Builder in dem Bereich h&#228;tten....)
</p>
</body>
</html></richcontent>
<icon BUILTIN="messagebox_warning"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1738518819705" ID="ID_1851563907" MODIFIED="1738518836777" TEXT="Flags automatisch aus dem Node-Builder setzen f&#xfc;r passende Pattern">
<node CREATED="1738626503188" ID="ID_386805431" MODIFIED="1738626642210" TEXT="aktuell zwei zus&#xe4;tzliche Quellen absehbar">
<arrowlink COLOR="#7c96df" DESTINATION="ID_1727618457" ENDARROW="Default" ENDINCLINATION="-212;1484;" ID="Arrow_ID_461907343" STARTARROW="None" STARTINCLINATION="-147;-11;"/>
<icon BUILTIN="info"/>
<node CREATED="1738626518770" ID="ID_330079599" MODIFIED="1738626536298" TEXT="Flags &#x27f5; direkt aus dem Builder"/>
<node CREATED="1738626537536" ID="ID_1716610517" MODIFIED="1738626552618" TEXT="Qualifier &#x27f5; vom Lib-Plug-in beigesteuert"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1738626650395" ID="ID_1480395867" MODIFIED="1738626735361" TEXT="&#x27f9; demnach w&#xe4;ren zwei getrennte Mechanismen vorteilhaft">
<icon BUILTIN="yes"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1738626672933" ID="ID_1696020609" MODIFIED="1738626725951" TEXT="zus&#xe4;tzliche Spec parsen (aus der Domain)">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1738626687475" ID="ID_319591544" MODIFIED="1738626814756" TEXT="direkter bin&#xe4;rer) Parameter f&#xfc;r den NodeBuilder">
<linktarget COLOR="#604c99" DESTINATION="ID_319591544" ENDARROW="Default" ENDINCLINATION="-161;8;" ID="Arrow_ID_1130885628" SOURCE="ID_1851563907" STARTARROW="None" STARTINCLINATION="157;6;"/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1738518819705" ID="ID_1851563907" MODIFIED="1738626814756" TEXT="Flags automatisch aus dem Node-Builder setzen f&#xfc;r passende Pattern">
<arrowlink COLOR="#604c99" DESTINATION="ID_319591544" ENDARROW="Default" ENDINCLINATION="-161;8;" ID="Arrow_ID_1130885628" STARTARROW="None" STARTINCLINATION="157;6;"/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
@ -106280,18 +106359,33 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1738518865571" ID="ID_1349914035" MODIFIED="1738518908673" TEXT="Zugriff realisiert durch &#xbb;verdeckten Dispatch&#xab;">
<arrowlink COLOR="#3144ba" DESTINATION="ID_1917274705" ENDARROW="Default" ENDINCLINATION="8;62;" ID="Arrow_ID_342324675" STARTARROW="None" STARTINCLINATION="-34;-45;"/>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1738560859721" ID="ID_866197683" MODIFIED="1738561626051" TEXT="PortDiagnostic::srcPorts()">
<node COLOR="#338800" CREATED="1738560859721" ID="ID_866197683" MODIFIED="1738609817332" TEXT="PortDiagnostic::srcPorts()">
<linktarget COLOR="#587793" DESTINATION="ID_866197683" ENDARROW="Default" ENDINCLINATION="140;240;" ID="Arrow_ID_1588669375" SOURCE="ID_480573349" STARTARROW="None" STARTINCLINATION="462;-13;"/>
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1738560976256" ID="ID_1862733256" MODIFIED="1738561090267" TEXT="&#xbb;Fall-1&#xab; : Manifold-Pattern">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1738560976256" ID="ID_1862733256" MODIFIED="1738609435877" TEXT="&#xbb;Fall-1&#xab; : Manifold-Pattern">
<arrowlink COLOR="#176f59" DESTINATION="ID_1546561363" ENDARROW="Default" ENDINCLINATION="-212;0;" ID="Arrow_ID_1862669471" STARTARROW="None" STARTINCLINATION="30;3;"/>
<icon BUILTIN="button_ok"/>
<node COLOR="#3f7382" CREATED="1738561150769" HGAP="31" ID="ID_180923844" MODIFIED="1738561170969" TEXT="einfach durchgreifen..." VSHIFT="9">
<font NAME="SansSerif" SIZE="10"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1738561113646" ID="ID_1613973730" MODIFIED="1738561134756" TEXT="&#xbb;Fall-2&#xab; : Proxy">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1738560976256" ID="ID_1453988552" MODIFIED="1738609470705" TEXT="&#xbb;Fall-2&#xab; : Proxy &#x27f6; Delegate">
<arrowlink COLOR="#176f59" DESTINATION="ID_452167360" ENDARROW="Default" ENDINCLINATION="-212;0;" ID="Arrow_ID_1149659296" STARTARROW="None" STARTINCLINATION="30;3;"/>
<icon BUILTIN="button_ok"/>
<node COLOR="#3f7382" CREATED="1738561150769" HGAP="31" ID="ID_1054469736" MODIFIED="1738609501222" TEXT="rekursiv auf dem delegate-Port aufrufen" VSHIFT="9">
<font NAME="SansSerif" SIZE="10"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#692b0f" CREATED="1738609535308" HGAP="30" ID="ID_115295692" MODIFIED="1738609783150" TEXT="(geht nicht besser wegen Interface)">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Da Fall-1 am Wichtigsten ist, orientiert sich das Interface daran und reicht einfach die Collection der Vorg&#228;nger-Ports per Referenz heraus. Leider haben wir aber im Fall de ParamWeavingPattern gar keine Collection der Vorg&#228;nger-Ports, sondern nur eine direkte Referenz auf den Delegate des Proxy; und da es sich um einen einfachen Funktionsaufruf handelt, haben wir keinen Ort, an dem eine solche Collection hilfsweise konstruiert und abgelegt werden k&#246;nnte. Deshalb bleibt nur, entweder in dem Fall gar nichts zu liefern, d.h. zwei verschiedene Methoden zu bieten, oder eben die Rekursion auf das Delegate (das dann hoffentlich ein Manifold-Pattern ist und deshalb eine solche Collection hat)
</p>
</body>
</html></richcontent>
<font ITALIC="true" NAME="SansSerif" SIZE="11"/>
</node>
</node>
</node>
</node>
@ -106300,6 +106394,19 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
<node CREATED="1738561572212" ID="ID_533015904" MODIFIED="1738561581287" TEXT="von NodeDiagnostic &#x27fc; PortDiagnostic"/>
</node>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1738618417752" ID="ID_951843735" MODIFIED="1738618616535" TEXT="wohl auch f&#xfc;r Cache-Key ein &#xbb;Seiten-Zugang&#xab; notwendig">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...entweder, indem es direkt im Turnout eine Querverbindung gibt, oder duch einen low-Level-Zugangsweg analog zu den Source-Ports
</p>
</body>
</html></richcontent>
<arrowlink COLOR="#7e535f" DESTINATION="ID_265360833" ENDARROW="Default" ENDINCLINATION="167;179;" ID="Arrow_ID_383544765" STARTARROW="None" STARTINCLINATION="397;18;"/>
<linktarget COLOR="#952535" DESTINATION="ID_951843735" ENDARROW="Default" ENDINCLINATION="-118;-596;" ID="Arrow_ID_1126783803" SOURCE="ID_480339842" STARTARROW="None" STARTINCLINATION="296;16;"/>
<icon BUILTIN="hourglass"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1736454082544" ID="ID_1160836625" MODIFIED="1738518258829" TEXT="Test f&#xfc;r Metadaten-Verwaltung">
@ -107366,7 +107473,7 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
<icon BUILTIN="help"/>
<node BACKGROUND_COLOR="#c59b8e" COLOR="#690f14" CREATED="1734652908335" HGAP="112" ID="ID_1155618733" MODIFIED="1734653938102" TEXT="wie ist hier eigentlich der Stand??" VSHIFT="52">
<arrowlink COLOR="#9b696f" DESTINATION="ID_1210803090" ENDARROW="Default" ENDINCLINATION="-1935;134;" ID="Arrow_ID_965284194" STARTARROW="None" STARTINCLINATION="-1174;81;"/>
<arrowlink COLOR="#cc6e7f" DESTINATION="ID_159987338" ENDARROW="Default" ENDINCLINATION="677;44;" ID="Arrow_ID_544228779" STARTARROW="Default" STARTINCLINATION="128;-1039;"/>
<arrowlink COLOR="#cc6e7f" DESTINATION="ID_159987338" ENDARROW="Default" ENDINCLINATION="1184;730;" ID="Arrow_ID_544228779" STARTARROW="Default" STARTINCLINATION="128;-1039;"/>
<icon BUILTIN="help"/>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1734654001763" ID="ID_1121467988" MODIFIED="1734654178000">
<richcontent TYPE="NODE"><html>
@ -148253,6 +148360,11 @@ std::cout &lt;&lt; tmpl.render({&quot;what&quot;, &quot;World&quot;}) &lt;&lt; s
<arrowlink COLOR="#832b91" DESTINATION="ID_1288148978" ENDARROW="Default" ENDINCLINATION="-2377;191;" ID="Arrow_ID_1024856417" STARTARROW="None" STARTINCLINATION="-1447;-79;"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1738617745890" ID="ID_633737306" MODIFIED="1738618119546" TEXT="#1392 Cache-Key Datenversorgung">
<linktarget COLOR="#d04039" DESTINATION="ID_633737306" ENDARROW="Default" ENDINCLINATION="-1569;-1487;" ID="Arrow_ID_128618199" SOURCE="ID_1411259351" STARTARROW="None" STARTINCLINATION="-580;25;"/>
<linktarget COLOR="#783a55" DESTINATION="ID_633737306" ENDARROW="Default" ENDINCLINATION="-1160;-50;" ID="Arrow_ID_1295433861" SOURCE="ID_18160045" STARTARROW="None" STARTINCLINATION="-616;23;"/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
<node CREATED="1720994187035" ID="ID_1817562586" MODIFIED="1720994190143" TEXT="Basis-Dienste"/>