Invocation: draft implementation of the weaving-pattern for parameters
Still having some doubts if using a ''weaving-pattern'' is the right approach here, but if we do, then the steps would be mapped as drafted here. This includes passing additional parameters, notably the `TurnoutSystem&` to every step.
This commit is contained in:
parent
2468f6d0ee
commit
e131320a81
4 changed files with 111 additions and 41 deletions
|
|
@ -219,7 +219,7 @@ namespace engine {
|
|||
}
|
||||
|
||||
void
|
||||
shed (Feed& feed, OptionalBuff outBuff)
|
||||
shed (Feed& feed, TurnoutSystem&, OptionalBuff outBuff)
|
||||
{
|
||||
for (uint i=0; i<outTypes.size(); ++i)
|
||||
{
|
||||
|
|
@ -232,13 +232,13 @@ namespace engine {
|
|||
}
|
||||
|
||||
void
|
||||
weft (Feed& feed)
|
||||
weft (Feed& feed, TurnoutSystem&)
|
||||
{
|
||||
feed.invoke(); // process data
|
||||
}
|
||||
|
||||
BuffHandle
|
||||
fix (Feed& feed)
|
||||
fix (Feed& feed, TurnoutSystem&)
|
||||
{
|
||||
if constexpr (Feed::hasInput())
|
||||
for (uint i=0; i<leadPort.size(); ++i)
|
||||
|
|
|
|||
|
|
@ -201,15 +201,17 @@ namespace engine {
|
|||
using Functors = typename SPEC::Functors;
|
||||
using DataBlock = typename SPEC::ChainCons::NewFrame;
|
||||
using BlockBuilder = typename SPEC::BlockBuilder;
|
||||
using PostProcessor = function<void(TurnoutSystem&)>;
|
||||
|
||||
BlockBuilder blockBuilder_;
|
||||
|
||||
function<void(TurnoutSystem&)> postProcess_;
|
||||
PostProcessor postProcess_;
|
||||
Port& delegatePort_;
|
||||
|
||||
struct Feed
|
||||
: util::NonCopyable
|
||||
{
|
||||
lib::UninitialisedStorage<DataBlock> buffer;
|
||||
OptionalBuff outBuff;
|
||||
|
||||
DataBlock& block() { return buffer[0]; }
|
||||
|
||||
|
|
@ -222,39 +224,57 @@ namespace engine {
|
|||
|
||||
|
||||
/** forwarding-ctor to provide the detailed input/output connections */
|
||||
ParamWeavingPattern (BlockBuilder builder)
|
||||
ParamWeavingPattern (BlockBuilder builder, PostProcessor postProc, Port& delegate)
|
||||
: blockBuilder_{move (builder)}
|
||||
, postProcess_{move (postProc)}
|
||||
, delegatePort_{delegate}
|
||||
{ }
|
||||
|
||||
|
||||
/** Preparation: create a Feed data frame to use as local scope */
|
||||
Feed
|
||||
mount (TurnoutSystem& turnoutSys)
|
||||
{
|
||||
return Feed{};
|
||||
}
|
||||
|
||||
/** Invoke the parameter-functors to create the basic parameter data */
|
||||
void
|
||||
pull (Feed& feed, TurnoutSystem& turnoutSys)
|
||||
{
|
||||
UNIMPLEMENTED ("pull parameter functors");
|
||||
feed.emplaceParamDataBlock (blockBuilder_, turnoutSys);
|
||||
}
|
||||
|
||||
/** Link the param-data-block into the current TurnoutSystem,
|
||||
* possibly post-process the param data. From this point on,
|
||||
* nodes within the nested scope can draw from this data.
|
||||
*/
|
||||
void
|
||||
shed (Feed& feed, OptionalBuff outBuff)
|
||||
shed (Feed& feed, TurnoutSystem& turnoutSys, OptionalBuff outBuff)
|
||||
{
|
||||
UNIMPLEMENTED ("connect and postprocess");
|
||||
turnoutSys.attachChainBlock(feed.block());
|
||||
feed.outBuff = outBuff;
|
||||
if (postProcess_)
|
||||
postProcess_(turnoutSys);
|
||||
}
|
||||
|
||||
/** recursively invoke the delegate port, while the generated
|
||||
* parameter-data is indirectly reachable through the TurnoutSystem
|
||||
*/
|
||||
void
|
||||
weft (Feed& feed)
|
||||
weft (Feed& feed, TurnoutSystem& turnoutSys)
|
||||
{
|
||||
UNIMPLEMENTED ("forward to delegate");
|
||||
feed.outBuff = delegatePort_.weave (turnoutSys, feed.outBuff);
|
||||
}
|
||||
|
||||
/** clean-up: detach the parameter-data-block.
|
||||
* @return the output buffer produced by the recursive delegate call.
|
||||
*/
|
||||
BuffHandle
|
||||
fix (Feed& feed)
|
||||
fix (Feed& feed, TurnoutSystem& turnoutSys)
|
||||
{
|
||||
UNIMPLEMENTED ("clean-up and return result buff");
|
||||
turnoutSys.detachChainBlock(feed.block());
|
||||
return feed.outBuff;
|
||||
}
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -94,9 +94,9 @@ namespace engine {
|
|||
using Feed = typename PAT::Feed;
|
||||
ASSERT_MEMBER_FUNCTOR (&PAT::mount, Feed(TurnoutSystem&));
|
||||
ASSERT_MEMBER_FUNCTOR (&PAT::pull, void(Feed&, TurnoutSystem&));
|
||||
ASSERT_MEMBER_FUNCTOR (&PAT::shed, void(Feed&, OptionalBuff));
|
||||
ASSERT_MEMBER_FUNCTOR (&PAT::weft, void(Feed&));
|
||||
ASSERT_MEMBER_FUNCTOR (&PAT::fix, BuffHandle(Feed&));
|
||||
ASSERT_MEMBER_FUNCTOR (&PAT::shed, void(Feed&, TurnoutSystem&, OptionalBuff));
|
||||
ASSERT_MEMBER_FUNCTOR (&PAT::weft, void(Feed&, TurnoutSystem&));
|
||||
ASSERT_MEMBER_FUNCTOR (&PAT::fix, BuffHandle(Feed&, TurnoutSystem&));
|
||||
return sizeof(PAT);
|
||||
}
|
||||
|
||||
|
|
@ -135,9 +135,9 @@ namespace engine {
|
|||
{
|
||||
Feed feed = PAT::mount (turnoutSys);
|
||||
PAT::pull (feed, turnoutSys);
|
||||
PAT::shed (feed, outBuff);
|
||||
PAT::weft (feed);
|
||||
return PAT::fix (feed);
|
||||
PAT::shed (feed, turnoutSys, outBuff);
|
||||
PAT::weft (feed, turnoutSys);
|
||||
return PAT::fix (feed, turnoutSys);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -82345,8 +82345,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
Das heißt, hier haben wir immer einen festen Satz an Parametern, die stets im TurnoutSystem eingebettet vorliegen; diese können aber als HeteroData-Chain erweitert werden um die Blöcke, die wir über eine (oder eine Kette von) ParamBuildSpec erzeugen
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -94384,8 +94383,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
denn ich kann nicht ein non-copyable-Member fertig per Konstruktor bekommen....
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1735607937133" ID="ID_328206928" MODIFIED="1735607951086" TEXT="oder wenn man den Funktor bekommt und selber aufruft"/>
|
||||
</node>
|
||||
|
|
@ -94400,7 +94398,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1735609243446" ID="ID_812134786" MODIFIED="1735609281948" TEXT="eine Inkonsistenz ergibt sich in shed()....">
|
||||
<node CREATED="1735609283480" ID="ID_1850616450" MODIFIED="1735609297842" TEXT="denn den (optionalen) Ausgabe-Buffer gäbe es erst hier"/>
|
||||
<node CREATED="1735609299238" ID="ID_665339625" MODIFIED="1735609315400" TEXT="der rekursive Call hatte keinen zur Verfügung"/>
|
||||
<node CREATED="1735609349100" ID="ID_396734688" MODIFIED="1735609491766" TEXT="als müßte man hier dann das BuffHandle „umleiten“">
|
||||
<node CREATED="1735609349100" ID="ID_396734688" MODIFIED="1735839879611" TEXT="also müßte man hier dann das BuffHandle „umleiten“">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
|
|
@ -94408,8 +94406,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
heißt, man müßte entweder explizit umkopieren, oder es bräuchte eine Konvention, wie man das (optional) gegebene BuffHandle dann eben doch frei gibt; letztlich wird ja ein BuffHandle zurückgegeben, und das wäre dann dasjenige, daß vom rekursiven Call belegt wurde. Könnte sogar klappen, ist aber<i> als Trickserei</i> zu werten.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1735609494932" ID="ID_1864279920" MODIFIED="1735609503487" TEXT="der weft()-Aufruf wäre komplett NOP">
|
||||
|
|
@ -94421,8 +94418,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
Die Aufteilung in diese fünf Schritte dient vor allem der Gliederung der Abläufe; es ist aber nur bedingt ein »Protokoll«, in dem in bestimmten Schritten etwas Festgelegtes <i>passieren muß...</i>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1735609517769" ID="ID_302975776" MODIFIED="1735609561229" TEXT="trotzdem ein Hinweis, daß mit dem Design etwas nicht stimmt">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -94432,8 +94428,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
Wenn man Strukturen biegen, leer machen oder umdeuten muß...
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1735609958198" ID="ID_962342769" MODIFIED="1735609995692" TEXT="oder man macht alles in irgend einem anderen passenden Aufruf">
|
||||
|
|
@ -94497,8 +94492,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
...da gibt es definitiv keinen anderen Ausweg, und eigentlich wird ja dadurch auch erst die Builder-Notation wirklich sinnvoll; daß man ein non-copyable-Objekt aus einer Funktion „abwerfen“ kann ist sowiso grenzwertig....
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<node BACKGROUND_COLOR="#c8cbaf" CREATED="1735697219515" ID="ID_1960332816" MODIFIED="1735777474732" TEXT="warum ärgere ich mich jetz so drüber?">
|
||||
<icon BUILTIN="smiley-angry"/>
|
||||
</node>
|
||||
|
|
@ -94522,8 +94516,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<font color="#491fdd" size="2">(und ich mache es dennoch, weil ich weiß, daß für einen Film-Editor des geplanten Kallibers alle diese abgefuckten Sonderfälle dann später auch tatsächlich gefordert und eingesetzt werden)</font> 
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
|
|
@ -94552,26 +94545,28 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1735780756823" ID="ID_1015981716" MODIFIED="1735780763078" TEXT="Umbau!">
|
||||
<icon BUILTIN="flag-pink"/>
|
||||
<node CREATED="1735780764829" ID="ID_819223004" MODIFIED="1735780789925" TEXT="den »Slot« in einen statischen Accessor umschreiben">
|
||||
<node COLOR="#338800" CREATED="1735780756823" ID="ID_1015981716" MODIFIED="1735786874406" TEXT="Umbau!">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1735780764829" ID="ID_819223004" MODIFIED="1735786878694" TEXT="den »Slot« in einen statischen Accessor umschreiben">
|
||||
<node CREATED="1735783005113" ID="ID_686667351" MODIFIED="1735783018619" TEXT="hier wäre der Back-Link auf die Spec gradezu gemeingefährlich"/>
|
||||
<node CREATED="1735783020065" ID="ID_1376680768" MODIFIED="1735783041921" TEXT="im Grunde braucht man hier nur den Typ, den man in andere Accessor-Funktoren einbettet">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1735780792553" ID="ID_598255406" MODIFIED="1735781123512" TEXT="dafür eine makeBlockBuilder()-Funktion (destruktiv)">
|
||||
<node COLOR="#435e98" CREATED="1735780792553" ID="ID_598255406" MODIFIED="1735786880350" TEXT="dafür eine makeBlockBuilder()-Funktion (destruktiv)">
|
||||
<node CREATED="1735780814414" ID="ID_971841806" MODIFIED="1735780821795" TEXT="schiebt das Funktoren-Tupel dorthin"/>
|
||||
<node CREATED="1735780823097" ID="ID_363538159" MODIFIED="1735780849748" TEXT="die sonstige Spec sollte keinen direkten Bezug auf die Funktoren mehr haben"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1735783048795" ID="ID_1635709601" MODIFIED="1735783108281" TEXT="der BlockBuilder wandert dann in das WeavingPattern">
|
||||
<node COLOR="#435e98" CREATED="1735783048795" ID="ID_1635709601" MODIFIED="1735786883950" TEXT="der BlockBuilder wandert dann in das WeavingPattern">
|
||||
<arrowlink COLOR="#3538b8" DESTINATION="ID_487478594" ENDARROW="Default" ENDINCLINATION="16;-84;" ID="Arrow_ID_602775247" STARTARROW="None" STARTINCLINATION="-450;23;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1735783082614" ID="ID_487478594" MODIFIED="1735783101705" TEXT="BlockBuilder">
|
||||
<node COLOR="#435e98" CREATED="1735783082614" ID="ID_487478594" MODIFIED="1735786895446" TEXT="BlockBuilder">
|
||||
<linktarget COLOR="#3538b8" DESTINATION="ID_487478594" ENDARROW="Default" ENDINCLINATION="16;-84;" ID="Arrow_ID_602775247" SOURCE="ID_1635709601" STARTARROW="None" STARTINCLINATION="-450;23;"/>
|
||||
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
|
||||
<icon BUILTIN="forward"/>
|
||||
<node COLOR="#435e98" CREATED="1735783113618" ID="ID_853147988" MODIFIED="1735783152469" TEXT="ist der Terminal-Build-Schritt aus einer Spec">
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
|
|
@ -94579,17 +94574,72 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1735853717958" ID="ID_1283283019" MODIFIED="1735853788068" TEXT="PostProcessor">
|
||||
<node CREATED="1735853724797" ID="ID_576524085" MODIFIED="1735853737791" TEXT="function<void(TurnoutSystem&>)"/>
|
||||
<node CREATED="1735853739462" ID="ID_600675024" MODIFIED="1735853769179" TEXT="sieht bereits die erzeugten Daten und kann sie noch aufbereiten und verknüpfen"/>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1735853780334" ID="ID_973032450" MODIFIED="1735853788069" TEXT="Delegate-Port">
|
||||
<node CREATED="1735853791636" ID="ID_1555898520" MODIFIED="1735853800765" TEXT="wird rekursiv im Scope aufgerufen"/>
|
||||
<node CREATED="1735853802011" ID="ID_1786497684" MODIFIED="1735853850153" TEXT="eingeschlossene Nodes/Ports können per paramter-functor auf die Parameter zugreifen"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1735354094901" ID="ID_357401280" LINK="#ID_1484484879" MODIFIED="1735416065935" TEXT="Grundstruktur / Schrittfolge">
|
||||
<node CREATED="1735354099466" ID="ID_1086019960" MODIFIED="1735354156573" TEXT="mount : Feed-Frame erzeugen"/>
|
||||
<node CREATED="1735354158273" ID="ID_1400465949" MODIFIED="1735354198247" TEXT="pull : Param-Funktor aufrufen und Tupel erstellen"/>
|
||||
<node CREATED="1735354158273" ID="ID_1400465949" MODIFIED="1735839974225" TEXT="pull : Param-Funktor aufrufen und Param-Daten generieren"/>
|
||||
<node CREATED="1735354209348" ID="ID_1189493104" MODIFIED="1735354256129" TEXT="shed : Chain-Block erstellen und nachverarbeiten">
|
||||
<node CREATED="1735775241705" ID="ID_324071186" MODIFIED="1735775250821" TEXT="Link in das Turnout-System"/>
|
||||
</node>
|
||||
<node CREATED="1735354287727" ID="ID_348185915" MODIFIED="1735354316106" TEXT="weft : Target-Node aufrufen"/>
|
||||
<node CREATED="1735354360652" ID="ID_128985053" MODIFIED="1735354376078" TEXT="fix : Chain-Block abhängen und Output-Buffer zurückggeben"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1735840381592" ID="ID_451855978" MODIFIED="1735840578272" TEXT="Diskussion / Zweifel">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1735840478887" ID="ID_743455927" MODIFIED="1735840497889" TEXT="das mit dem »Weaving-Pattern« erscheint willkürlich">
|
||||
<node CREATED="1735841184088" ID="ID_1956237484" MODIFIED="1735841195299" TEXT="im Besonderen die Aufruf-Parameter passen nicht">
|
||||
<node CREATED="1735842992849" ID="ID_255773054" MODIFIED="1735843139194" TEXT="....dann sollte man diese angleichen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
mit dem Ziel, die Einteilung des Weaving-Schemas zu erhalten und universeller nutzbar zu machen
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<linktarget COLOR="#dae6f4" DESTINATION="ID_255773054" ENDARROW="Default" ENDINCLINATION="121;149;" ID="Arrow_ID_1145206955" SOURCE="ID_1242855477" STARTARROW="None" STARTINCLINATION="68;7;"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1735842413716" ID="ID_1956076232" MODIFIED="1735842442352" TEXT="diese sind aber der einzige konkrete Unterschied in den Methoden"/>
|
||||
<node CREATED="1735842754765" ID="ID_1751038926" MODIFIED="1735842960627" TEXT="die Bedeutung der Schritte ist ideell">
|
||||
<arrowlink COLOR="#fefde2" DESTINATION="ID_311986134" ENDARROW="Default" ENDINCLINATION="-14;-140;" ID="Arrow_ID_974408569" STARTARROW="None" STARTINCLINATION="-42;3;"/>
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1735840499381" ID="ID_1164540853" MODIFIED="1735840514990" TEXT="eigentlich wäre ein einziger Methoden-Scope viel einfacher">
|
||||
<node CREATED="1735840533872" ID="ID_1476649083" MODIFIED="1735840552275" TEXT="dann würde sogar die UninitialisedStorage wegfallen"/>
|
||||
<node CREATED="1735840877817" ID="ID_1946328043" MODIFIED="1735840884667" TEXT="und damit auch der Feed"/>
|
||||
</node>
|
||||
<node CREATED="1735840983354" ID="ID_163798204" MODIFIED="1735841006387" TEXT="andererseits habe ich nun Turnout festgelegt auf das Weaving-Pattern-Schema"/>
|
||||
<node CREATED="1735841008467" ID="ID_1895614723" MODIFIED="1735841037735" TEXT="das heißt, es müßte eine alternative Port-Implementierung sein">
|
||||
<node CREATED="1735841057608" ID="ID_1138290614" MODIFIED="1735841067182" TEXT="und das ist auch wieder schlecht"/>
|
||||
<node CREATED="1735841068719" ID="ID_706216251" MODIFIED="1735841081018" TEXT="da noch ein weiterer Extension-Point / Freiheits-Grad"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1735842777063" ID="ID_311986134" MODIFIED="1735842960627" TEXT="es handelt sich um eine architektonische Ordnung">
|
||||
<linktarget COLOR="#fefde2" DESTINATION="ID_311986134" ENDARROW="Default" ENDINCLINATION="-14;-140;" ID="Arrow_ID_974408569" SOURCE="ID_1751038926" STARTARROW="None" STARTINCLINATION="-42;3;"/>
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1735842802502" ID="ID_1802914816" MODIFIED="1735842812713" TEXT="dadurch werden Räume eingeteilt"/>
|
||||
<node CREATED="1735842814052" ID="ID_244068487" MODIFIED="1735842820850" TEXT="und Ebenen unterschieden"/>
|
||||
<node CREATED="1735842887435" ID="ID_1242855477" MODIFIED="1735843049714" TEXT="sinnvoll zu respektieren">
|
||||
<arrowlink COLOR="#dae6f4" DESTINATION="ID_255773054" ENDARROW="Default" ENDINCLINATION="121;149;" ID="Arrow_ID_1145206955" STARTARROW="None" STARTINCLINATION="68;7;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1720620607691" ID="ID_1114186515" MODIFIED="1720620622602" TEXT="diese Invocation nun konfigurierbar machen">
|
||||
|
|
|
|||
Loading…
Reference in a new issue