Invocation: can now accept complex buffer arguments

Add a test case with a wild mix of array and tuple.
Yay! the new code works right away...
This commit is contained in:
Fischlurch 2024-12-18 22:22:28 +01:00
parent 990e4cbb68
commit 488793174f
2 changed files with 144 additions and 65 deletions

View file

@ -17,7 +17,7 @@
#include "lib/test/run.hpp"
//#include "lib/test/test-helper.hpp"
#include "lib/iter-zip.hpp"
#include "lib/meta/function.hpp"
#include "steam/engine/proc-node.hpp"
#include "steam/engine/turnout.hpp"
@ -25,15 +25,18 @@
#include "steam/engine/feed-manifold.hpp"
#include "steam/engine/diagnostic-buffer-provider.hpp"
#include "steam/engine/buffhandle-attach.hpp"
#include "lib/test/test-helper.hpp"
//#include "lib/format-cout.hpp"
#include "lib/test/diagnostic-output.hpp"/////////////////////TODO
#include "lib/format-util.hpp"///////////////////////////////TODO
#include "lib/util.hpp"
//using std::string;
using std::tuple;/////////////TODO
using std::array;
using std::tuple;
using std::array;
using util::isSameAdr;
using lib::test::showType;
namespace steam {
@ -117,6 +120,7 @@ namespace test {
m1.invoke(); // invoke the adapted processing function (fun_singleOut)
CHECK (buff.accessAs<long>() == r1); // result: the random number r1 was written into the buffer.
// Example-2: adapt a function to process input -> output buffer
auto fun_singleInOut = [](Buffer* in, Buffer* out) { *out = *in + 1; };
using M2 = FeedManifold<decltype(fun_singleInOut)>;
@ -135,8 +139,6 @@ namespace test {
// and get a new buffer to capture the output
BuffHandle buffOut = provider.lockBufferFor<Buffer> (-99);
CHECK (buff.accessAs<long>() == r1);
SHOW_EXPR(buff.accessAs<long>())
SHOW_EXPR(buffOut.accessAs<long>())
CHECK (buffOut.accessAs<long>() == -55); ///////////////////////////////////////OOO should be -99 --> aliasing of buffer meta records due to bug with hash generation
// configure the Manifold-2 with this input and output buffer
@ -154,10 +156,97 @@ SHOW_EXPR(buffOut.accessAs<long>())
CHECK (*m2.outArgs == -55); ////////////////////////////////OOO should be -99
m2.invoke();
SHOW_EXPR(r1)
SHOW_EXPR(*m1.outArgs)
SHOW_EXPR(*m2.outArgs)
CHECK (buffOut.accessAs<long>() == r1+1);
// Example-3: accept complex buffer setup
using Sequence = array<Buffer,3>;
using Channels = array<Buffer*,3>;
using Compound = tuple<Sequence*, Buffer*>;
auto fun_complexInOut = [](Channels in, Compound out)
{
auto [seq,extra] = out;
for (auto [i,b] : lib::izip(in))
{
(*seq)[i] = *b + 1;
*extra += *b;
}
};
using M3 = FeedManifold<decltype(fun_complexInOut)>;
CHECK ( M3::hasInput());
CHECK (not M3::hasParam());
CHECK (3 == M3::FAN_I);
CHECK (2 == M3::FAN_O);
CHECK (showType<M3::ArgI>() == "array<long*, 3ul>"_expect);
CHECK (showType<M3::ArgO>() == "tuple<array<long, 3ul>*, long*>"_expect);
// instantiate...
M3 m3{fun_complexInOut};
CHECK (3 == m3.inBuff.array().size());
CHECK (2 == m3.outBuff.array().size());
// use existing buffers and one additional buffer for input
BuffHandle buffI0 = buff;
BuffHandle buffI1 = buffOut;
BuffHandle buffI2 = provider.lockBufferFor<Buffer> (-22);
SHOW_EXPR(buffI0.accessAs<long>())
SHOW_EXPR(buffI1.accessAs<long>())
SHOW_EXPR(buffI2.accessAs<long>())
CHECK (buffI0.accessAs<long>() == r1 ); // (result from Example-1)
CHECK (buffI1.accessAs<long>() == r1+1); // (result from Example-2)
CHECK (buffI2.accessAs<long>() == -55 ); ///////////////////////////////////////OOO should be -22
// prepare a compound buffer and an extra buffer for output...
BuffHandle buffO0 = provider.lockBufferFor<Sequence> (Sequence{-111,-222,-333});
BuffHandle buffO1 = provider.lockBufferFor<Buffer> (-33);
SHOW_EXPR(util::join(buffO0.accessAs<Sequence>()))
SHOW_EXPR(buffO1.accessAs<long>())
CHECK ((buffO0.accessAs<Sequence>() == Sequence{-111,-222,-333}));
CHECK (buffO1.accessAs<long>() == -55 ); ///////////////////////////////////////OOO should be -33
// configure the Manifold-3 with these input and output buffers
m3.inBuff.createAt (0, buffI0);
m3.inBuff.createAt (1, buffI1);
m3.inBuff.createAt (2, buffI2);
m3.outBuff.createAt(0, buffO0);
m3.outBuff.createAt(1, buffO1);
m3.connect();
SHOW_EXPR(m3.inArgs)
SHOW_EXPR(m3.outArgs)
// Verify data exposed prior to invocation....
auto& [ia0,ia1,ia2] = m3.inArgs;
auto& [oa0,oa1] = m3.outArgs;
auto& [o00,o01,o02] = *oa0;
SHOW_EXPR(ia0)
SHOW_EXPR(ia1)
SHOW_EXPR(ia2)
SHOW_EXPR(oa0)
SHOW_EXPR(o00)
SHOW_EXPR(o01)
SHOW_EXPR(o02)
SHOW_EXPR(oa1)
CHECK (*ia0 == r1 );
CHECK (*ia1 == r1+1);
CHECK (*ia2 == -55 ); /////////////////////////////////////////////////////OOO should be -22
CHECK ( o00 == -111);
CHECK ( o01 == -222);
CHECK ( o02 == -333);
CHECK (*oa1 == -55 ); /////////////////////////////////////////////////////OOO should be -33
m3.invoke();
SHOW_EXPR(ia0)
SHOW_EXPR(ia1)
SHOW_EXPR(ia2)
SHOW_EXPR(oa0)
SHOW_EXPR(o00)
SHOW_EXPR(o01)
SHOW_EXPR(o02)
SHOW_EXPR(oa1)
CHECK (*ia0 == r1 ); // Input buffers unchanged
CHECK (*ia1 == r1+1);
CHECK (*ia2 == -55 ); /////////////////////////////////////////////////////OOO should be -22
CHECK ( o00 == *ia0+1); // Output buffers as processed by the function
CHECK ( o01 == *ia1+1);
CHECK ( o02 == *ia2+1);
CHECK (*oa1 == -55 + *ia0+*ia1+*ia2); ///////////////////////////////////////////OOO should be -33
}
};

View file

@ -25554,9 +25554,7 @@
</node>
<node CREATED="1540512486974" ID="ID_709169542" MODIFIED="1576282358072" TEXT="Funktor">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
der ctor des DisplayFrame bekommt einen Funktor oder Lambda,
@ -26344,9 +26342,7 @@
</node>
<node COLOR="#338800" CREATED="1678381623392" ID="ID_222335481" MODIFIED="1678381792387" TEXT="Zusammenhang abstrahiert">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
Habe mich hier f&#252;r eine <i>komplett unterirdische Verbindung</i>&#160;entschieden, denn ich m&#246;chte keinesfalls den Layout-Manager zu einem sichtbaren Akteur ausbauen &#8212; ein &#187;Layout-Manager&#171; w&#228;re eine derart offensichtliche zentrale Autorit&#228;t, da&#223; der Weg zur &#8222;Gott-Klasse&#8220; nicht mehr weit ist
@ -26932,9 +26928,7 @@
<node CREATED="1677242528649" ID="ID_1133975830" MODIFIED="1677242536188" TEXT="kein richties Handbuch">
<node CREATED="1677242594624" ID="ID_741403940" MODIFIED="1677242644637" TEXT="nur sehr spezifische Lehrmaterialien">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
&quot;Mathe f&#252;r 6-13 j&#228;rige&quot; etc
@ -27122,9 +27116,7 @@
</node>
<node CREATED="1677285183885" ID="ID_1263712065" MODIFIED="1677285326059" TEXT="Expressions, Objektmodell und Rererenzen lassen zu w&#xfc;nschen &#xfc;brig">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
Die Geometrie-Elemente in den Sketch-Objekten sind eine Spezial-Implementierung, und keine &#187;first class citizens&#171;. Es ist nicht klar, wie man sie aus Expressions referenzieren kann (kein sauberes DSL-Design). Das Dependency-Management ist viel zu naiv implementiert, und es wird empfohlen, mit Tricks und Kniffen zu arbeiten.
@ -27610,9 +27602,7 @@
<icon BUILTIN="button_cancel"/>
<node CREATED="1678028227991" ID="ID_1354143607" MODIFIED="1678028733057">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
&#10551; <i>kommend von</i>&#160;<font face="Monospaced" size="2">DisplayFrame::sync_and_balance (DisplayEvaluation&amp;)</font>
@ -28712,9 +28702,7 @@
<node CREATED="1555806824441" ID="ID_948993908" MODIFIED="1557498707228" TEXT="Resultat: aus dem std::get f&#xe4;llt eine rvalue-Referenz raus"/>
<node CREATED="1555806920309" ID="ID_1549876372" MODIFIED="1557498707228" TEXT="das k&#xf6;nnte sogar das Standard-Baumuster f&#xfc;r &quot;perfect forwarding&quot; sein">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...denn es handelt sich hierbei um einen Konstruktionstrick.
@ -30624,9 +30612,7 @@
<icon BUILTIN="help"/>
<node CREATED="1560618780573" ID="ID_1295221704" MODIFIED="1568577629019">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
naheliegend: das <b>BodyCanvasWidget</b>&#160;selber
@ -31353,9 +31339,7 @@
<arrowlink COLOR="#7c8da1" DESTINATION="ID_73927449" ENDARROW="Default" ENDINCLINATION="207;0;" ID="Arrow_ID_679820364" STARTARROW="None" STARTINCLINATION="-325;70;"/>
<node CREATED="1562843975693" ID="ID_317751446" MODIFIED="1562843975693">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
widget-&gt;get_style_context();
@ -33547,9 +33531,7 @@
<icon BUILTIN="idea"/>
<node CREATED="1566955975338" ID="ID_1779775058" MODIFIED="1566955999837">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
die gekoppelten Scrollbars funktionieren dann <i>&quot;von selber&quot;</i>
@ -34253,9 +34235,7 @@
<icon BUILTIN="flag-pink"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1544135984042" ID="ID_429363053" MODIFIED="1584932261288" TEXT="Grund f&#xfc;r den Fehler im Nexus?">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
ERR: nexus.hpp:189: worker_3: ~Nexus: Some UI components are still connected to the backbone.
@ -34902,9 +34882,7 @@
<node CREATED="1583102068949" ID="ID_1157479559" MODIFIED="1583102075826" TEXT="Probleme / Entscheidungen">
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1583102099206" ID="ID_1626144230" MODIFIED="1679065446533" TEXT="Umgang mit einem Clip-Header">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
was ist das?
@ -35504,9 +35482,7 @@
</node>
<node CREATED="1504833434094" ID="ID_349655067" MODIFIED="1557498707232">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
Docks enthalten <b>Component Views</b>
@ -36195,9 +36171,7 @@
</node>
<node COLOR="#338800" CREATED="1533309280940" ID="ID_918869201" MODIFIED="1576282358030" TEXT="Stand 8/2018 verifiziert">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
suche (case insensitive) nach application_activate
@ -36744,9 +36718,7 @@
</body>
</html></richcontent>
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<ul>
<li>
@ -87396,7 +87368,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1733761653882" ID="ID_950074593" MODIFIED="1733761667427" TEXT="allerdings h&#xe4;lt jeder Storage-Frame gleich ein Tupel von Werten"/>
<node CREATED="1733704677700" ID="ID_57789571" MODIFIED="1733704753675" TEXT="Storage-Frames werden per Accessor-Key registriert"/>
<node CREATED="1733704793907" ID="ID_1040373700" MODIFIED="1733704816204" TEXT="offen halten &#x2014; keine integrierte Magie"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1733704821863" ID="ID_1350706165" MODIFIED="1733704853138" TEXT="au&#xdf;erdem: Umbau auf das Misch-Modell f&#xfc;r Parameter">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1733704821863" ID="ID_1350706165" MODIFIED="1734552063674" TEXT="au&#xdf;erdem: Umbau auf das Misch-Modell f&#xfc;r Parameter">
<arrowlink COLOR="#a06e80" DESTINATION="ID_1354544776" ENDARROW="Default" ENDINCLINATION="-1058;-56;" ID="Arrow_ID_501116604" STARTARROW="None" STARTINCLINATION="1136;60;"/>
<icon BUILTIN="yes"/>
</node>
</node>
@ -88470,15 +88443,18 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734310118603" ID="ID_1954508996" MODIFIED="1734310510263" 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;"/>
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1734310213994" ID="ID_691754137" MODIFIED="1734536050291" TEXT="mehrere Varianten von Funktions-Signaturen vorstellen">
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734310213994" ID="ID_691754137" MODIFIED="1734556323351" TEXT="mehrere Varianten von Funktions-Signaturen vorstellen">
<icon BUILTIN="yes"/>
<node COLOR="#338800" CREATED="1734310245306" ID="ID_1881940952" MODIFIED="1734535951144" TEXT="reiner Output mit einem Buffer">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734310278618" ID="ID_1569263616" MODIFIED="1734536988389" TEXT="Input &#x27fc; Output mit einem Buffer">
<node COLOR="#338800" CREATED="1734310278618" ID="ID_1569263616" MODIFIED="1734552396539" TEXT="Input &#x27fc; Output mit einem Buffer">
<arrowlink COLOR="#f70b4e" DESTINATION="ID_1455684253" ENDARROW="Default" ENDINCLINATION="-91;-6;" ID="Arrow_ID_490366864" STARTARROW="None" STARTINCLINATION="-130;10;"/>
<linktarget COLOR="#78b893" DESTINATION="ID_1569263616" ENDARROW="Default" ENDINCLINATION="406;32;" ID="Arrow_ID_1856379869" SOURCE="ID_745699305" STARTARROW="None" STARTINCLINATION="-602;56;"/>
<icon BUILTIN="flag-yellow"/>
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1734552381857" ID="ID_1059351113" LINK="#ID_1910303400" MODIFIED="1734556282597" TEXT="Input &#x27fc; Output mit komplexen Typen">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734310306689" ID="ID_246862993" MODIFIED="1734310327544" TEXT="Input &#x27fc; Output mit einem Buffer mit einem Parameter">
<icon BUILTIN="flag-yellow"/>
@ -91867,8 +91843,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<u>Erl&#228;uterung</u>: egal wie die interne Logik abl&#228;uft, am Ende mu&#223; sie f&#252;r jeden Slot <i>den Typ (kompatibel) ausweisen,</i>&#160;der initial f&#252;r diese Stelle in der Signatur angegeben wurde
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<linktarget COLOR="#daf6fe" DESTINATION="ID_1825901061" ENDARROW="Default" ENDINCLINATION="-1280;54;" ID="Arrow_ID_1390781333" SOURCE="ID_573532514" STARTARROW="None" STARTINCLINATION="-446;-20;"/>
</node>
</node>
@ -91894,7 +91869,19 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node CREATED="1734191257640" ID="ID_1241232500" MODIFIED="1734191262543" TEXT="_ParamFun"/>
<node CREATED="1734191257640" ID="ID_1241232500" MODIFIED="1734191262543" TEXT="_ParamFun">
<node CREATED="1734552129926" ID="ID_489662542" MODIFIED="1734552290088" TEXT="wird da &#xfc;berhaupt ein separater Trait ben&#xf6;tigt?">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Die Signatur des Parameter-Funktors folgt eigentlich zwansl&#228;ufig aus der gegebenen Processing-Function: es mu&#223; ein TurnoutSystem&amp; akzeptiert und ein Parameter(Tupel) geliefert werden (by-value). Seiteneffekte im TurnoutSystem sind m&#246;glich (aber die Ausnahme)
</p>
</body>
</html>
</richcontent>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734133384146" ID="ID_250842155" MODIFIED="1734133516983" TEXT="Typ-Steuerung im Builder &#xfc;berarbeiten">
@ -92169,7 +92156,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734132967020" ID="ID_1354544776" MODIFIED="1734133516984" TEXT="Param-Tuple in FeedManifold aufnehmen">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734132967020" ID="ID_1354544776" MODIFIED="1734552052539" TEXT="Param-Tuple in FeedManifold aufnehmen">
<linktarget COLOR="#a06e80" DESTINATION="ID_1354544776" ENDARROW="Default" ENDINCLINATION="-1058;-56;" ID="Arrow_ID_501116604" SOURCE="ID_1350706165" STARTARROW="None" STARTINCLINATION="1136;60;"/>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734286428873" ID="ID_1059514888" MODIFIED="1734300480355" TEXT="Vorraussetzung ist ein anspruchsvoller Umbau">
<icon BUILTIN="pencil"/>
@ -92184,8 +92172,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<linktarget COLOR="#75a8d1" DESTINATION="ID_132315841" ENDARROW="Default" ENDINCLINATION="532;28;" ID="Arrow_ID_791254362" SOURCE="ID_718171059" STARTARROW="None" STARTINCLINATION="115;5;"/>
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734286560983" ID="ID_431464065" MODIFIED="1734480210827" TEXT="auf die flexible Funktor-Signatur schwenken">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1734286560983" ID="ID_431464065" MODIFIED="1734552331657" TEXT="auf die flexible Funktor-Signatur schwenken">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734300380799" ID="ID_782708625" MODIFIED="1734300402299" TEXT="dann die Erweiterung auf strukturierte Typen dazunehmen">
@ -92358,7 +92346,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node CREATED="1734480338809" ID="ID_1051007990" MODIFIED="1734480347674" TEXT="connect-Funktion umstellen">
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734480338809" ID="ID_1051007990" MODIFIED="1734552348128" TEXT="connect-Funktion umstellen">
<icon BUILTIN="pencil"/>
<node CREATED="1734480363094" ID="ID_81517996" MODIFIED="1734480413909" TEXT="gemischte Iteration &#xfc;ber Tupel und Array">
<arrowlink COLOR="#4ab2e5" DESTINATION="ID_1513818427" ENDARROW="Default" ENDINCLINATION="-120;11;" ID="Arrow_ID_668892948" STARTARROW="None" STARTINCLINATION="-103;-9;"/>
</node>
@ -92478,8 +92467,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
void dummyOp (<font color="#d80f0f"><b>NoArg</b></font>&#160;in, <b>SoloArg</b>&#160;out)
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<font NAME="SansSerif" SIZE="11"/>
</node>
<node CREATED="1734546333505" ID="ID_1369045625" MODIFIED="1734546509505" TEXT="der erste Slot kann nicht klassifiziert werden">
@ -92490,8 +92478,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
rein logisch l&#228;&#223;t sich das nicht l&#246;sen &#8212; die Entscheidung beruht dann auf einer willk&#252;rlichen Konvention; im Moment habe ich fesgelegt: &#187;das k&#246;nnen keine Buffer sein&#171;
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1734546349095" ID="ID_1864083410" MODIFIED="1734546372125" TEXT="per Default wird er ein Param-Slot"/>
</node>
@ -92513,6 +92500,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1734556219075" ID="ID_1910303400" LINK="#ID_1059351113" MODIFIED="1734556349702" TEXT="Ha: komplexe gemischte Buffer-Parameter funktionieren auf Anhieb">
<icon BUILTIN="ksmiletris"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734133400400" ID="ID_1364724277" MODIFIED="1734141875620" TEXT="zus&#xe4;tzlichen Funktor f&#xfc;r die Parameter akzeptieren">