Invocation: now able to access predecessor-ports

...exploiting the ''backdoor access'' bypassing the VTable,
as made possible by a common congruent storage layout.

This is a first proof-of-concept, but also shows that the demo nodes
in NodeMeta_test are wired as expected. What is needed now is to make
this diagnostic access easier to invoke and more bullet-proof, by setting
the proper Attribute bits directly in the `NodeBuilder`
This commit is contained in:
Fischlurch 2025-02-03 03:54:21 +01:00
parent bcdcb36615
commit 583b73bc62
6 changed files with 160 additions and 54 deletions

View file

@ -130,17 +130,20 @@ namespace engine {
/* === symbolic descriptors === */
string genProcName();
string genProcSpec(); ///< render a descriptor for the operation (without predecessors)
string genQualifier();
string genNodeName();
string genNodeSymbol();
string genNodeDomain();
string genNodeSpec(Leads&);
string genSrcSpec (Leads&); ///< transitively enumerate all unique source nodes
string genProcName() const;
string genProcSpec() const; ///< render a descriptor for the operation (without predecessors)
string genQualifier() const;
string genNodeName() const;
string genNodeSymbol() const;
string genNodeDomain() const;
string genNodeSpec(Leads&) const;
string genSrcSpec (Leads&) const; ///< transitively enumerate all unique source nodes
struct ArgModel;
ArgModel genArgModel();
ArgModel genArgModel() const;
bool hasManifoldPatt() const { return attrib_.manifold; }
bool hasProxyPatt() const { return attrib_.isProxy; }
friend bool
operator== (ProcID const& l, ProcID const& r)
@ -185,7 +188,7 @@ namespace engine {
: iArg{move (iarg)}
, oArg{move (oarg)}
{ }
friend ArgModel ProcID::genArgModel();
friend ArgModel ProcID::genArgModel() const;
};

View file

@ -28,6 +28,10 @@
#include "lib/parse.hpp"
#include "lib/util.hpp"
// used for a »backdoor access« in PortDiagnostic::srcPorts
#include "steam/engine/media-weaving-pattern.hpp"
#include "steam/engine/param-weaving-pattern.hpp"
#include <boost/functional/hash.hpp> /////////////////////////////////////////////////////TICKET #1391 is boost-hash the proper tool for this task?
#include <unordered_set>
#include <set>
@ -227,7 +231,7 @@ namespace engine {
}
string
ProcID::genProcName()
ProcID::genProcName() const
{
std::ostringstream buffer;
buffer << genNodeSymbol()
@ -236,7 +240,7 @@ namespace engine {
}
string
ProcID::genProcSpec()
ProcID::genProcSpec() const
{
std::ostringstream buffer;
buffer << nodeName_
@ -246,13 +250,13 @@ namespace engine {
}
string
ProcID::genNodeName()
ProcID::genNodeName() const
{
return string{nodeName_};
}
string
ProcID::genNodeSymbol()
ProcID::genNodeSymbol() const
{
auto p = nodeName_.find(':');
return p == string::npos? string{nodeName_}
@ -260,7 +264,7 @@ namespace engine {
}
string
ProcID::genNodeDomain()
ProcID::genNodeDomain() const
{
auto p = nodeName_.find(':');
return p == string::npos? string{}
@ -268,7 +272,7 @@ namespace engine {
}
string
ProcID::genQualifier()
ProcID::genQualifier() const
{
std::ostringstream buffer;
if (not isnil(portQual_))
@ -287,7 +291,7 @@ namespace engine {
}
string
ProcID::genNodeSpec (Leads& leads)
ProcID::genNodeSpec (Leads& leads) const
{
std::ostringstream buffer;
buffer << nodeName_;
@ -304,7 +308,7 @@ namespace engine {
}
string
ProcID::genSrcSpec (Leads& leads)
ProcID::genSrcSpec (Leads& leads) const
{
return isnil(leads)? string{"-◎"} // no leads => starting point itself is a source node
: "┉┉{"
@ -320,7 +324,7 @@ namespace engine {
/** parse and dissect the argument specification */
ProcID::ArgModel
ProcID::genArgModel()
ProcID::genArgModel() const
{
auto argListSyntax = accept_bracket(accept_repeated(0,MAX_NODE_ARG, COMMA, specTermSyntax));
auto argSpecSyntax = accept(argListSyntax)
@ -382,10 +386,31 @@ namespace engine {
}
lib::Several<PortRef>
namespace {// create a »backdoor access« into actual weaving-pattern instances
using _DummyProc = void(&)(NullType*);
using _DummyProto = FeedPrototype<_DummyProc>;
using _DummyMediaWeaving = MediaWeavingPattern<_DummyProto>;
using _RecastMediaWeaving = _TurnoutDiagnostic<_DummyMediaWeaving>;
lib::Several<PortRef> EMPTY_PRECURSORS;
}
/**
* Intrude into the Turnout and find out about source connectivity
*/
lib::Several<PortRef> const&
PortDiagnostic::srcPorts()
{
UNIMPLEMENTED ("intrude into the Turnout and find out about source connectivity");
if (p_.procID.hasManifoldPatt())
{
auto [leads,types] = _RecastMediaWeaving::accessInternal (p_);
return leads;
}
/////////////////////////////////////////////////OOO add branch here to support Proxy-patterns
else
return EMPTY_PRECURSORS;
}
/**

View file

@ -306,7 +306,7 @@ namespace engine {
: p_{thePort}
{ }
lib::Several<PortRef> srcPorts();
lib::Several<PortRef> const& srcPorts();
bool isSrc() { return srcPorts().empty(); }

View file

@ -172,6 +172,13 @@ namespace engine {
* the similar basic layout of weaving pattern templates to gain access
* to some common infrastructure, notably the predecessor ports.
*/
static auto
accessInternal (Port& port)
{ // Note: deliberately static, not dynamic-cast
auto& internalView = static_cast<_TurnoutDiagnostic&> (port);
auto& weavingPattern = static_cast<PAT&> (internalView);
return _accessInternal(weavingPattern);
}
};

View file

@ -109,7 +109,7 @@ namespace test {
/** @test TODO aspects of node definition relevant for the ProcID
* @todo WIP 2/25 🔁 define implement
* @todo WIP 2/25 🔁 define 🔁 implement
*/
void
verify_ID_properties()
@ -174,6 +174,16 @@ namespace test {
.setParam(0.5)
.completePort()
.build()};
///////////////////////////////////////////////////////TODO WIP
Port& p1 = watch(nM).ports()[0];
SHOW_EXPR(p1.procID.genProcSpec())
auto& p1src = watch(p1).srcPorts();
Port& p1s1 = p1src[0];
Port& p1s2 = p1src[1];
SHOW_EXPR(p1s1.procID.genProcSpec())
SHOW_EXPR(p1s2.procID.genProcSpec())
///////////////////////////////////////////////////////TODO WIP
UNIMPLEMENTED ("verify connectivity");
}
};

View file

@ -94683,8 +94683,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1738549371342" ID="ID_48209409" MODIFIED="1738549390368" TEXT="letztlich sind dann aber InvocationAdapter und FeedManifold verschmolzen"/>
<node CREATED="1738549391739" ID="ID_335336619" MODIFIED="1738549799591" TEXT="und gehen nun beide zusammen aus einem FeedPrototype hervor">
<linktarget COLOR="#476d81" DESTINATION="ID_335336619" ENDARROW="Default" ENDINCLINATION="1464;-35;" ID="Arrow_ID_1855832580" SOURCE="ID_152831343" STARTARROW="None" STARTINCLINATION="417;0;"/>
<linktarget COLOR="#4f6988" DESTINATION="ID_335336619" ENDARROW="Default" ENDINCLINATION="1514;0;" ID="Arrow_ID_1821666531" SOURCE="ID_322789953" STARTARROW="None" STARTINCLINATION="1033;0;"/>
<linktarget COLOR="#3f5f9a" DESTINATION="ID_335336619" ENDARROW="Default" ENDINCLINATION="493;21;" ID="Arrow_ID_1206921858" SOURCE="ID_1618027387" STARTARROW="None" STARTINCLINATION="470;0;"/>
<linktarget COLOR="#4f6988" DESTINATION="ID_335336619" ENDARROW="Default" ENDINCLINATION="1514;0;" ID="Arrow_ID_1821666531" SOURCE="ID_322789953" STARTARROW="None" STARTINCLINATION="1033;0;"/>
</node>
<node CREATED="1738549416339" ID="ID_682224491" MODIFIED="1738550032719" TEXT="der Mix-in-Ansatz wurde dadurch letztlich &#xfc;berfl&#xfc;ssig (was gut ist)">
<linktarget COLOR="#4f5888" DESTINATION="ID_682224491" ENDARROW="Default" ENDINCLINATION="-1236;54;" ID="Arrow_ID_1568439843" SOURCE="ID_727715872" STARTARROW="None" STARTINCLINATION="760;-597;"/>
@ -105894,8 +105894,7 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
<i>Extended Attributes</i>&#160;sollen diverse anderweitige Beschr&#228;nkungen auffangen
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1738547056214" ID="ID_34946402" MODIFIED="1738547768337" TEXT="Sie erm&#xf6;glichen eine initiale Festlegung ohne vollst&#xe4;ndige Kenntnis des Sachverhalts">
<richcontent TYPE="NOTE"><html>
@ -105905,8 +105904,7 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
Wenn ein komplexer Sachverhalt &#252;berhaupt erst erschlossen werden soll, durch das Aufbauen einer orientierenden Struktur, so mu&#223; ein Vorgriff gemacht werden, der leider nur in den seltensten F&#228;llen der Sache ad&#228;quat ist. Infolgedessen ist man dann an untaugliche Strukturen gebunden, deren Reparatur zu kostspielig w&#228;re. Stattdessen hilft man sich mit dar&#252;ber gelegten Layern, die Metadaten und erweiterte Attribute als Ankerpunkt verwenden
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<linktarget COLOR="#e6165b" DESTINATION="ID_34946402" ENDARROW="Default" ENDINCLINATION="908;-37;" ID="Arrow_ID_1661388795" SOURCE="ID_1638082833" STARTARROW="None" STARTINCLINATION="590;28;"/>
</node>
<node CREATED="1738547123718" HGAP="30" ID="ID_1111160527" MODIFIED="1738547687404" VSHIFT="-11">
@ -105917,8 +105915,7 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
<u>Design-Paradoxon</u>: das Design besonders relevanter Funktionalit&#228;t ist selten ad&#228;quat
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1721238837562" HGAP="73" ID="ID_341926402" MODIFIED="1738548361793" STYLE="bubble" TEXT="&#xfc;berladen mit widerspr&#xfc;chlichen Bedeutungen" VSHIFT="28">
<edge COLOR="#ff5d00" STYLE="sharp_linear"/>
@ -106110,8 +106107,7 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
zu entgehen....
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<arrowlink COLOR="#de3870" DESTINATION="ID_341926402" ENDARROW="Default" ENDINCLINATION="-31;45;" ID="Arrow_ID_529164217" STARTARROW="None" STARTINCLINATION="-865;-25;"/>
<icon BUILTIN="smiley-oh"/>
</node>
@ -106127,30 +106123,31 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
will ich dann doch auch noch haben...
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1738518837927" ID="ID_119086007" MODIFIED="1738533250362" TEXT="Dispatch auf Basis der Flags erm&#xf6;glichen">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1738518837927" ID="ID_119086007" MODIFIED="1738560869556" TEXT="Dispatch auf Basis der Flags erm&#xf6;glichen">
<icon BUILTIN="pencil"/>
<node CREATED="1738533252216" ID="ID_395771530" MODIFIED="1738533271606" TEXT="funktioniert wie die generischen Dispatcher-Tables, nur fest-verdrahtet"/>
<node CREATED="1738533418442" ID="ID_1905552895" MODIFIED="1738533443165" TEXT="Es handelt sich um Informations-Funktionen &#x27f9; Zugang via ProcID"/>
<node CREATED="1738535524778" ID="ID_2361548" MODIFIED="1738535531249" TEXT="Dispatch hinter dem Zugang">
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1738535532721" ID="ID_230267714" MODIFIED="1738535546182" TEXT="Problem: habe dennoch eine Differenzierung zu &#xfc;berwinden">
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1738535524778" ID="ID_2361548" MODIFIED="1738560882286" TEXT="Dispatch hinter dem Zugang">
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1738535532721" ID="ID_230267714" MODIFIED="1738560911866" TEXT="Problem: habe dennoch eine Differenzierung zu &#xfc;berwinden">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1738535562285" ID="ID_1118497200" MODIFIED="1738535589454" TEXT="ich wei&#xdf; zwar jetzt z.B. da&#xdf; das Pattern &#xbb;Manifold&#xab; ist"/>
<node CREATED="1738535590806" ID="ID_1231646271" MODIFIED="1738535609458" TEXT="aber dennoch gibt es zig verschiedene Storage-Layouts">
<node CREATED="1738535610984" ID="ID_1726140591" MODIFIED="1738535619473" TEXT="leider liegt die FeedManifold vorne">
<node CREATED="1738548655151" ID="ID_1737977570" MODIFIED="1738550074388" TEXT="&#x27f9; Konsequenz: das ist zu &#xe4;ndern!">
<node CREATED="1738548655151" ID="ID_1737977570" MODIFIED="1738560928198" TEXT="&#x27f9; Konsequenz: das ist zu &#xe4;ndern!">
<arrowlink COLOR="#535274" DESTINATION="ID_879823577" ENDARROW="Default" ENDINCLINATION="172;0;" ID="Arrow_ID_1583847739" STARTARROW="Default" STARTINCLINATION="172;0;"/>
<arrowlink COLOR="#65537a" DESTINATION="ID_727715872" ENDARROW="Default" ENDINCLINATION="191;-8;" ID="Arrow_ID_503466505" STARTARROW="None" STARTINCLINATION="-157;-252;"/>
<arrowlink COLOR="#394b5f" DESTINATION="ID_727715872" ENDARROW="Default" ENDINCLINATION="191;-8;" ID="Arrow_ID_503466505" STARTARROW="None" STARTINCLINATION="-157;-252;"/>
<icon BUILTIN="yes"/>
</node>
</node>
<node CREATED="1738535630923" ID="ID_225612311" MODIFIED="1738535640350" TEXT="und die hat flexibles Storage-Layout"/>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1738535758756" ID="ID_1713030298" MODIFIED="1738535786660" TEXT="also doch noch eine Art virtueller Dispatch notwendig?">
<node COLOR="#5b280f" CREATED="1738535758756" ID="ID_1713030298" MODIFIED="1738560889987" TEXT="also doch noch eine Art virtueller Dispatch notwendig?">
<icon BUILTIN="help"/>
<icon BUILTIN="button_cancel"/>
<node CREATED="1738535795741" ID="ID_1328646607" MODIFIED="1738535825859" TEXT="z.B. ein Offset zur lib::Several-Storage im Objekt"/>
<node CREATED="1738535844527" ID="ID_1795314602" MODIFIED="1738535867860">
<richcontent TYPE="NODE"><html>
@ -106160,58 +106157,100 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
oder ein Trampolin? aber auf Basis welcher <i>Laufzeit-Information?</i>
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1738535887977" ID="ID_1858101323" MODIFIED="1738535910201" TEXT="RTTI? das w&#xe4;re dann eine VTable &#xbb;durch die HIntert&#xfc;r&#xab;"/>
<node COLOR="#5b280f" CREATED="1738548443595" ID="ID_1995564775" MODIFIED="1738548460221" TEXT="Aufpassen! das Unterfangen ist absurd">
<icon BUILTIN="stop-sign"/>
</node>
</node>
<node CREATED="1738548487461" ID="ID_1252661720" MODIFIED="1738548545033" TEXT="Auf Stuktur-Kongruenz von Templates zur&#xfc;ckf&#xfc;hren">
<node COLOR="#435e98" CREATED="1738548487461" ID="ID_1252661720" MODIFIED="1738560909691">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
Auf <b>Stuktur-Kongruenz</b>&#160;von Templates zur&#252;ckf&#252;hren
</p>
</body>
</html></richcontent>
<icon BUILTIN="forward"/>
<node CREATED="1738548546868" ID="ID_879823577" MODIFIED="1738548679951" TEXT="zus&#xe4;tzliche Einschr&#xe4;nkung: der konkruente Teil mu&#xdf; vorne liegen">
<linktarget COLOR="#535274" DESTINATION="ID_879823577" ENDARROW="Default" ENDINCLINATION="172;0;" ID="Arrow_ID_1583847739" SOURCE="ID_1737977570" STARTARROW="Default" STARTINCLINATION="172;0;"/>
</node>
<node CREATED="1738548590215" ID="ID_116345812" MODIFIED="1738548633404" TEXT="Abgest&#xfc;tzt auf low-Level memory-Layout"/>
</node>
</node>
<node CREATED="1738549919523" ID="ID_727715872" MODIFIED="1738550065466" TEXT="Feed-Manifold mu&#xdf; als Sub-Komponente hinten liegen">
<node COLOR="#338800" CREATED="1738549919523" ID="ID_727715872" MODIFIED="1738560918182" TEXT="Feed-Manifold mu&#xdf; als Sub-Komponente hinten liegen">
<arrowlink COLOR="#4f5888" DESTINATION="ID_682224491" ENDARROW="Default" ENDINCLINATION="-1236;54;" ID="Arrow_ID_1568439843" STARTARROW="None" STARTINCLINATION="760;-597;"/>
<linktarget COLOR="#65537a" DESTINATION="ID_727715872" ENDARROW="Default" ENDINCLINATION="191;-8;" ID="Arrow_ID_503466505" SOURCE="ID_1737977570" STARTARROW="None" STARTINCLINATION="-157;-252;"/>
<linktarget COLOR="#394b5f" DESTINATION="ID_727715872" ENDARROW="Default" ENDINCLINATION="191;-8;" ID="Arrow_ID_503466505" SOURCE="ID_1737977570" STARTARROW="None" STARTINCLINATION="-157;-252;"/>
<icon BUILTIN="button_ok"/>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1738550080458" ID="ID_747266264" MODIFIED="1738550094964" TEXT="der Code wird dadurch sogar klarer">
<icon BUILTIN="ksmiletris"/>
</node>
</node>
<node CREATED="1738552709748" ID="ID_751195601" MODIFIED="1738552716264" TEXT="Fragen der Code-Anordnung">
<node CREATED="1738552717851" ID="ID_908526926" MODIFIED="1738552724655" TEXT="brauche einen Low-Level-Accessor">
<node COLOR="#338800" CREATED="1738552709748" ID="ID_751195601" MODIFIED="1738560950089" TEXT="Fragen der Code-Anordnung">
<icon BUILTIN="yes"/>
<node COLOR="#435e98" CREATED="1738552717851" ID="ID_908526926" MODIFIED="1738560939158" TEXT="brauche einen Low-Level-Accessor">
<node CREATED="1738552736209" ID="ID_1882145435" MODIFIED="1738552743647" TEXT="dieser mu&#xdf; eine ProcID auswerten"/>
<node CREATED="1738552744901" ID="ID_1314938956" MODIFIED="1738552763205" TEXT="und sich au&#xdf;erdem Zugang verschaffen zu Internas der Weaving-Pattern"/>
<node CREATED="1738552764381" ID="ID_1858078710" MODIFIED="1738552782990" TEXT="letztere m&#xfc;ssen diesen Zugang per friend-Klausel gestatten"/>
<node CREATED="1738553451159" ID="ID_1113348900" MODIFIED="1738553459220" TEXT="sehr einfach m&#xf6;glich per std::tie()"/>
<node CREATED="1738553451159" ID="ID_1113348900" MODIFIED="1738560667981" TEXT="sehr einfach m&#xf6;glich per std::tie()">
<linktarget COLOR="#406f7e" DESTINATION="ID_1113348900" ENDARROW="Default" ENDINCLINATION="257;0;" ID="Arrow_ID_1008150861" SOURCE="ID_1723382198" STARTARROW="None" STARTINCLINATION="41;-120;"/>
</node>
<node CREATED="1738552789850" ID="ID_644134927" MODIFIED="1738552809755" TEXT="die Implementierung mu&#xdf; in eine zentrale Translation-Unit">
</node>
<node COLOR="#435e98" CREATED="1738552789850" ID="ID_644134927" MODIFIED="1738560942998" TEXT="die Implementierung mu&#xdf; in eine zentrale Translation-Unit">
<node CREATED="1738552837650" ID="ID_752093610" MODIFIED="1738552856045" TEXT="dort m&#xfc;ssen die relevanten Weaving-Pattern-Templates includiert werden">
<icon BUILTIN="messagebox_warning"/>
</node>
<node CREATED="1738552858806" ID="ID_499744765" MODIFIED="1738552870057" TEXT="sie werden dann aber pseudo-instantiiert">
<icon BUILTIN="idea"/>
<node CREATED="1738552872971" ID="ID_256800788" MODIFIED="1738552881315" TEXT="mit minimalen Dummy-TemplateParametern"/>
<node CREATED="1738552872971" ID="ID_256800788" MODIFIED="1738561213189" TEXT="mit minimalen Dummy-TemplateParametern">
<arrowlink COLOR="#5795ce" DESTINATION="ID_1797279581" ENDARROW="Default" ENDINCLINATION="59;-122;" ID="Arrow_ID_1406281476" STARTARROW="None" STARTINCLINATION="-557;0;"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1738552882437" ID="ID_771316935" MODIFIED="1738552911482" TEXT="und nur f&#xfc;r den Zweck eines Zugriffs per force-cast">
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
<node CREATED="1738552811335" ID="ID_368510579" MODIFIED="1738554265379" TEXT="naheliegend &#x27f9; proc-node.cpp"/>
</node>
<node CREATED="1738554274264" ID="ID_1338521694" MODIFIED="1738554285164" TEXT="brauche Zugang analog zum Turnout">
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1738554274264" ID="ID_1338521694" MODIFIED="1738560961355" TEXT="brauche Zugang analog zum Turnout">
<icon BUILTIN="yes"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1738554286652" ID="ID_1902684381" MODIFIED="1738554316908" TEXT="aber keine Turnout-Instanz">
<icon BUILTIN="stop-sign"/>
<node CREATED="1738554325674" ID="ID_767810587" MODIFIED="1738554361577" TEXT="Emittieren der Turnout::weave()-Implementierung verhindern"/>
<node CREATED="1738554362767" ID="ID_611361455" MODIFIED="1738554377327" TEXT="brauche aber eine Layout-Kompatible Klasse"/>
</node>
<node CREATED="1738554382342" ID="ID_101038988" MODIFIED="1738554399656" TEXT="Wartbarkeit &#x27f9; mu&#xdf; direkt neben Turnout stehen">
<node BACKGROUND_COLOR="#e1d1b0" COLOR="#435e98" CREATED="1738554382342" ID="ID_101038988" MODIFIED="1738560714175" TEXT="Wartbarkeit &#x27f9; mu&#xdf; direkt neben Turnout stehen">
<icon BUILTIN="yes"/>
</node>
<node CREATED="1738554409011" ID="ID_905079961" MODIFIED="1738554415618" TEXT="class TurnoutDiagnostic"/>
<node COLOR="#338800" CREATED="1738554409011" ID="ID_905079961" MODIFIED="1738560582334" TEXT="class TurnoutDiagnostic">
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1738560584438" ID="ID_1231354688" MODIFIED="1738560603287" TEXT="leere weave()-Implementierung">
<icon BUILTIN="idea"/>
</node>
<node COLOR="#435e98" CREATED="1738560605290" ID="ID_1723382198" MODIFIED="1738560681405" TEXT="accessInternal &#x27f6; delegiert auf den Low-Level-Accessor im Pattern">
<arrowlink COLOR="#406f7e" DESTINATION="ID_1113348900" ENDARROW="Default" ENDINCLINATION="257;0;" ID="Arrow_ID_1008150861" STARTARROW="None" STARTINCLINATION="41;-120;"/>
<icon BUILTIN="forward"/>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1738560736897" ID="ID_1797279581" MODIFIED="1738561206068" 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"/>
<node CREATED="1738560756846" ID="ID_1546561363" MODIFIED="1738561090267">
<richcontent TYPE="NODE"><html>
<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>
<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>
</node>
@ -106241,6 +106280,24 @@ 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()">
<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">
<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>
</node>
</node>
<node CREATED="1738561278208" ID="ID_1119065009" MODIFIED="1738561290442" TEXT="Adapter / Bequemer Zugang">
<node CREATED="1738561292661" ID="ID_763639641" MODIFIED="1738561316255" TEXT="von PortDiagnostic &#x27fc; PortDiagnostic"/>
<node CREATED="1738561572212" ID="ID_533015904" MODIFIED="1738561581287" TEXT="von NodeDiagnostic &#x27fc; PortDiagnostic"/>
</node>
</node>
</node>
@ -106286,6 +106343,10 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1736610811589" ID="ID_745350162" LINK="#ID_238141567" MODIFIED="1736611024746" TEXT="Port connectivity">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1738561050694" ID="ID_480573349" MODIFIED="1738561636218" TEXT="Zugriff via &#xbb;Backdoor&#xab; auf die Predecessor-Ports">
<arrowlink COLOR="#587793" DESTINATION="ID_866197683" ENDARROW="Default" ENDINCLINATION="140;240;" ID="Arrow_ID_1588669375" STARTARROW="None" STARTINCLINATION="462;-13;"/>
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1730486716299" ID="ID_95149323" MODIFIED="1730486959772" STYLE="fork" TEXT="Storage bedarf gesondert der Betrachtung">