Invocation: provide functionality to connect lead ports explicitly

...which then also allow to fill in the missing parts for the
default 1:1 wiring scheme, which connects each »input slot«
of the processing function with the corresponding ''lead node''
This commit is contained in:
Fischlurch 2024-10-25 18:13:55 +02:00
parent 43373e11e7
commit d91d0b5926
5 changed files with 189 additions and 229 deletions

View file

@ -92,11 +92,14 @@
#define ENGINE_NODE_BUILDER_H
#include "lib/error.hpp"
#include "lib/nocopy.hpp"
#include "steam/engine/weaving-pattern-builder.hpp"
#include "steam/engine/proc-node.hpp"
#include "steam/engine/turnout.hpp"
#include "lib/several-builder.hpp"
#include "lib/nocopy.hpp"
#include "lib/format-string.hpp"
#include "lib/iter-index.hpp"
#include "lib/test/test-helper.hpp"/////////////////////TODO TOD-oh
#include <utility>
@ -105,9 +108,11 @@
namespace steam {
namespace engine {
namespace err = lumiera::error;
using std::move;
using util::_Fmt;
using std::forward;
using std::move;
namespace { // default policy configuration to use heap allocator
@ -299,38 +304,56 @@ namespace engine {
return move(*this);
}
/** connect the next input slot to existing lead-node given by index */
PortBuilder
connectLead (uint idx)
{
UNIMPLEMENTED ("connect the next input slot to existing lead-node given by index");
return move(*this);
return connectLeadPort (idx, this->defaultPort_);
}
/** connect the next input slot to either existing or new lead-node" */
PortBuilder
conectLead (ProcNode& leadNode)
{
UNIMPLEMENTED ("connect the next input slot to either existing or new lead-node");
return move(*this);
return connectLeadPort (leadNode, this->defaultPort_);
}
/** connect next input to lead-node, using a specific port-number */
PortBuilder
connectLeadPort (uint idx, uint port)
{
UNIMPLEMENTED ("connect next input to lead-node, using a specific port-number");
if (idx >= _Par::leads_.size())
throw err::Logic{_Fmt{"Builder refers to lead-node #%d, yet only %d are currently defined."}
% idx % _Par::leads_.size()
,LERR_(INDEX_BOUNDS)
};
weavingBuilder_.attachToLeadPort (_Par::leads_[idx], port);
return move(*this);
}
/** connect next input to existing or new lead-node, with given port-number */
PortBuilder
connectLeadPort (ProcNode& leadNode, uint port)
{
UNIMPLEMENTED ("connect next input to existing or new lead-node, with given port-number");
uint knownEntry{0};
for (auto& lead : lib::IterIndex{_Par::leads_})
if (util::isSameObject (leadNode, lead))
break;
else
++knownEntry;
if (knownEntry == _Par::leads_.size())
_Par::addLead (leadNode);
ENSURE (knownEntry < _Par::leads_.size());
weavingBuilder_.attachToLeadPort (knownEntry, port);
return move(*this);
}
/** use given port-index as default for all following connections */
PortBuilder
useLeadPort (uint defaultPort)
{
UNIMPLEMENTED ("use given port-index as default for all following connections");
this->defaultPort_ = defaultPort;
return move(*this);
}
@ -341,7 +364,7 @@ namespace engine {
auto
completePort()
{
//////////////////////////////////////////////////////////OOO need to provide all links to lead nodes here
weavingBuilder_.connectRemainingInputs (_Par::leads_, this->defaultPort_);
weavingBuilder_.fillRemainingBufferTypes();
return NodeBuilder{static_cast<NodeBuilder<POL,DAT>&&> (*this) // slice away PortBulder subclass data
,weavingBuilder_.sizMark
@ -353,7 +376,7 @@ namespace engine {
PortBuilder(_Par&& base, FUN&& fun)
: _Par{move(base)}
, weavingBuilder_{forward<FUN> (fun), _Par::leads_.policyConnect()}
, defaultPort_{0} ////////////////////////////////////////////////////////////////OOO brauche separaten Zähler! wo?
, defaultPort_{_Par::patternData_.size()}
{ }
friend class PortBuilderRoot<POL,DAT>;

View file

@ -53,6 +53,7 @@
#include "steam/engine/turnout-system.hpp"
#include "lib/frameid.hpp"
#include "lib/ref-array.hpp" /////////////////////OOO phase out
#include "lib/format-string.hpp"
#include "lib/several.hpp"
#include <vector>
@ -62,10 +63,12 @@
namespace steam {
namespace engine {
namespace err = lumiera::error;
using std::move;
using std::vector; //////////////TODO;
using lumiera::NodeID;
using util::_Fmt;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1367 : Rebuild the Node Invocation
class ProcNode;
@ -180,7 +183,11 @@ namespace engine {
Port&
getPort (uint portIdx)
{
REQUIRE (portIdx <= wiring_.ports.size());
if (portIdx >= wiring_.ports.size())
throw err::Logic{_Fmt{"Accessing node-port #%d, while only %d ports are defined."}
% portIdx % wiring_.ports.size()
,LERR_(INDEX_BOUNDS)
};
return wiring_.ports[portIdx];
}

View file

@ -310,6 +310,8 @@ namespace engine {
{
BUILD buildEntry;
uint size() { return 1 + PAR::size(); }
template<class DAB>
void
collectEntries (DAB& dataBuilder, uint cntElm =0, uint maxSiz =0)
@ -331,6 +333,8 @@ namespace engine {
*/
struct PatternDataAnchor
{
uint size() { return 0; }
template<class DAB>
void
collectEntries (DAB& dataBuilder, uint cntElm, uint maxSiz)
@ -373,18 +377,18 @@ namespace engine {
, fun_{move(init)}
{ }
WeavingBuilder
attachToLeadPort(ProcNode& lead, uint portNr)
WeavingBuilder&&
attachToLeadPort (ProcNode& lead, uint portNr)
{
PortRef portRef{lead.getPort (portNr)};
leadPorts.append (portRef);
ENSURE (leadPorts.size() <= N);
ENSURE (leadPorts.size() <= N); /////////////////////////////////////OOO must throw exception here, since bounds can be violated by API usage
return move(*this);
}
template<class BU>
WeavingBuilder
appendBufferTypes(uint cnt)
WeavingBuilder&&
appendBufferTypes (uint cnt)
{
while (cnt--)
buffTypes.emplace_back([](BufferProvider& provider)
@ -393,7 +397,7 @@ namespace engine {
return move(*this);
}
WeavingBuilder
WeavingBuilder&&
fillRemainingBufferTypes()
{
auto constexpr FAN_O = FunSpec::FAN_O;
@ -402,8 +406,20 @@ namespace engine {
return appendBufferTypes<BuffO>(cnt);
}
WeavingBuilder
selectResultSlot(uint idx)
WeavingBuilder&&
connectRemainingInputs (DataBuilder<POL, ProcNodeRef>& knownLeads, uint defaultPort)
{
auto constexpr FAN_I = FunSpec::FAN_I;
REQUIRE (leadPorts.size() <= FAN_I);
uint cnt = FAN_I - leadPorts.size();
REQUIRE (leadPorts.size() + cnt <= knownLeads.size()); ////////////////////OOO determine if this should also be rather an exception?
while (cnt--)
attachToLeadPort (knownLeads[leadPorts.size()], defaultPort);
return move(*this);
}
WeavingBuilder&&
selectResultSlot (uint idx)
{
this->resultSlot = idx;
return move(*this);

View file

@ -78,9 +78,9 @@ namespace test{
/*****************************************************************//**
* @test demonstrate and cover the properties of IterCursor.
* This wrapper allows to change between iterating forward and backwards.
/************************************************************************//**
* @test verify adapter to iterate and navigate over array-like content,
* that can be accessed through subscript operator and `size()` function.
*
* @see iter-cursor.hpp
* @see iter-adapter.hpp

View file

@ -9322,9 +9322,7 @@
</node>
<node CREATED="1512844696922" FOLDED="true" ID="ID_396632754" MODIFIED="1561827469129" TEXT="zus&#xe4;tzlicher Dekorator">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...setzt eigentliche Expand-Operation darunter voraus
@ -9503,9 +9501,7 @@
<node CREATED="1512439845112" ID="ID_751119405" MODIFIED="1512439849499" TEXT="geht nicht"/>
<node CREATED="1512439850087" ID="ID_1018141727" MODIFIED="1512440143615">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
das IterStateWrapper-API ist <i>optimal</i>
@ -9575,9 +9571,7 @@
</node>
<node CREATED="1512440238859" ID="ID_1975957673" MODIFIED="1512440262159" TEXT="wir brauchen hier gar keinen &quot;Extension Point&quot;">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
ganz anders als bei IterAdapter, wo das Sinn macht...
@ -9692,9 +9686,7 @@
</node>
<node CREATED="1512794183629" ID="ID_783686672" MODIFIED="1512794297194" TEXT="inzwischen ein Workaround">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<ul>
<li>
@ -10027,9 +10019,7 @@
</node>
<node CREATED="1512706162921" ID="ID_601609235" MODIFIED="1512706394332" TEXT="ab C++17 ist das anders">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...dort wird einfach on-demand in der Basisklasse nachgeschaut.
@ -10049,9 +10039,7 @@
</node>
<node CREATED="1512706405155" ID="ID_1013782130" MODIFIED="1512706515474">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
Allerdings gen&#252;gt es, dies an <i>einer</i>&#160;Stelle in der Kette zu erg&#228;nzen
@ -10059,9 +10047,7 @@
</body>
</html></richcontent>
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...und zwar genau dort, wo erstmals ein Basis-Objekt akzeptiert wird.
@ -10077,9 +10063,7 @@
</node>
<node CREATED="1512706516628" ID="ID_1092840037" MODIFIED="1512706656273">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
&#252;brigens ist es im IterSource&lt;T&gt;::iterator <i>nicht</i>&#160; notwendig
@ -10154,9 +10138,7 @@
<node CREATED="1512789847183" ID="ID_1699957562" MODIFIED="1512789865193" TEXT="es sollte sich am &quot;state core&quot;-Schema orientieren"/>
<node CREATED="1512789870516" ID="ID_1318870340" LINK="http://issues.lumiera.org/ticket/1125" MODIFIED="1512794035043">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
Ticket machen: <font color="#b90736">#1125</font>
@ -10501,9 +10483,7 @@
</node>
<node CREATED="1512621383815" FOLDED="true" ID="ID_1705587551" MODIFIED="1561827469131" TEXT="Problem: shallow copy">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
rein ein Problem mit der Test-Fixture.
@ -10663,9 +10643,7 @@
<node CREATED="1513036452217" ID="ID_526681708" MODIFIED="1513036460131" TEXT="permutierte, iterierbare Kopie dieser"/>
<node CREATED="1513036690929" ID="ID_956797377" LINK="http://en.cppreference.com/w/cpp/algorithm/random_shuffle" MODIFIED="1513036739059">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
siehe <font color="#4423e3"><b>std::shuffle</b></font>
@ -11133,9 +11111,7 @@
<node CREATED="1513564496228" ID="ID_559674728" MODIFIED="1513564503503" TEXT="wird erst hinter IterSource konform"/>
<node CREATED="1513564546974" ID="ID_301275475" MODIFIED="1513887480560" TEXT="wirklich relevantes Problem">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...weil es mutma&#223;lich
@ -11167,9 +11143,7 @@
</node>
<node CREATED="1513859477704" FOLDED="true" ID="ID_1667428111" MODIFIED="1525124214849">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
Expand-Funktor hat <i>einen</i>&#160;R&#252;ckgabe-Typ
@ -11307,9 +11281,7 @@
</body>
</html></richcontent>
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...will sagen
@ -11407,9 +11379,7 @@
<node CREATED="1513962370870" ID="ID_1858133966" MODIFIED="1513962394590" TEXT="in einen komplett generischen Iterator-Typ"/>
<node CREATED="1514086892237" ID="ID_1709677569" MODIFIED="1514087030296" TEXT="depth() bleibt vorerst relativ">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...mal sehen, ob wir jemals daran ansto&#223;en...
@ -11422,9 +11392,7 @@
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
<node CREATED="1513961791716" FOLDED="true" ID="ID_996099359" MODIFIED="1561827469134" TEXT="zus&#xe4;tzliche Heap-Alloc f&#xfc;r jedes Expand">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
gemeint ist,
@ -11501,9 +11469,7 @@
<node CREATED="1513966819268" ID="ID_725108588" MODIFIED="1513966823134" TEXT="hier aber wohl einfacher"/>
<node CREATED="1513966826779" ID="ID_806221726" MODIFIED="1513966853280" TEXT="k&#xf6;nnte blueprint sein??">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
IterSource mu&#223; insgesamt besser erweiterbar werden....
@ -11519,9 +11485,7 @@
<node CREATED="1513980786024" ID="ID_906988400" MODIFIED="1513980803442" TEXT="front-End ist IterExploreSource, ohne Wenn und Aber"/>
<node CREATED="1513980816020" ID="ID_1544667042" MODIFIED="1513980839954">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
der Expander sitzt nun doch <i>dahinter,</i>&#160;in der Implementierung
@ -11544,9 +11508,7 @@
<node CREATED="1513981215822" ID="ID_1059471923" MODIFIED="1513981236247" TEXT="welcher das TreeStructureNavigator-Interface nutzt"/>
<node CREATED="1513981274958" ID="ID_895258746" MODIFIED="1513981289179">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
das Ergebnis ist der <b>konkrete Iterator-Typ</b>
@ -11632,9 +11594,7 @@
</node>
<node COLOR="#338800" CREATED="1514257226775" ID="ID_813552503" MODIFIED="1514260900863" TEXT="workaround: mitlauschen...">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
Wire-Tap-Implementierung
@ -11657,9 +11617,7 @@
<node CREATED="1514291765589" ID="ID_1350779896" MODIFIED="1514291778528" TEXT="(tree,depth) ist eine Art Koordinate hier"/>
<node CREATED="1514291781156" ID="ID_1324645338" MODIFIED="1514291796321">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
das hei&#223;t, depth ist <i>aktuelle</i>&#160;Tiefe!
@ -11756,9 +11714,7 @@
<node CREATED="1514338641730" ID="ID_878171387" MODIFIED="1514908827233" TEXT="scheduleExpansion()"/>
<node BACKGROUND_COLOR="#e2f2c8" CREATED="1514827974184" ID="ID_1774080036" MODIFIED="1514908873138">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
ist <i>partielle </i>L&#246;sung
@ -11778,9 +11734,7 @@
<node CREATED="1514828365236" ID="ID_596741108" MODIFIED="1514828377582" TEXT="per Seiteneffekt auf den privaten Resolver-state"/>
<node CREATED="1514828408694" ID="ID_360791024" MODIFIED="1514828619139">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
<i>Ergebnis-Ausgabe </i>ist die jeweilige m&#246;gliche Coverage
@ -11832,9 +11786,7 @@
</node>
<node COLOR="#338800" CREATED="1514942372976" ID="ID_1541868169" MODIFIED="1515034395295" TEXT="feststellen, ob coverage real oder m&#xf6;glich">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...insofern wir nur eine (partielle) L&#246;sung signalisieren,
@ -12015,9 +11967,7 @@
</node>
<node COLOR="#990000" CREATED="1514829238960" FOLDED="true" ID="ID_1556354374" MODIFIED="1576282358121" TEXT="Varianten definieren">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
YAGNI
@ -12079,9 +12029,7 @@
</node>
<node COLOR="#338800" CREATED="1514942216013" ID="ID_1147733516" MODIFIED="1515034537518" TEXT="Pr&#xe4;dikate spiegeln stets den Zustand der UI-Coord">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...und nicht den <i>m&#246;glichen</i>&#160;Zustand.
@ -12205,9 +12153,7 @@
<node CREATED="1515120863655" ID="ID_1222552441" MODIFIED="1518487921065" TEXT="werden stets schon vom Konstrukor bereinigt"/>
<node COLOR="#338800" CREATED="1515120874318" ID="ID_282902710" MODIFIED="1518487921065">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
kann jedoch demonstrieren,
@ -12345,9 +12291,7 @@
<icon BUILTIN="button_ok"/>
<node CREATED="1508538979935" ID="ID_1139910958" MODIFIED="1576282358119" TEXT="immer explizit">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...das hei&#223;t: keine Wildcards, keine pseudo-Specs (currentWindow)
@ -12363,9 +12307,7 @@
<node CREATED="1508619329420" ID="ID_360997488" MODIFIED="1508619334447" TEXT="in: expliziter Pfad"/>
<node CREATED="1508619335131" ID="ID_327874233" MODIFIED="1576282358119" TEXT="out: Anker-Literal">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
Zweck ist vor allem, meta-Specs wie firstWindow, currentWindow aufzul&#246;sen
@ -12388,9 +12330,7 @@
</node>
<node CREATED="1509319992204" HGAP="60" ID="ID_258976142" MODIFIED="1576282358118" TEXT="prototypische Implementierung...." VSHIFT="21">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...verwendet einen GenNode-Tree
@ -12405,9 +12345,7 @@
</node>
<node CREATED="1506957414370" ID="ID_848105210" MODIFIED="1518487921066">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
Integration ViewLocator
@ -12430,9 +12368,7 @@
<node CREATED="1515884183937" ID="ID_1146786067" MODIFIED="1518487921066" TEXT="explizit per Typ"/>
<node CREATED="1515884193464" ID="ID_680693474" MODIFIED="1533608413664">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
aber auch: <b>Resolver</b>
@ -12459,9 +12395,7 @@
</node>
<node CREATED="1515885762754" ID="ID_657098401" MODIFIED="1576282358118" TEXT="ist OK">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
die Regel ist:
@ -12485,9 +12419,7 @@
<node CREATED="1515884955620" ID="ID_1330012545" MODIFIED="1518487921066" TEXT="manipuliert Zustand, nicht Struktur"/>
<node CREATED="1515885006181" ID="ID_150080053" MODIFIED="1518487921066">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
implementiert <b>LocationQuery</b>
@ -12520,9 +12452,7 @@
<node CREATED="1515877545642" ID="ID_1723275956" MODIFIED="1518487921066" TEXT="lebt in der Implementierung"/>
<node CREATED="1515877577414" ID="ID_664776417" MODIFIED="1576282358117" TEXT="Bausteine sind sichtbar...">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...als Namespace-globale Variable mit externer Linkage
@ -12532,9 +12462,7 @@
</node>
<node COLOR="#435e98" CREATED="1523117792890" ID="ID_1972679538" MODIFIED="1576282358117" TEXT="Effizienz m&#xe4;&#xdf;ig/unkritisch">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
Ein Lookup-Vorgang ist schon ehr aufwendig,
@ -12585,9 +12513,7 @@
<node CREATED="1522809068294" ID="ID_1952538901" MODIFIED="1522809098365" TEXT="LocatorSpec in der DSL hat ein Depend&lt;UILocationSolver&gt;"/>
<node CREATED="1522809099593" ID="ID_627167110" MODIFIED="1522809142602">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
...welcher wiederum von ViewLocator <i>betrieben</i>
@ -12679,9 +12605,7 @@
<node CREATED="1516148190821" ID="ID_1390287231" MODIFIED="1518487921067" TEXT="Koordinaten-Erg&#xe4;nzung mu&#xdf; im Locator erfolgen"/>
<node CREATED="1516909726125" ID="ID_1451248007" MODIFIED="1518487921067">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
<b>existing()</b>&#160;sollte <i>default</i>&#160;sein und <b>create()</b>&#160;explizit anzufordern
@ -12689,9 +12613,7 @@
</body>
</html></richcontent>
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
weil der gr&#246;&#223;te Teil aller real anzugebenden Regel-Klauseln
@ -12717,9 +12639,7 @@
<icon BUILTIN="yes"/>
<node CREATED="1516916468901" ID="ID_1527047531" MODIFIED="1518487921067">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
<i>komplett definierter</i>&#160;Pfad incl Zielobjekt
@ -12729,9 +12649,7 @@
</node>
<node CREATED="1516916496673" ID="ID_1162890109" MODIFIED="1518487921067">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
ggfs wird <i>h&#246;chstes ein abschlie&#223;endes</i>&#160;Element hinzugef&#252;gt
@ -12741,9 +12659,7 @@
</node>
<node CREATED="1516916543155" ID="ID_458920753" MODIFIED="1518487921067">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
dieser Pfad ist stets <i>anchored</i>&#160;und <i>partially covered</i>
@ -12768,9 +12684,7 @@
<icon BUILTIN="info"/>
<node CREATED="1517011717447" ID="ID_1098719627" MODIFIED="1518487921067" TEXT="da&#xdf; es typischerweise nur eine Perspektive gibt">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
zwar k&#246;nnte es (sp&#228;ter mal) sein,
@ -12802,9 +12716,7 @@
</node>
<node CREATED="1517011745635" ID="ID_1001739741" MODIFIED="1518487921067" TEXT="aber dies einen Wildcard zur Folge hat, der eine L&#xf6;sung verhindern kann">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...und zwar genau dann, wenn bereits die n&#228;chste Komponente unterhalb der Perspektive,
@ -12840,9 +12752,7 @@
<node CREATED="1517012382901" FOLDED="true" ID="ID_273084853" MODIFIED="1561827469153" TEXT="Pro">
<node CREATED="1517012386556" ID="ID_391025327" MODIFIED="1518487921068" TEXT="funktioniert zuverl&#xe4;ssig">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...sofern es stets eine Perspektive geben mu&#223;
@ -12884,9 +12794,7 @@
</node>
<node CREATED="1517012879513" ID="ID_391823235" MODIFIED="1518487921068" TEXT="mu&#xdf; sowiso noch nachimplementiert werden">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
<i>&quot;mu&#223;&quot;</i>&#160;ist relativ, denn mit den bisherigen Anforderungen
@ -12905,9 +12813,7 @@
</node>
<node CREATED="1517012889559" ID="ID_1411847979" MODIFIED="1518487921068" TEXT="f&#xfc;gt sich organisch in die Implementierung ein">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
Die korrekte Semantik f&#228;llt uns hier wirklich in den Scho&#223;,
@ -12923,9 +12829,7 @@
<node CREATED="1517012996289" ID="ID_251225300" MODIFIED="1518487921068" TEXT="magisch und subtil"/>
<node CREATED="1517013001144" ID="ID_711459982" MODIFIED="1518487921068" TEXT="zwei verschiedene Wildcards">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
wobei einer, n&#228;mlich '*' sehr offensichtlich und bekannt ist,
@ -12938,9 +12842,7 @@
</node>
<node CREATED="1517013053265" ID="ID_1569479466" MODIFIED="1518487921068" TEXT="gewisses Mi&#xdf;brauchs-Potential">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...weil es eigentlich ein Wildcard ist,
@ -12956,9 +12858,7 @@
</node>
<node CREATED="1517013164050" ID="ID_623452791" MODIFIED="1518487921068" TEXT="mehrfach-L&#xf6;sungen nicht offensichtlich">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
Korrekter Gebrauch setzt eigentlich voraus,
@ -13002,9 +12902,7 @@
<icon BUILTIN="button_cancel"/>
<node CREATED="1517018164354" ID="ID_308763864" MODIFIED="1518487921068" TEXT="w&#xfc;rde theoretisch gehen...">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
blo&#223; w&#252;rde sich die Signatur der DSL-Bausteine &#228;ndern:
@ -13033,9 +12931,7 @@
</node>
<node CREATED="1517018198398" ID="ID_986073860" MODIFIED="1518487921068" TEXT="sonst mu&#xdf; man halt noch mal traversieren">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
Der Punkt ist: das ist eine reine Lauzeit/Effzienz-&#220;berlegung.
@ -13074,9 +12970,7 @@
</node>
<node CREATED="1517018183472" ID="ID_1424416822" MODIFIED="1518487921068" TEXT="als Optimierung auf sp&#xe4;ter vertagt...">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
das ist der klassische Fall, wo man wegen einer solchen Optimierung
@ -13105,9 +12999,7 @@
</node>
<node CREATED="1518658902747" FOLDED="true" ID="ID_976555378" MODIFIED="1576282358116" TEXT="entspricht der Unifikation in Logik-Programmierung">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...insofern auch dort
@ -13153,9 +13045,7 @@
<node CREATED="1517084664528" ID="ID_749914799" MODIFIED="1518487921068" TEXT="wir traversieren / matchen erneut"/>
<node CREATED="1517084673487" ID="ID_114406974" MODIFIED="1518487921068" TEXT="Optimierung w&#xe4;re ein View-Index">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
das ist eine typische, rein lokale Optimierung (Speicher vs CPU)
@ -13186,9 +13076,7 @@
<icon BUILTIN="idea"/>
<node CREATED="1517504917464" ID="ID_708832973" MODIFIED="1518487921068">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
es gibt <i>nur einen</i>&#160;&quot;Locator&quot;
@ -13246,9 +13134,7 @@
<node CREATED="1517021372159" FOLDED="true" ID="ID_841350723" MODIFIED="1561827483830" TEXT="location">
<node CREATED="1518840121972" ID="ID_989066633" MODIFIED="1522938419001">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
ein <b>LocationSolver</b>
@ -13259,9 +13145,7 @@
</node>
<node CREATED="1517021326957" ID="ID_20403834" MODIFIED="1522938411626">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
<b>LocationQuery</b>&#160;qua Navigator
@ -13272,9 +13156,7 @@
</node>
<node CREATED="1517021298929" ID="ID_621970077" MODIFIED="1518487921069">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
...die es <i>hinten herum</i>&#160;bekommt
@ -13287,9 +13169,7 @@
<node CREATED="1517021395067" ID="ID_1609814715" MODIFIED="1518487921069" TEXT="die konkreten Allokatoren"/>
<node CREATED="1517021415017" ID="ID_1692689619" MODIFIED="1522938396840">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
sehen <b>ViewLocator</b>-API
@ -48665,9 +48545,7 @@
</node>
<node CREATED="1456425930718" ID="ID_1301765327" MODIFIED="1456437520772" TEXT="real-Daten im DOM">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
damit das DOM ein echtes DOM ist, mu&#223; es die relevanten real-Daten duplizieren,
@ -49393,9 +49271,7 @@
</node>
<node CREATED="1582390900917" ID="ID_1137278126" MODIFIED="1582390969068" TEXT="ID (Bus-Term-ID) bekommt man per getID()">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
anfangs hatte ich da eine implizite Konvertierung. Man konnte schreiben ID{xyz}. Das war cool; und verwirrend; und hat jede Menge &#196;rger gemacht, wie immer
@ -49906,9 +49782,7 @@
<node CREATED="1448070618434" ID="ID_1925738380" MODIFIED="1557498707235" TEXT="Zuordnung">
<node CREATED="1448406963801" ID="ID_1506114314" MODIFIED="1557498707235">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
Bus-Design is <b>selbst&#228;hnlich</b>
@ -50079,9 +49953,7 @@
</node>
<node CREATED="1453546268998" ID="ID_1692848170" MODIFIED="1576282358004" TEXT="Event-Log">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
Mechanismus, der es erlaubt
@ -50358,9 +50230,7 @@
</node>
<node CREATED="1453590628419" ID="ID_1314031268" MODIFIED="1453590885601">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
wir verwenden die Basis-VTable
@ -88400,8 +88270,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
...denn es sind noch die flexiblen Strategy-Templates dar&#252;ber gelegt, und au&#223;erdem hatte ich den eigentlichen Allocator nur als protected-Mix-in eingebettet &#8212; und deshalb wird der f&#252;r einen normalen (generierten) copy-Konstruktor nicht in sichtbar; kopiert w&#252;rde ja auf dem gesamten (zusammengesetzten) Strategy-Template, und das h&#228;ngt nominell durchaus vom Element-Typ ab, der aber in diesem Fall, beim Weitergeben einer Initialisierung, durchaus variabel sein kann (nur der Basis-Allokator ist stets kompatibel)
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<arrowlink COLOR="#835537" DESTINATION="ID_771040034" ENDARROW="Default" ENDINCLINATION="14;-51;" ID="Arrow_ID_53225453" STARTARROW="None" STARTINCLINATION="-75;7;"/>
<icon BUILTIN="stop-sign"/>
</node>
@ -88430,8 +88299,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
damit man von einem existierenden SeveralBuilder ausgehend weiter verdrahten kann
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1729817449159" ID="ID_1426982286" MODIFIED="1729817506616" TEXT="mu&#xdf; den durchgereichten ctor von der ElementFactory flexibel machen">
@ -88445,8 +88313,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<i>Konzeptionell </i>ist das Strategy-Template offen angelegt, aber <i>in der tats&#228;chlichen Implementierung</i>&#160;d&#252;rfte seine Rolle inzwischen weitgehend festgelegt sein. Und in diesem aktuellen Gebrauch spielt der Element-Typ nur eine Rolle zur Ansteuerung des Allocators, und auch die Konstruktor-Argumente werden komplett von oben bis auf die Basis-Ebene durchgereicht. Da zudem der Basis-Allocator an den C++-Standard angelehnt ist, kann man unterstellen, da&#223; sich praktisch immer ein passender Alocator f&#252;r einen anderen als den gegebenen Element-Typ konstruieren l&#228;&#223;t.
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<icon BUILTIN="yes"/>
</node>
</node>
@ -90505,19 +90372,18 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
weil nur der PortBuilder seine eigene Position erschlie&#223;en kann (weil er auf den geerbten DataBuilder zugreifen kann)
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<linktarget COLOR="#636e77" DESTINATION="ID_1876187632" ENDARROW="Default" ENDINCLINATION="95;-2208;" ID="Arrow_ID_508627026" SOURCE="ID_322570697" STARTARROW="None" STARTINCLINATION="-946;47;"/>
<icon BUILTIN="button_cancel"/>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1729824794902" ID="ID_773941137" MODIFIED="1729824924642" TEXT="nein: sogar eine Ebene h&#xf6;her?">
<node COLOR="#435e98" CREATED="1729824794902" ID="ID_773941137" MODIFIED="1729868602025" TEXT="nein: sogar eine Ebene h&#xf6;her?">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1729824942675" ID="ID_1214779054" LINK="#ID_1804465000" MODIFIED="1729825085282" TEXT="der DataBuilder f&#xfc;r die Ports ist nun transient">
<icon BUILTIN="broken-line"/>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1729825097094" ID="ID_675110705" MODIFIED="1729825121710" TEXT="nochmal eine weitere tempor&#xe4;re Variable einf&#xfc;hren??">
<node COLOR="#435e98" CREATED="1729825097094" ID="ID_675110705" MODIFIED="1729868587491" TEXT="nochmal eine weitere tempor&#xe4;re Variable einf&#xfc;hren??">
<icon BUILTIN="help"/>
<node CREATED="1729825128179" ID="ID_26277636" MODIFIED="1729825177117" TEXT="man k&#xf6;nnte das default-Setting mi&#xdf;brauchen">
<node COLOR="#5b280f" CREATED="1729825128179" ID="ID_26277636" MODIFIED="1729868509542" TEXT="man k&#xf6;nnte das default-Setting mi&#xdf;brauchen">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
@ -90525,10 +90391,58 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
d.h. der Default w&#252;rde mit hochgez&#228;hlt, kann aber per Setter auf andere Werte gesetzt werden
</p>
</body>
</html></richcontent>
<icon BUILTIN="button_cancel"/>
<node COLOR="#c11552" CREATED="1729868513189" ID="ID_1857565201" MODIFIED="1729868529579" TEXT="das w&#xe4;re &#xfc;berraschend">
<font NAME="SansSerif" SIZE="9"/>
<icon BUILTIN="stop-sign"/>
</node>
</node>
<node CREATED="1729868538101" ID="ID_1948848092" MODIFIED="1729868566858" TEXT="besser sinngem&#xe4;&#xdf; auf die neue (funktionale) Datenstruktur &#xfc;berragen"/>
<node CREATED="1729868567942" ID="ID_791207809" MODIFIED="1729868585239" TEXT="auch das ist eine Art von Collection, die man z&#xe4;hlen kann"/>
</node>
<node COLOR="#338800" CREATED="1729868604121" ID="ID_1702035136" MODIFIED="1729868633429" TEXT="Konsequenz: der Default kommt jetzt aus NodeBuilder::patternData_">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1729872260939" ID="ID_1699716079" MODIFIED="1729872282289" TEXT="Kollaboration zwischen PortBuilder und WeavingBuilder">
<icon BUILTIN="pencil"/>
<node CREATED="1729872286056" ID="ID_100746695" MODIFIED="1729872380469" TEXT="nur WeavingBuilder kennt die aktuell gesammelten Daten">
<icon BUILTIN="idea"/>
</node>
<node COLOR="#338800" CREATED="1729872303681" ID="ID_782739255" MODIFIED="1729872377508" TEXT="brauche eine Funktion zum &#x201e;Reste einf&#xfc;llen&#x201c;">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1729872477774" ID="ID_1153908881" MODIFIED="1729872484078" TEXT="draft-Impl">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1729872485165" ID="ID_802272593" MODIFIED="1729872496094" TEXT="Logik/Assertion-Fehler">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
PRECONDITION: weaving-pattern-builder.hpp:415: thread_1: connectRemainingInputs: (leadPorts.size() + cnt &lt;= knownLeads.size())
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="broken-line"/>
</node>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1729872353115" ID="ID_1517952001" MODIFIED="1729872368574" TEXT="diese braucht wiederzum Zugriff auf die bekannten Leads ">
<icon BUILTIN="messagebox_warning"/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1729872370117" ID="ID_1303245640" MODIFIED="1729872374635" TEXT="unsch&#xf6;n?">
<icon BUILTIN="help"/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1729872389613" ID="ID_1818114994" MODIFIED="1729872413991" TEXT="Funktionalit&#xe4;t zum expliziten Definieren von Lead-Port-Verbindungen">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1729872416670" ID="ID_106035391" MODIFIED="1729872433250" TEXT="incl. Definieren zus&#xe4;tzlicher Leads on-the-fly">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1729872434676" ID="ID_1193395658" MODIFIED="1729872439652" TEXT="Fehler-Checks">
<icon BUILTIN="pencil"/>
</node>
</node>
</node>
<node CREATED="1729824247416" ID="ID_967491409" MODIFIED="1729824250860" TEXT="Ausgangsseitig">