Invocation: add flexible scheme for storage based on use case

We have now a roughly complete classification of possible use cases.
The invocation can only produce output, process input to output,
and can optionally also accept parameters.

Moreover, each of these cases can require an arbitrary number of actual arguments.
To support all these drastically different case by a common scheme,
`FeedManifold` now uses a »storage slice« for output, input and parameters,
which can be configured at compile time.

TODO: there is an unresolved bug in the test-helper code for the `DiagnosticHeapBlockProvider`,
which prevents us to embed constructor arguments into a buffer descriptor
This commit is contained in:
Fischlurch 2024-12-16 02:26:26 +01:00
parent a477c5953b
commit 39fee624a9
3 changed files with 229 additions and 55 deletions

View file

@ -58,8 +58,16 @@
** - the trait functions #hasInput() and #hasParam() should be used by downstream code ** - the trait functions #hasInput() and #hasParam() should be used by downstream code
** to find out if some part of the storage is present and branch accordingly ** to find out if some part of the storage is present and branch accordingly
** @todo 12/2024 figure out how constructor-arguments can be passed flexibly ** @todo 12/2024 figure out how constructor-arguments can be passed flexibly
** @todo staled since 2009, picked up in 2024 in an attempt to finish the node invocation. ** @remark in the first draft version of the Render Engine from 2009/2012, there was an entity
** @todo WIP-WIP 2024 rename and re-interpret as a connection system ** called `BuffTable`, which however provided additional buffer-management functionality.
** This name describes well the basic functionality, which can be hard to see with all
** this additional meta-programming related to the flexible functor signature. When it
** comes to actual invocation, we collect input buffers from predecessor nodes and
** we prepare output buffers, and then we pass both to a processing function.
**
** @todo WIP-WIP 12/2024 now about to introduce support for arbitrary parameters into the
** Render-Engine code, which has been reworked for the »Playback Vertical Slice«.
** We have still to reach the point were the engine becomes operational!!!
** @see NodeBase_test ** @see NodeBase_test
** @see weaving-pattern-builder.hpp ** @see weaving-pattern-builder.hpp
*/ */
@ -75,6 +83,7 @@
#include "steam/engine/buffhandle.hpp" #include "steam/engine/buffhandle.hpp"
#include "lib/uninitialised-storage.hpp" #include "lib/uninitialised-storage.hpp"
#include "lib/meta/function.hpp" #include "lib/meta/function.hpp"
#include "lib/meta/trait.hpp"
#include "lib/meta/typeseq-util.hpp" #include "lib/meta/typeseq-util.hpp"
//#include "lib/several.hpp" //#include "lib/several.hpp"
@ -82,7 +91,7 @@
//#include <array> //#include <array>
////////////////////////////////TICKET #826 will be reworked alltogether ////////////////////////////////TICKET #826 12/2024 the invocation sequence has been reworked and reoriented for integration with the Scheduler
namespace steam { namespace steam {
namespace engine { namespace engine {
@ -206,26 +215,67 @@ namespace engine {
using SigI = _Arg<FUN,_Case<Sig>::SLOT_I>; using SigI = _Arg<FUN,_Case<Sig>::SLOT_I>;
using SigO = _Arg<FUN,_Case<Sig>::SLOT_O>; using SigO = _Arg<FUN,_Case<Sig>::SLOT_O>;
using SigP = _Arg<FUN, 0>;
using BuffI = typename _ArgTrait<SigI>::Buff; using BuffI = typename _ArgTrait<SigI>::Buff;
using BuffO = typename _ArgTrait<SigO>::Buff; using BuffO = typename _ArgTrait<SigO>::Buff;
enum{ FAN_I = _ArgTrait<SigI>::SIZ enum{ FAN_I = _ArgTrait<SigI>::SIZ
, FAN_O = _ArgTrait<SigO>::SIZ , FAN_O = _ArgTrait<SigO>::SIZ
, FAN_P = _ArgTrait<SigP>::SIZ
, SLOT_I = _Case<Sig>::SLOT_I , SLOT_I = _Case<Sig>::SLOT_I
, SLOT_O = _Case<Sig>::SLOT_O , SLOT_O = _Case<Sig>::SLOT_O
, SLOT_P = 0
, MAXSZ = std::max (uint(FAN_I), uint(FAN_O)) /////////////////////OOO required temporarily until the switch to tuples , MAXSZ = std::max (uint(FAN_I), uint(FAN_O)) /////////////////////OOO required temporarily until the switch to tuples
}; };
static constexpr bool hasInput() { return SLOT_I != SLOT_O; } static constexpr bool hasInput() { return SLOT_I != SLOT_O; }
static constexpr bool hasParam() { return 0 < SLOT_I; } static constexpr bool hasParam() { return 0 < SLOT_I; }
}; };
template<class FUN>
struct ParamStorage
{
using ParSig = typename _ProcFun<FUN>::SigP;
ParSig param;
};
template<class FUN>
struct BufferSlot_Input
{
using BuffS = lib::UninitialisedStorage<BuffHandle, _ProcFun<FUN>::FAN_I>;
using ArgSig = typename _ProcFun<FUN>::SigI;
BuffS inBuff;
ArgSig inArgs;
};
template<class FUN>
struct BufferSlot_Output
{
using BuffS = lib::UninitialisedStorage<BuffHandle, _ProcFun<FUN>::FAN_O>;
using ArgSig = typename _ProcFun<FUN>::SigO;
BuffS outBuff;
ArgSig outArgs;
};
template<class X>
struct NotProvided : lib::meta::NullType { };
template<bool yes, class B>
using Provide_if = std::conditional_t<yes, B, NotProvided<B>>;
}//(End)Introspection helpers. }//(End)Introspection helpers.
template<class FUN> template<class FUN>
struct FeedManifold_StorageSetup struct FeedManifold_StorageSetup
: util::NonCopyable : util::NonCopyable
, BufferSlot_Output<FUN>
, Provide_if<_ProcFun<FUN>::hasInput(), BufferSlot_Input<FUN>>
, Provide_if<_ProcFun<FUN>::hasParam(), ParamStorage<FUN>>
{ {
}; };
@ -239,7 +289,7 @@ namespace engine {
* This setup is used by a »weaving pattern« within the invocation of a processing node for the * This setup is used by a »weaving pattern« within the invocation of a processing node for the
* purpose of media processing or data calculation. * purpose of media processing or data calculation.
* *
* @todo WIP-WIP-WIP 7/24 now reworking the old design in the light of actual render engine requirements... * @todo WIP-WIP 12/24 now adding support for arbitrary parameters /////////////////////////////////////TICKET #1386
*/ */
template<class FUN> template<class FUN>
struct FoldManifeed struct FoldManifeed

View file

@ -23,6 +23,8 @@
#include "steam/engine/turnout.hpp" #include "steam/engine/turnout.hpp"
#include "steam/engine/turnout-system.hpp" #include "steam/engine/turnout-system.hpp"
#include "steam/engine/feed-manifold.hpp" #include "steam/engine/feed-manifold.hpp"
#include "steam/engine/diagnostic-buffer-provider.hpp"
#include "steam/engine/buffhandle-attach.hpp"
//#include "lib/format-cout.hpp" //#include "lib/format-cout.hpp"
//#include "lib/util.hpp" //#include "lib/util.hpp"
@ -80,6 +82,21 @@ namespace test {
using M1 = FeedManifold<decltype(fun_singleOut)>; using M1 = FeedManifold<decltype(fun_singleOut)>;
CHECK (not M1::hasInput()); CHECK (not M1::hasInput());
CHECK (not M1::hasParam()); CHECK (not M1::hasParam());
M1 m1{};
CHECK (1 == m1.outBuff.array().size());
CHECK (nullptr == m1.outArgs );
// CHECK (m1.inArgs ); // does not compile because storage field is not provided
// CHECK (m1.param );
BufferProvider& provider = DiagnosticBufferProvider::build();
BuffHandle buff = provider.lockBufferFor<long>(); ////////////////////////////OOO can not pass ctor-args directly here
buff.accessAs<long>() = -55;
CHECK (buff.isValid());
CHECK (buff.accessAs<long>() == -55);
m1.outBuff.createAt (0, buff);
CHECK (m1.outBuff[0].isValid());
CHECK (m1.outBuff[0].accessAs<long>() == -55);
} }
}; };

View file

@ -23948,9 +23948,7 @@
<node CREATED="1611918741213" ID="ID_396002411" MODIFIED="1611918753315" TEXT="indirekte Triggerbedingung"> <node CREATED="1611918741213" ID="ID_396002411" MODIFIED="1611918753315" TEXT="indirekte Triggerbedingung">
<node CREATED="1611918756795" ID="ID_1406903463" MODIFIED="1611919419969"> <node CREATED="1611918756795" ID="ID_1406903463" MODIFIED="1611919419969">
<richcontent TYPE="NODE"><html> <richcontent TYPE="NODE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
isnil (<font color="#293bcd">profile_</font>) isnil (<font color="#293bcd">profile_</font>)
@ -24591,9 +24589,7 @@
<icon BUILTIN="hourglass"/> <icon BUILTIN="hourglass"/>
<node COLOR="#435e98" CREATED="1617470705305" HGAP="40" ID="ID_644438911" MODIFIED="1674161854370" TEXT="Stand: vorl&#xe4;ufige Implementierung" VSHIFT="6"> <node COLOR="#435e98" CREATED="1617470705305" HGAP="40" ID="ID_644438911" MODIFIED="1674161854370" TEXT="Stand: vorl&#xe4;ufige Implementierung" VSHIFT="6">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
erst mal nur mit einem Button, und die Layout-Logik ehr &quot;gesch&#228;tzt&quot; den pr&#228;zise verstanden und umgesetzt. Immerhinn l&#228;uft der DisplayEvaluationPass nun, und auch die Buttons erscheinen an der Stelle, an der ich das erwarten w&#252;rde... erst mal nur mit einem Button, und die Layout-Logik ehr &quot;gesch&#228;tzt&quot; den pr&#228;zise verstanden und umgesetzt. Immerhinn l&#228;uft der DisplayEvaluationPass nun, und auch die Buttons erscheinen an der Stelle, an der ich das erwarten w&#252;rde...
@ -25183,9 +25179,7 @@
<node CREATED="1612025095479" ID="ID_1775295616" MODIFIED="1612025105906" TEXT="der Clip bleibt wo er ist (am falschen Ort)"/> <node CREATED="1612025095479" ID="ID_1775295616" MODIFIED="1612025105906" TEXT="der Clip bleibt wo er ist (am falschen Ort)"/>
<node CREATED="1612025106830" ID="ID_1695696156" MODIFIED="1612025160707" TEXT="auch die anderen Layout-Anpassungen erfolgen erst beim n&#xe4;chsten Trigger"> <node CREATED="1612025106830" ID="ID_1695696156" MODIFIED="1612025160707" TEXT="auch die anderen Layout-Anpassungen erfolgen erst beim n&#xe4;chsten Trigger">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
also z.B: wenn man das TestControl schlie&#223;t, oder auch nur den Fokus an das Lumiera-Hauptfenster gibt also z.B: wenn man das TestControl schlie&#223;t, oder auch nur den Fokus an das Lumiera-Hauptfenster gibt
@ -25940,9 +25934,7 @@
<node CREATED="1573425794934" ID="ID_1806364197" MODIFIED="1573425808512" TEXT="man kann zwar indirekt die Kind-Elemente enumerieren"/> <node CREATED="1573425794934" ID="ID_1806364197" MODIFIED="1573425808512" TEXT="man kann zwar indirekt die Kind-Elemente enumerieren"/>
<node CREATED="1573425814356" ID="ID_684750058" MODIFIED="1575133305653" TEXT="und man kann per Container::remove() ein Widget entfernen"> <node CREATED="1573425814356" ID="ID_684750058" MODIFIED="1575133305653" TEXT="und man kann per Container::remove() ein Widget entfernen">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
und m&#252;&#223;te es danach explizit manuell l&#246;schen!! und m&#252;&#223;te es danach explizit manuell l&#246;schen!!
@ -27077,9 +27069,7 @@
<node CREATED="1677238946963" ID="ID_872231218" MODIFIED="1677238966708" TEXT="3D-CAD Software f&#xfc;r Bauteil-Konstruktion"> <node CREATED="1677238946963" ID="ID_872231218" MODIFIED="1677238966708" TEXT="3D-CAD Software f&#xfc;r Bauteil-Konstruktion">
<node CREATED="1677238982982" ID="ID_778717508" MODIFIED="1677239008236" TEXT="Paradigma: dynamisch-funktional"> <node CREATED="1677238982982" ID="ID_778717508" MODIFIED="1677239008236" TEXT="Paradigma: dynamisch-funktional">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
man zeichnet nicht, sondern man stellt eine Liste von Operationen zusammen man zeichnet nicht, sondern man stellt eine Liste von Operationen zusammen
@ -28909,9 +28899,7 @@
<icon BUILTIN="info"/> <icon BUILTIN="info"/>
<node CREATED="1557414397598" ID="ID_1788944843" MODIFIED="1557498707228" TEXT="der std::apply-Mechanismus funktioniert nur direkt"> <node CREATED="1557414397598" ID="ID_1788944843" MODIFIED="1557498707228" TEXT="der std::apply-Mechanismus funktioniert nur direkt">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
d.h er funktioniert nur, wenn man das std::get&lt;idx&gt; (tuple) unmittelbar an den jeweiligen Ziel-Parameter bindet d.h er funktioniert nur, wenn man das std::get&lt;idx&gt; (tuple) unmittelbar an den jeweiligen Ziel-Parameter bindet
@ -29154,9 +29142,7 @@
<node CREATED="1555807861314" ID="ID_352919826" MODIFIED="1557498707229" TEXT="geht das &#xfc;berhaupt?"/> <node CREATED="1555807861314" ID="ID_352919826" MODIFIED="1557498707229" TEXT="geht das &#xfc;berhaupt?"/>
<node CREATED="1555807866689" ID="ID_1851833268" MODIFIED="1557498707229" TEXT="w&#xfc;rde vermutlich auf ein Builder-Konstrukt hinauslaufen"> <node CREATED="1555807866689" ID="ID_1851833268" MODIFIED="1557498707229" TEXT="w&#xfc;rde vermutlich auf ein Builder-Konstrukt hinauslaufen">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
...etwas analog zu meinem TreeMutator. ...etwas analog zu meinem TreeMutator.
@ -32839,9 +32825,7 @@
</node> </node>
<node CREATED="1564868280687" ID="ID_593595518" MODIFIED="1564871156101" TEXT="es hilft nichts, wenn man den Screen (nochmal) setzt"> <node CREATED="1564868280687" ID="ID_593595518" MODIFIED="1564871156101" TEXT="es hilft nichts, wenn man den Screen (nochmal) setzt">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
und ja, den Screen sollte man generell setzten.<br />Steht auch so in der Doku. und ja, den Screen sollte man generell setzten.<br />Steht auch so in der Doku.
@ -33526,9 +33510,7 @@
</node> </node>
<node CREATED="1582923916162" ID="ID_879903056" MODIFIED="1582923946222"> <node CREATED="1582923916162" ID="ID_879903056" MODIFIED="1582923946222">
<richcontent TYPE="NODE"><html> <richcontent TYPE="NODE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
daher Policy &#228;ndern: jeder schl&#228;gt den <b>totalen absoluten</b>&#160; Offset drauf daher Policy &#228;ndern: jeder schl&#228;gt den <b>totalen absoluten</b>&#160; Offset drauf
@ -35555,9 +35537,7 @@
<node CREATED="1504200743610" ID="ID_1973994759" MODIFIED="1679362063119" TEXT="&#xdc;bergangsweise...."> <node CREATED="1504200743610" ID="ID_1973994759" MODIFIED="1679362063119" TEXT="&#xdc;bergangsweise....">
<node CREATED="1504200750905" ID="ID_1728645080" MODIFIED="1679359485827" TEXT="gab es noch eine ZombieTimeline"> <node CREATED="1504200750905" ID="ID_1728645080" MODIFIED="1679359485827" TEXT="gab es noch eine ZombieTimeline">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
Zum Abschlu&#223; der GUI-&#220;berarbeitung 3/23 habe ich diese Zombie-Timeline tot gemacht Zum Abschlu&#223; der GUI-&#220;berarbeitung 3/23 habe ich diese Zombie-Timeline tot gemacht
@ -36847,9 +36827,7 @@
</node> </node>
<node CREATED="1539134224759" ID="ID_766070060" MODIFIED="1576282358024" TEXT="Struktur und Realisierung gemeinsam gepusht"> <node CREATED="1539134224759" ID="ID_766070060" MODIFIED="1576282358024" TEXT="Struktur und Realisierung gemeinsam gepusht">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<ul> <ul>
<li> <li>
@ -37544,9 +37522,7 @@
</node> </node>
<node CREATED="1615563869355" ID="ID_411566224" MODIFIED="1615563956504" TEXT="Zeiger verwenden, und keine Registry"> <node CREATED="1615563869355" ID="ID_411566224" MODIFIED="1615563956504" TEXT="Zeiger verwenden, und keine Registry">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
Registry hat zus&#228;tzlichen Overhead (sowohl Speicher, alsauch Management) und ist nur sinnvoll, wenn eine ID in mehreren Objekten vorkommt, oder die ID aus mehreren Thread-Kontexten ben&#246;tigt wird Registry hat zus&#228;tzlichen Overhead (sowohl Speicher, alsauch Management) und ist nur sinnvoll, wenn eine ID in mehreren Objekten vorkommt, oder die ID aus mehreren Thread-Kontexten ben&#246;tigt wird
@ -37903,9 +37879,7 @@
</node> </node>
<node COLOR="#338800" CREATED="1617471493055" ID="ID_1798821612" MODIFIED="1617568252066" TEXT="Makro in einen zentralen Header verlegen"> <node COLOR="#338800" CREATED="1617471493055" ID="ID_1798821612" MODIFIED="1617568252066" TEXT="Makro in einen zentralen Header verlegen">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
habs in error.hpp untergebracht, direkt unter ERROR_LOG_AND_IGNORE habs in error.hpp untergebracht, direkt unter ERROR_LOG_AND_IGNORE
@ -38668,9 +38642,7 @@
</node> </node>
<node CREATED="1619887281662" ID="ID_843790040" MODIFIED="1619887627626" TEXT="Spezial-Konventionen bl&#xe4;hen das API auf"> <node CREATED="1619887281662" ID="ID_843790040" MODIFIED="1619887627626" TEXT="Spezial-Konventionen bl&#xe4;hen das API auf">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
...wenn man nun eine fest-vorbereitete L&#246;sung f&#252;r jeden Fall vorsieht, wird die Schnittstelle bereit, un&#252;bersichtlich und k&#246;nnte im Lauf der Zeit verwuchern. Zudem mu&#223; eine komplexe Konvention errichtet werden, wer wann f&#252;r wen welche Variante aufruft ...wenn man nun eine fest-vorbereitete L&#246;sung f&#252;r jeden Fall vorsieht, wird die Schnittstelle bereit, un&#252;bersichtlich und k&#246;nnte im Lauf der Zeit verwuchern. Zudem mu&#223; eine komplexe Konvention errichtet werden, wer wann f&#252;r wen welche Variante aufruft
@ -88539,6 +88511,124 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node> </node>
</node> </node>
</node> </node>
<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="-207;13;" ID="Arrow_ID_640616380" SOURCE="ID_1710382999" STARTARROW="None" STARTINCLINATION="-2974;268;"/>
<icon BUILTIN="pencil"/>
<node CREATED="1734310213994" ID="ID_691754137" MODIFIED="1734310241708" TEXT="mehrere Varianten von Funktions-Signaturen vorstellen">
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734310245306" ID="ID_1881940952" MODIFIED="1734310329959" TEXT="reiner Output mit einem Buffer">
<icon BUILTIN="pencil"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734310278618" ID="ID_1569263616" MODIFIED="1734310327545" TEXT="Input &#x27fc; Output mit einem Buffer">
<icon BUILTIN="flag-yellow"/>
</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"/>
</node>
</node>
<node CREATED="1734310333302" ID="ID_1944960168" MODIFIED="1734310341752" TEXT="jeweils eine Manifold erstellen"/>
<node CREATED="1734310343475" ID="ID_594704625" MODIFIED="1734310357870" TEXT="mit einem Test-BuffHandle beschicken">
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1734310375328" ID="ID_126539331" MODIFIED="1734310384120" TEXT="Test-Setup funktioniert nicht">
<icon BUILTIN="broken-line"/>
<node CREATED="1734310554672" ID="ID_1304749247" MODIFIED="1734310563567" TEXT="der Shortcut BufferProvider::lockBufferFor(args...)"/>
<node CREATED="1734310565998" ID="ID_1313467025" MODIFIED="1734310582156" TEXT="hatte ihn bisher stets ohne konkrete Argumente verwendet">
<icon BUILTIN="smiley-oh"/>
</node>
<node CREATED="1734310588763" ID="ID_1230270056" MODIFIED="1734310609188" TEXT="Implementierung erzeugt on-the-fly einen Binder">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734310612849" ID="ID_433175533" MODIFIED="1734310625690" TEXT="Untersuchung">
<icon BUILTIN="forward"/>
<node CREATED="1734310670231" ID="ID_179795775" MODIFIED="1734310853961" STYLE="bubble">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
<font face="Monospaced" size="2">&#160;&#160;&#160;&#160;template&lt;class X, typename...ARGS&gt; </font>
</p>
<p>
<font face="Monospaced" size="2">&#160;&#160;&#160;&#160;inline void </font>
</p>
<p>
<font face="Monospaced" size="2">&#160;&#160;&#160; <b>buildIntoBuffer</b>&#160;(void* storageBuffer, ARGS&amp;&amp; ...args) </font>
</p>
<p>
<font face="Monospaced" size="2">&#160;&#160;&#160;&#160;{ </font>
</p>
<p>
<font face="Monospaced" size="2">&#160;&#160;&#160;&#160;&#160;&#160;new(storageBuffer) X(forward&lt;ARGS&gt; (args)...); </font>
</p>
<p>
<font face="Monospaced" size="2">&#160;&#160;&#160;&#160;} </font>
</p>
<p>
</p>
<p>
</p>
<p>
<font face="Monospaced" size="2">&#160;&#160;&#160;&#160;&#160;&#160;template&lt;class X, typename...ARGS&gt; </font>
</p>
<p>
<font face="Monospaced" size="2">&#160;&#160;&#160;&#160;&#160;&#160;static TypeHandler </font>
</p>
<p>
<font face="Monospaced" size="2">&#160;&#160;&#160;&#160;&#160;&#160;create (ARGS&amp;&amp; ...args) </font>
</p>
<p>
<font face="Monospaced" size="2">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{ </font>
</p>
<p>
<font face="Monospaced" size="2">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return TypeHandler ( </font><font color="#9d0404" face="Monospaced" size="2">bind (<b>buildIntoBuffer</b>&lt;X,ARGS...&gt;, </font><font color="#c65900" face="Monospaced" size="2"><b>_1</b></font><font color="#9d0404" face="Monospaced" size="2">, forward&lt;ARGS&gt; (args)...)</font>
</p>
<p>
<font face="Monospaced" size="2">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;, destroyInBuffer&lt;X&gt;); </font>
</p>
<p>
<font face="Monospaced" size="2">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}</font>
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1734310629446" ID="ID_509553711" MODIFIED="1734311171944" TEXT="Symtom: der Binder kann nicht in eine std::function gepackt werden">
<icon BUILTIN="info"/>
<node CREATED="1734310920831" ID="ID_1089821263" MODIFIED="1734311025297">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
<font face="Monospaced" size="1">no matching function for call to </font>
</p>
<p>
<font face="Monospaced" size="1">&#160;&#160;std::function&lt;void(void*)&gt;::function(</font><font face="Monospaced" size="1" color="#b90563">std::<b>_Bind</b>&lt;void (*(std::_Placeholder&lt;1&gt;, int))(void*, int&amp;&amp;)&gt;</font><font face="Monospaced" size="1">&amp;)</font>
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1734311048512" ID="ID_1681074174" MODIFIED="1734311077645" TEXT="weiter oben im Type-Stack sieht man bereits, da&#xdf; dies der Template-Parameter CTOR ist"/>
<node CREATED="1734311079017" ID="ID_1399777845" MODIFIED="1734311159072">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
<font face="Monospaced" size="2">with </font><font face="Monospaced" size="2" color="#710b0b">CTOR</font><font face="Monospaced" size="2">&#160;= std::_<b>Bind</b>&lt;</font><font face="Monospaced" size="2" color="#420477">void (*(std::_Placeholder&lt;1&gt;, int))(void*, int&amp;&amp;)</font><font face="Monospaced" size="2">&gt;;</font>
</p>
</body>
</html>
</richcontent>
<linktarget COLOR="#a502af" DESTINATION="ID_1399777845" ENDARROW="Default" ENDINCLINATION="77;114;" ID="Arrow_ID_1332245965" SOURCE="ID_1282234493" STARTARROW="None" STARTINCLINATION="221;17;"/>
</node>
</node>
<node COLOR="#5b280f" CREATED="1734311128476" ID="ID_1282234493" MODIFIED="1734311165943" TEXT="ich vestehe diese Typ-Signatur nicht">
<arrowlink COLOR="#a502af" DESTINATION="ID_1399777845" ENDARROW="Default" ENDINCLINATION="77;114;" ID="Arrow_ID_1332245965" STARTARROW="None" STARTINCLINATION="221;17;"/>
<icon BUILTIN="stop-sign"/>
</node>
</node>
</node>
</node>
</node>
<node CREATED="1734310359146" ID="ID_1656582564" MODIFIED="1734310361422" TEXT="aufrufen"/>
</node>
</node> </node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1733525831136" ID="ID_1553180375" MODIFIED="1733527489987" TEXT="NodeBuilder_test"> <node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1733525831136" ID="ID_1553180375" MODIFIED="1733527489987" TEXT="NodeBuilder_test">
<icon BUILTIN="flag-yellow"/> <icon BUILTIN="flag-yellow"/>
@ -91417,8 +91507,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
vorsicht Falle: Parameter werden oft per Referenz genommen vorsicht Falle: Parameter werden oft per Referenz genommen
</p> </p>
</body> </body>
</html> </html></richcontent>
</richcontent>
</node> </node>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1734299828371" ID="ID_107221686" MODIFIED="1734299851058" TEXT="diese Einschr&#xe4;nkung setze ich hier explizit"> <node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1734299828371" ID="ID_107221686" MODIFIED="1734299851058" TEXT="diese Einschr&#xe4;nkung setze ich hier explizit">
<font ITALIC="true" NAME="SansSerif" SIZE="14"/> <font ITALIC="true" NAME="SansSerif" SIZE="14"/>
@ -91443,8 +91532,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
ich mu&#223; f&#252;r die strukturierten F&#228;lle eine eingene Trait-Spezialisierung anlegen ich mu&#223; f&#252;r die strukturierten F&#228;lle eine eingene Trait-Spezialisierung anlegen
</p> </p>
</body> </body>
</html> </html></richcontent>
</richcontent>
</node> </node>
</node> </node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1734299948322" ID="ID_1928109484" MODIFIED="1734299969936" TEXT="verlange auch..."> <node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1734299948322" ID="ID_1928109484" MODIFIED="1734299969936" TEXT="verlange auch...">
@ -91463,8 +91551,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1734300037782" ID="ID_1265960300" MODIFIED="1734300045369" TEXT="daf&#xfc;r aber Funktoren"/> <node CREATED="1734300037782" ID="ID_1265960300" MODIFIED="1734300045369" TEXT="daf&#xfc;r aber Funktoren"/>
</node> </node>
<node CREATED="1734299605025" ID="ID_822733161" MODIFIED="1734299941744" TEXT="is_Structured"> <node CREATED="1734299605025" ID="ID_822733161" MODIFIED="1734299941744" TEXT="is_Structured">
<linktarget COLOR="#685a75" DESTINATION="ID_822733161" ENDARROW="Default" ENDINCLINATION="15;31;" ID="Arrow_ID_1498083496" SOURCE="ID_300211802" STARTARROW="None" STARTINCLINATION="83;5;"/>
<linktarget COLOR="#a9b4c1" DESTINATION="ID_822733161" ENDARROW="Default" ENDINCLINATION="-14;-32;" ID="Arrow_ID_990958884" SOURCE="ID_109395935" STARTARROW="None" STARTINCLINATION="-92;-2;"/> <linktarget COLOR="#a9b4c1" DESTINATION="ID_822733161" ENDARROW="Default" ENDINCLINATION="-14;-32;" ID="Arrow_ID_990958884" SOURCE="ID_109395935" STARTARROW="None" STARTINCLINATION="-92;-2;"/>
<linktarget COLOR="#685a75" DESTINATION="ID_822733161" ENDARROW="Default" ENDINCLINATION="15;31;" ID="Arrow_ID_1498083496" SOURCE="ID_300211802" STARTARROW="None" STARTINCLINATION="83;5;"/>
<node CREATED="1734299688214" ID="ID_1568952693" MODIFIED="1734299696272" TEXT="im C++ selber gibt es daf&#xfc;r noch nichts"/> <node CREATED="1734299688214" ID="ID_1568952693" MODIFIED="1734299696272" TEXT="im C++ selber gibt es daf&#xfc;r noch nichts"/>
<node CREATED="1734299700012" ID="ID_1751899842" MODIFIED="1734299720075" TEXT="man kann &#xfc;ber die konstituierenden Funktionen gehen"> <node CREATED="1734299700012" ID="ID_1751899842" MODIFIED="1734299720075" TEXT="man kann &#xfc;ber die konstituierenden Funktionen gehen">
<icon BUILTIN="idea"/> <icon BUILTIN="idea"/>
@ -91489,8 +91577,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
Denn der weitere darauf aufbauende Code ist ebenfalls nicht ganz in Ordnung und ben&#246;tigt die Generalisierung, um dann grade gezogen zu werden... und ich f&#252;rchte die Situation, wo mir ein Berg von Template-Code um die Ohren fliegt Denn der weitere darauf aufbauende Code ist ebenfalls nicht ganz in Ordnung und ben&#246;tigt die Generalisierung, um dann grade gezogen zu werden... und ich f&#252;rchte die Situation, wo mir ein Berg von Template-Code um die Ohren fliegt
</p> </p>
</body> </body>
</html> </html></richcontent>
</richcontent>
<font NAME="SansSerif" SIZE="10"/> <font NAME="SansSerif" SIZE="10"/>
<icon BUILTIN="smiley-neutral"/> <icon BUILTIN="smiley-neutral"/>
</node> </node>
@ -91786,7 +91873,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node COLOR="#338800" CREATED="1734286473131" ID="ID_414275228" MODIFIED="1734300473228" TEXT="Prallell-Strukturen f&#xfc;r den &#xdc;bergang schaffen"> <node COLOR="#338800" CREATED="1734286473131" ID="ID_414275228" MODIFIED="1734300473228" TEXT="Prallell-Strukturen f&#xfc;r den &#xdc;bergang schaffen">
<icon BUILTIN="button_ok"/> <icon BUILTIN="button_ok"/>
</node> </node>
<node COLOR="#338800" CREATED="1734286485714" ID="ID_1348489291" MODIFIED="1734300437327" TEXT="im NodeBase_test versuchsweise instantiieren"> <node COLOR="#338800" CREATED="1734286485714" ID="ID_1348489291" MODIFIED="1734310492434" TEXT="im NodeBase_test versuchsweise instantiieren">
<arrowlink COLOR="#16a2aa" DESTINATION="ID_1710382999" ENDARROW="Default" ENDINCLINATION="539;-32;" ID="Arrow_ID_129574515" STARTARROW="None" STARTINCLINATION="183;11;"/>
<icon BUILTIN="button_ok"/> <icon BUILTIN="button_ok"/>
</node> </node>
<node CREATED="1734286523651" ID="ID_132315841" MODIFIED="1734286531775" TEXT="Fall-Unterscheidungen f&#xfc;r die Storage einf&#xfc;hren"/> <node CREATED="1734286523651" ID="ID_132315841" MODIFIED="1734286531775" TEXT="Fall-Unterscheidungen f&#xfc;r die Storage einf&#xfc;hren"/>
@ -91832,8 +91920,27 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node> </node>
</node> </node>
</node> </node>
<node CREATED="1734309978110" ID="ID_436098074" MODIFIED="1734309987990" TEXT="umgebaute FeedManifold testen...">
<node COLOR="#5b280f" CREATED="1734310000123" ID="ID_1140187367" MODIFIED="1734310088299" TEXT="der alte BuffTable_test ist unpassend &#x2014; weg damit">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
F&#252;r die BuffTable war fr&#252;her jede Menge Funktionalit&#228;t geplant, die inzwischen im BufferProvider realisiert wurde; der alte Test h&#228;ngt seit &gt;10 Jahren bei den Engine-Tests unimplementiert mit rum &#8212; es ist sinnlos, ihn nun umzuwidmen
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="button_cancel"/>
</node> </node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734133441531" ID="ID_109108903" MODIFIED="1734133509736" TEXT="Turnout-Sytem mit Storage implementieren"> <node CREATED="1734309990069" ID="ID_1710382999" MODIFIED="1734310510263" TEXT="angesiedelt in NodeBase_test">
<arrowlink COLOR="#406cd3" DESTINATION="ID_1954508996" ENDARROW="Default" ENDINCLINATION="-207;13;" 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;"/>
<icon BUILTIN="info"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734133441531" ID="ID_109108903" MODIFIED="1734133509736" TEXT="Turnout-System mit Storage implementieren">
<icon BUILTIN="flag-yellow"/> <icon BUILTIN="flag-yellow"/>
</node> </node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734133474862" ID="ID_1734639141" MODIFIED="1734133509736" TEXT="MediaWeavingPattern intern anpassen"> <node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734133474862" ID="ID_1734639141" MODIFIED="1734133509736" TEXT="MediaWeavingPattern intern anpassen">