Invocation: decision logic for invoking a ''parameter functor''

Based on the usage concept developed thus far, we rely on a `FeedPrototype`
to generate the actual `FeedManifold` for each invocation — and this is the extension point
where a ''parameter functor'' can be attached.

Notably, such a parameter functor will be configured from a different part of the builder logic
than the underlying processing function, which is adapted by a Library Plug-in.
Parameters on the other hand will be controlled mostly by configuration within the
Session, because the user chooses to use specific settings, e.g. for an effect.
An important extension to this scheme is **Parameter Automation** — which will be
also attached over the extension point designed here.

Since Parameter can be defined in various flavours, there is some concern that we'll end up
with an excessive number of template instantiations. Thus, we'll explicitly create a »loop hole«
by allowing to define the ''parameter functor'' to be a `std::function`.
This would open a secondary possibility: configuring such a function, but leaving it empty,
which would be a further control switch usable by the builder.
This commit is contained in:
Fischlurch 2024-12-19 22:35:12 +01:00
parent 07410e14f1
commit 479ab8cb15
2 changed files with 153 additions and 56 deletions

View file

@ -117,11 +117,13 @@ namespace engine {
using lib::meta::ElmTypes;
using lib::meta::Tagged;
using lib::meta::TySeq;
using std::declval;
using std::is_pointer;
using std::is_reference;
using std::remove_reference_t;
using std::remove_pointer_t;
using std::tuple_element_t;
using std::void_t;
using std::__and_;
using std::__not_;
@ -244,6 +246,44 @@ namespace engine {
using BuffI = typename std::conditional<hasInput(), typename ArgI::List::Head, BuffO>::type; /////////////////////////TODO obsolete ... remove after switch
};
/**
* Trait template to handle an _associated parameter functor._
* In those cases, where the basic processing function is classified such
* as to accept parameter(s), it may be desirable to _generate_ those parameters
* at invocation be it as a fixed parametrisation chosen for this usage, or even
* by evaluation of an _Automation function_ for some parameters.
* @tparam FUN type of the underlying _processing function_
*/
template<class FUN>
struct _ParamFun
{
using _Proc = _ProcFun<FUN>;
static constexpr bool hasParam() { return _Proc::hasParam(); }
using Param = std::conditional_t<hasParam(), typename _Proc::ArgP, std::tuple<>>;
template<class PF>
using isSuitable = std::is_constructible<Param, decltype(std::declval<PF> (std::declval<TurnoutSystem&>()))>;
template<class PF>
using isConfigurable = std::is_constructible<bool, PF&>;
template<class PF>
static bool
isActivated (PF const& paramFun)
{
if constexpr (isSuitable<PF>())
{ if constexpr (isConfigurable<PF>())
return bool(paramFun);
else
return true;
}
return false;
}
};
}//(End)Introspection helpers.
@ -485,9 +525,20 @@ namespace engine {
class FeedPrototype
: util::MoveOnly
{
using _Trait = _ParamFun<FUN>;
using Feed = FeedManifold<FUN>;
FUN procFun_;
PAM paramFun_;
Feed
createFeed (TurnoutSystem& turnoutSys)
{
if constexpr (_Trait::hasParam())
if (_Trait::isActivated(paramFun_))
return Feed{paramFun_(turnoutSys), procFun_};
return Feed{procFun_};
}
///////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1386 : elaborate setup / binding for parameter-creation
};

View file

@ -26380,9 +26380,7 @@
</node>
<node CREATED="1611478373512" ID="ID_1982297015" MODIFIED="1611478399631">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
es ist auf <i>nein</i>&#160;hinausgelaufen....
@ -26987,9 +26985,7 @@
<node CREATED="1677241733629" ID="ID_71114216" MODIFIED="1677241738194" TEXT="Grade, Strecke, Winkel"/>
<node CREATED="1677241738953" ID="ID_1098408302" MODIFIED="1677241773986" TEXT="&quot;point and shot&quot;-Interface">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
Anweisungen in der Statuszeile: w&#228;hle ersten Punkt, setze zweiten Punkt....
@ -27692,9 +27688,7 @@
<icon BUILTIN="idea"/>
<node CREATED="1678049589007" ID="ID_114677730" MODIFIED="1678049717907" TEXT="damit die Verbindung am Nullpunkt der Kind-Klammer ansetzt">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
mache hier die vereinfachtende Annahme, da&#223; alle Brackets die gleiche Metrik haben
@ -28409,9 +28403,7 @@
<node CREATED="1563456762562" ID="ID_968633527" MODIFIED="1563456775217" TEXT="Leaf: h&#xe4;ufig verborgen"/>
<node CREATED="1563456781637" ID="ID_1656158229" MODIFIED="1576282358066" TEXT="Fork: kommt darauf an....">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
....ob es was sinnvolles in einem Overview-Ruler anzuzeigen gibt
@ -29332,9 +29324,7 @@
</node>
<node COLOR="#435e98" CREATED="1560303951038" ID="ID_353953611" MODIFIED="1576282358059" TEXT="Frage: wirklich zweistufig konstruieren??">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<ol>
<li>
@ -29615,9 +29605,7 @@
</node>
<node CREATED="1678840039597" ID="ID_1655268668" MODIFIED="1678840689222" TEXT="wird festelegt durch &#xd83e;&#xdc46; bodyCanvas_.signal_size_allocate()">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; text-indent: 0px">
Empf&#228;nger(&#187;Slot&#171;): <font face="Monospaced" color="#552694">TimelineLayout::sizeZoomWindow (Gtk::Allocation&amp;)</font>
@ -31856,9 +31844,7 @@
</node>
<node CREATED="1563145010348" ID="ID_1404407551" MODIFIED="1576282358047">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
<i>rein gef&#252;hlsm&#228;&#223;ig</i>&#160;w&#228;re aber vorher wohl geschickter
@ -32230,9 +32216,7 @@
<node CREATED="1566401134943" ID="ID_432602619" MODIFIED="1566401141050" TEXT="box-shadow ist nutzbar">
<node CREATED="1566401142268" ID="ID_1379290604" MODIFIED="1576282358045" TEXT="outset nur im Rahmen des Margin">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
weil &#252;ber alles andere dar&#252;bergezeichnet wird
@ -33732,9 +33716,7 @@
</node>
<node CREATED="1678063198596" ID="ID_1800094446" MODIFIED="1679073586554" TEXT="wenn man den Splitter zieht, springt die vertikale Platzverteilung">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
sichtbar an der H&#246;he der Sub-Scope-Verbindungen auf den StaveBrackets
@ -34652,9 +34634,7 @@
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1611124813478" ID="ID_107886915" MODIFIED="1611124859455">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
Aufgabe: wie geht man mit einem Anzeigestil um, der den Effkt<i>&#160;gar nicht</i>&#160; darstellt
@ -35031,9 +35011,7 @@
<icon BUILTIN="messagebox_warning"/>
<node COLOR="#435e98" CREATED="1612471205161" ID="ID_544296566" MODIFIED="1665962213180" TEXT="GTK erlaubt keine explizite Gr&#xf6;&#xdf;e">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...das ist eine grundlegende Design-Enscheidung (und zwar eine Gute), aber in der Praxis mu&#223; es nat&#252;rlich trotzdem einen Weg geben, nur ist der dann relativ indirekt und auch nicht wirklich dokumentiert
@ -35538,9 +35516,7 @@
</body>
</html></richcontent>
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...anstatt eine auf den konkreten Typ getemplatete Subklasse zu verwenden,
@ -88388,8 +88364,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1734310118603" ID="ID_1954508996" MODIFIED="1734631398113" TEXT="Feed-Manifold: Eigenschaften demonstrieren">
<linktarget COLOR="#406cd3" DESTINATION="ID_1954508996" ENDARROW="Default" ENDINCLINATION="-484;30;" ID="Arrow_ID_640616380" SOURCE="ID_1710382999" STARTARROW="None" STARTINCLINATION="-2974;268;"/>
<node COLOR="#338800" CREATED="1734310118603" ID="ID_1954508996" MODIFIED="1734634792828" TEXT="Feed-Manifold: Eigenschaften demonstrieren">
<linktarget COLOR="#406cd3" DESTINATION="ID_1954508996" ENDARROW="Default" ENDINCLINATION="-552;35;" ID="Arrow_ID_640616380" SOURCE="ID_1710382999" STARTARROW="None" STARTINCLINATION="-2974;268;"/>
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1734310213994" ID="ID_691754137" MODIFIED="1734631391185" TEXT="mehrere Varianten von Funktions-Signaturen vorstellen">
<icon BUILTIN="yes"/>
@ -88777,7 +88753,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
<node COLOR="#338800" CREATED="1734631471232" ID="ID_1048829589" MODIFIED="1734631527235" TEXT="Feed-Prototype: Parameter-Behandlung zeigen">
<linktarget DESTINATION="ID_1048829589" ENDARROW="Default" ID="Arrow_ID_58841322" SOURCE="ID_1416331336" STARTARROW="None" STARTINCLINATION="-90;-5;" COLOR="#406cd3" ENDINCLINATION="-484;30;"/>
<linktarget COLOR="#406cd3" DESTINATION="ID_1048829589" ENDARROW="Default" ENDINCLINATION="-675;40;" ID="Arrow_ID_58841322" SOURCE="ID_1416331336" STARTARROW="None" STARTINCLINATION="-3038;178;"/>
<icon BUILTIN="button_ok"/>
</node>
</node>
@ -92053,8 +92029,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1734226511062" ID="ID_1899717504" MODIFIED="1734226537968" TEXT="ProcFunctor (mandatory)"/>
<node CREATED="1734226564932" ID="ID_696691756" MODIFIED="1734226570322" TEXT="Constructor (static)"/>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734582866744" ID="ID_1616386454" MODIFIED="1734583016228" TEXT="nochmal restrukturieren: mu&#xdf; nun Param-Tupel durchreichen">
<linktarget COLOR="#c1428c" DESTINATION="ID_1616386454" ENDARROW="Default" ENDINCLINATION="-1351;60;" ID="Arrow_ID_676623897" SOURCE="ID_1465521206" STARTARROW="None" STARTINCLINATION="-527;29;"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734582866744" ID="ID_1616386454" MODIFIED="1734634929289" TEXT="nochmal restrukturieren: mu&#xdf; nun Param-Tupel durchreichen">
<linktarget COLOR="#427ec1" DESTINATION="ID_1616386454" ENDARROW="Default" ENDINCLINATION="-1351;60;" ID="Arrow_ID_676623897" SOURCE="ID_1465521206" STARTARROW="None" STARTINCLINATION="-531;27;"/>
<icon BUILTIN="pencil"/>
<node COLOR="#5b280f" CREATED="1734583035971" ID="ID_662389818" MODIFIED="1734583156432" TEXT="ich m&#xf6;chte nicht das Param-Tupel nachtr&#xe4;glich zuweisen">
<richcontent TYPE="NOTE"><html>
@ -92069,7 +92045,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node CREATED="1734583026544" ID="ID_1494983661" MODIFIED="1734583167914" TEXT="bedeutet: Konstrkutor-Kette und in Basis-Klasse durchreichen"/>
<node CREATED="1734583169204" ID="ID_960536834" MODIFIED="1734583185511" TEXT="das ist schwierig ... weil die Basis-Klasse komplex aufgebaut wird"/>
<node CREATED="1734583186883" ID="ID_445121292" MODIFIED="1734583380956" TEXT="Idee: eine Basis-Klasse &#xbb;Storage&#xab; in einer Konfigurations-Klasse definieren">
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1734583186883" ID="ID_445121292" MODIFIED="1734634891132" TEXT="Idee: eine Basis-Klasse &#xbb;Storage&#xab; in einer Konfigurations-Klasse definieren">
<icon BUILTIN="idea"/>
<node CREATED="1734583221142" ID="ID_49260434" MODIFIED="1734583235671" TEXT="also _StorageSetup&lt;FUN&gt; als &#xe4;u&#xdf;erer Container"/>
<node CREATED="1734583236900" ID="ID_63905696" MODIFIED="1734583247122" TEXT="da kann dann alles Metaprogramming rein..."/>
@ -92087,7 +92063,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1734583343988" ID="ID_430940225" MODIFIED="1734583360386" TEXT="und definiert dann erst die nested struct Storage"/>
<node CREATED="1734583361711" ID="ID_568129151" MODIFIED="1734583372909" TEXT="FeedManifold erbt dann von dieser"/>
</node>
<node COLOR="#338800" CREATED="1734583395510" ID="ID_1700565848" MODIFIED="1734625568156" TEXT="mu&#xdf; dann einen weiteren Ctor auf dieser Basisklasse conditional sichtbar machen">
<node COLOR="#338800" CREATED="1734583395510" FOLDED="true" ID="ID_1700565848" MODIFIED="1734625568156" TEXT="mu&#xdf; dann einen weiteren Ctor auf dieser Basisklasse conditional sichtbar machen">
<icon BUILTIN="button_ok"/>
<node BACKGROUND_COLOR="#e8d88a" COLOR="#d5017d" CREATED="1734583422523" ID="ID_907955668" MODIFIED="1734625367025" TEXT="puh .... FEHLER FEHLER FEHLER FEHLER">
<arrowlink COLOR="#fee7c1" DESTINATION="ID_1031755621" ENDARROW="Default" ENDINCLINATION="367;-22;" ID="Arrow_ID_988126033" STARTARROW="None" STARTINCLINATION="377;26;"/>
@ -92123,8 +92099,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
enable_if_hasParam : verwendet&#160;statt <font face="Monospaced" color="#ac0909">Type</font>&#160;statt <font face="Monospaced" color="#ac0909">type</font>
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<icon BUILTIN="broken-line"/>
</node>
<node COLOR="#ff00ca" CREATED="1734624978674" ID="ID_514782434" MODIFIED="1734625013697" TEXT="ja dann KANNs ja gar nicht funktionieren...">
@ -92328,12 +92303,83 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734572424754" ID="ID_1186353623" MODIFIED="1734582798770" TEXT="Typ anlegen mit zwei Funktor-Parametern">
<icon BUILTIN="pencil"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734572571310" ID="ID_762884176" MODIFIED="1734572593981" TEXT="Traits-Template f&#xfc;r Parmeter-Funktor vorsehen">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734572571310" ID="ID_762884176" MODIFIED="1734642685926" TEXT="Traits-Template f&#xfc;r Parmeter-Funktor vorsehen">
<icon BUILTIN="pencil"/>
<node COLOR="#435e98" CREATED="1734642562758" ID="ID_124741811" MODIFIED="1734642577949" TEXT="_ParamFun&lt;FUN&gt;">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="info"/>
<node CREATED="1734642580172" ID="ID_1594598889" MODIFIED="1734642601285" TEXT="FUN &#x2261; Typ der zugeh&#xf6;rigen Processing-Function"/>
<node COLOR="#338800" CREATED="1734642607512" ID="ID_225155388" MODIFIED="1734642679519" TEXT="Trait soll jedoch direkt einsetzbar sein">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
....das hei&#223;t, alle wichtigen Eigenschaften aus _ProcFun&lt;FUN&gt; m&#252;ssen delegiert bereitgestellt werden...
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734572439920" ID="ID_955026014" MODIFIED="1734573339521" TEXT="createFeed (TurnoutSystem&amp;) implementieren">
</node>
<node CREATED="1734640371452" ID="ID_762706800" MODIFIED="1734640376664" TEXT="herauszufinden ....">
<node COLOR="#435e98" CREATED="1734640381115" ID="ID_1284162123" MODIFIED="1734642552192" TEXT="kann dieser Funktor die Parameter initialisieren?">
<node CREATED="1734642478889" ID="ID_537176146" MODIFIED="1734642491427" TEXT="das l&#xe4;uft auf decltype() hinaus..."/>
<node CREATED="1734642492691" ID="ID_1140592492" MODIFIED="1734642500411" TEXT="man wendet den Funktor an"/>
<node CREATED="1734642501830" ID="ID_15418917" MODIFIED="1734642513812" TEXT="und konstruiert daraus den Parameter-Datentyp"/>
<node CREATED="1734642516516" ID="ID_371749462" MODIFIED="1734642545785">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
valide&#160;&#160;&#10233;&#160;&#160;Funktor ist <i>brauchbar</i>
</p>
</body>
</html>
</richcontent>
</node>
</node>
<node COLOR="#435e98" CREATED="1734640447354" ID="ID_1513968039" MODIFIED="1734642552192" TEXT="ist dieser Funktor dynamisch aktivierbar?">
<node CREATED="1734640469377" ID="ID_1527659185" MODIFIED="1734640480593" TEXT="er darf dann nur verwendet werden, wenn aktiviert"/>
<node CREATED="1734640482114" ID="ID_1955370545" MODIFIED="1734642852699" TEXT="wichtiges Beispiel: std::function">
<arrowlink COLOR="#79a6a8" DESTINATION="ID_1746010324" ENDARROW="Default" ENDINCLINATION="117;-9;" ID="Arrow_ID_1965190462" STARTARROW="None" STARTINCLINATION="269;24;"/>
</node>
<node CREATED="1734640604005" ID="ID_758754868" MODIFIED="1734640611064" TEXT="Kriterium: bool-Konversion"/>
</node>
<node COLOR="#435e98" CREATED="1734640580222" ID="ID_1970054522" MODIFIED="1734642552192" TEXT="wenn es keine Parameter gibt...?">
<node CREATED="1734642435463" ID="ID_1603419819" MODIFIED="1734642448761" TEXT="...wird dieser Zweig eigentlich auch gar nicht aufgerufen"/>
<node CREATED="1734642450134" ID="ID_21738548" MODIFIED="1734642472763" TEXT="sicherheitshalber doch auch die Param-Funktion dann deaktiveren"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734572439920" ID="ID_955026014" MODIFIED="1734642701637" TEXT="createFeed (TurnoutSystem&amp;) implementieren">
<linktarget COLOR="#d35582" DESTINATION="ID_955026014" ENDARROW="Default" ENDINCLINATION="-620;38;" ID="Arrow_ID_278216824" SOURCE="ID_112390056" STARTARROW="None" STARTINCLINATION="1203;53;"/>
<icon BUILTIN="flag-yellow"/>
<icon BUILTIN="pencil"/>
<node COLOR="#5b280f" CREATED="1734642711594" ID="ID_628059323" MODIFIED="1734642730462" TEXT="man k&#xf6;nnte hier von der Konfiguration ein Lambda generieren lassen">
<icon BUILTIN="button_cancel"/>
</node>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1734642738502" ID="ID_847666328" MODIFIED="1734642756487" TEXT="nein &#x2014; besser direkt">
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/>
</node>
<node COLOR="#435e98" CREATED="1734642758924" ID="ID_1231534004" MODIFIED="1734643023205" TEXT="ist eine einfache Kaskade von Fallunterscheidungen">
<node COLOR="#435e98" CREATED="1734642773621" ID="ID_1090553293" MODIFIED="1734643031879" TEXT="not hasParam() &#x27f9; das ganze Thema ignorieren"/>
<node COLOR="#435e98" CREATED="1734642801730" ID="ID_1980769926" MODIFIED="1734643029296" TEXT="spezielle Erweiterung: konfigurierbare Funktion">
<node CREATED="1734642820012" ID="ID_1746010324" MODIFIED="1734642962465" TEXT="wichtig (wegen std::function)">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...die werde ich voraussichtlich per Default (oder zumindest in wichtigen F&#228;llen) einsetzen, um den Template-Bloat zu begrenzen. Das hat dann zur Folge, da&#223; noch zur Laufzeit entschieden werden k&#246;nnte, ob &#252;berhaupt eine Parameter-Konfiguration gemacht wird, oder ob default-konstruierte Parameter-Werte gen&#252;gen
</p>
</body>
</html></richcontent>
<linktarget COLOR="#79a6a8" DESTINATION="ID_1746010324" ENDARROW="Default" ENDINCLINATION="117;-9;" ID="Arrow_ID_1965190462" SOURCE="ID_1955370545" STARTARROW="None" STARTINCLINATION="269;24;"/>
</node>
<node CREATED="1734642970639" ID="ID_496362197" MODIFIED="1734642986760" TEXT="entweder compile-Time oder Runtime"/>
<node CREATED="1734642990109" ID="ID_182746911" MODIFIED="1734643009042" TEXT="nicht konfigurierbar, aber generell brauchbar &#x27f9; immer aktiviert"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734572530013" ID="ID_765842112" MODIFIED="1734572593980" TEXT="dynamische quer-Builder hinzuf&#xfc;gen">
<icon BUILTIN="flag-yellow"/>
@ -92839,9 +92885,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</body>
</html></richcontent>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734582923838" ID="ID_1465521206" MODIFIED="1734583016228" TEXT="mu&#xdf; daf&#xfc;r nochmal Definitions-Struktur umkrempeln">
<arrowlink COLOR="#c1428c" DESTINATION="ID_1616386454" ENDARROW="Default" ENDINCLINATION="-1351;60;" ID="Arrow_ID_676623897" STARTARROW="None" STARTINCLINATION="-527;29;"/>
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1734582923838" ID="ID_1465521206" MODIFIED="1734634938017" TEXT="mu&#xdf; daf&#xfc;r nochmal Definitions-Struktur umkrempeln">
<arrowlink COLOR="#427ec1" DESTINATION="ID_1616386454" ENDARROW="Default" ENDINCLINATION="-1351;60;" ID="Arrow_ID_676623897" STARTARROW="None" STARTINCLINATION="-531;27;"/>
<icon BUILTIN="yes"/>
</node>
</node>
</node>
@ -92857,14 +92903,14 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</html></richcontent>
<icon BUILTIN="button_cancel"/>
</node>
<node CREATED="1734309990069" ID="ID_1710382999" MODIFIED="1734633414037" TEXT="angesiedelt in NodeBase_test">
<arrowlink COLOR="#406cd3" DESTINATION="ID_1954508996" ENDARROW="Default" ENDINCLINATION="-484;30;" ID="Arrow_ID_640616380" STARTARROW="None" STARTINCLINATION="-2974;268;"/>
<node CREATED="1734309990069" ID="ID_1710382999" MODIFIED="1734634800005" TEXT="angesiedelt in NodeBase_test">
<arrowlink COLOR="#406cd3" DESTINATION="ID_1954508996" ENDARROW="Default" ENDINCLINATION="-552;35;" ID="Arrow_ID_640616380" STARTARROW="None" STARTINCLINATION="-2974;268;"/>
<linktarget COLOR="#16a2aa" DESTINATION="ID_1710382999" ENDARROW="Default" ENDINCLINATION="539;-32;" ID="Arrow_ID_129574515" SOURCE="ID_1348489291" STARTARROW="None" STARTINCLINATION="183;11;"/>
<linktarget COLOR="#467fbe" DESTINATION="ID_1710382999" ENDARROW="Default" ENDINCLINATION="73;6;" ID="Arrow_ID_1026737432" SOURCE="ID_1795683894" STARTARROW="None" STARTINCLINATION="97;6;"/>
<icon BUILTIN="info"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734573209952" ID="ID_1416331336" MODIFIED="1734631527235" TEXT="FeedPrototype in separatem Testfall abhandeln">
<arrowlink DESTINATION="ID_1048829589" ENDARROW="Default" ID="Arrow_ID_58841322" STARTARROW="None" STARTINCLINATION="-90;-5;" COLOR="#406cd3" ENDINCLINATION="-484;30;"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734573209952" ID="ID_1416331336" MODIFIED="1734634800005" TEXT="FeedPrototype in separatem Testfall abhandeln">
<arrowlink COLOR="#406cd3" DESTINATION="ID_1048829589" ENDARROW="Default" ENDINCLINATION="-675;40;" ID="Arrow_ID_58841322" STARTARROW="None" STARTINCLINATION="-3038;178;"/>
<linktarget COLOR="#35a1d3" DESTINATION="ID_1416331336" ENDARROW="Default" ENDINCLINATION="420;24;" ID="Arrow_ID_1552949599" SOURCE="ID_112390056" STARTARROW="None" STARTINCLINATION="245;11;"/>
<icon BUILTIN="flag-yellow"/>
</node>