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:
parent
a477c5953b
commit
39fee624a9
3 changed files with 229 additions and 55 deletions
|
|
@ -58,8 +58,16 @@
|
|||
** - 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
|
||||
** @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.
|
||||
** @todo WIP-WIP 2024 rename and re-interpret as a connection system
|
||||
** @remark in the first draft version of the Render Engine from 2009/2012, there was an entity
|
||||
** 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 weaving-pattern-builder.hpp
|
||||
*/
|
||||
|
|
@ -75,6 +83,7 @@
|
|||
#include "steam/engine/buffhandle.hpp"
|
||||
#include "lib/uninitialised-storage.hpp"
|
||||
#include "lib/meta/function.hpp"
|
||||
#include "lib/meta/trait.hpp"
|
||||
#include "lib/meta/typeseq-util.hpp"
|
||||
//#include "lib/several.hpp"
|
||||
|
||||
|
|
@ -82,7 +91,7 @@
|
|||
//#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 engine {
|
||||
|
|
@ -206,26 +215,67 @@ namespace engine {
|
|||
|
||||
using SigI = _Arg<FUN,_Case<Sig>::SLOT_I>;
|
||||
using SigO = _Arg<FUN,_Case<Sig>::SLOT_O>;
|
||||
using SigP = _Arg<FUN, 0>;
|
||||
|
||||
using BuffI = typename _ArgTrait<SigI>::Buff;
|
||||
using BuffO = typename _ArgTrait<SigO>::Buff;
|
||||
|
||||
enum{ FAN_I = _ArgTrait<SigI>::SIZ
|
||||
, FAN_O = _ArgTrait<SigO>::SIZ
|
||||
, FAN_P = _ArgTrait<SigP>::SIZ
|
||||
, SLOT_I = _Case<Sig>::SLOT_I
|
||||
, 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
|
||||
};
|
||||
|
||||
static constexpr bool hasInput() { return SLOT_I != SLOT_O; }
|
||||
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.
|
||||
|
||||
|
||||
template<class FUN>
|
||||
struct FeedManifold_StorageSetup
|
||||
: 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
|
||||
* 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>
|
||||
struct FoldManifeed
|
||||
|
|
|
|||
|
|
@ -23,6 +23,8 @@
|
|||
#include "steam/engine/turnout.hpp"
|
||||
#include "steam/engine/turnout-system.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/util.hpp"
|
||||
|
||||
|
|
@ -80,6 +82,21 @@ namespace test {
|
|||
using M1 = FeedManifold<decltype(fun_singleOut)>;
|
||||
CHECK (not M1::hasInput());
|
||||
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);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -23948,9 +23948,7 @@
|
|||
<node CREATED="1611918741213" ID="ID_396002411" MODIFIED="1611918753315" TEXT="indirekte Triggerbedingung">
|
||||
<node CREATED="1611918756795" ID="ID_1406903463" MODIFIED="1611919419969">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
isnil (<font color="#293bcd">profile_</font>)
|
||||
|
|
@ -24591,9 +24589,7 @@
|
|||
<icon BUILTIN="hourglass"/>
|
||||
<node COLOR="#435e98" CREATED="1617470705305" HGAP="40" ID="ID_644438911" MODIFIED="1674161854370" TEXT="Stand: vorläufige Implementierung" VSHIFT="6">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
erst mal nur mit einem Button, und die Layout-Logik ehr "geschätzt" den präzise verstanden und umgesetzt. Immerhinn läuft der DisplayEvaluationPass nun, und auch die Buttons erscheinen an der Stelle, an der ich das erwarten wü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="1612025106830" ID="ID_1695696156" MODIFIED="1612025160707" TEXT="auch die anderen Layout-Anpassungen erfolgen erst beim nächsten Trigger">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
also z.B: wenn man das TestControl schließ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="1573425814356" ID="ID_684750058" MODIFIED="1575133305653" TEXT="und man kann per Container::remove() ein Widget entfernen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
und müßte es danach explizit manuell löschen!!
|
||||
|
|
@ -27077,9 +27069,7 @@
|
|||
<node CREATED="1677238946963" ID="ID_872231218" MODIFIED="1677238966708" TEXT="3D-CAD Software für Bauteil-Konstruktion">
|
||||
<node CREATED="1677238982982" ID="ID_778717508" MODIFIED="1677239008236" TEXT="Paradigma: dynamisch-funktional">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
man zeichnet nicht, sondern man stellt eine Liste von Operationen zusammen
|
||||
|
|
@ -28909,9 +28899,7 @@
|
|||
<icon BUILTIN="info"/>
|
||||
<node CREATED="1557414397598" ID="ID_1788944843" MODIFIED="1557498707228" TEXT="der std::apply-Mechanismus funktioniert nur direkt">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
d.h er funktioniert nur, wenn man das std::get<idx> (tuple) unmittelbar an den jeweiligen Ziel-Parameter bindet
|
||||
|
|
@ -29154,9 +29142,7 @@
|
|||
<node CREATED="1555807861314" ID="ID_352919826" MODIFIED="1557498707229" TEXT="geht das überhaupt?"/>
|
||||
<node CREATED="1555807866689" ID="ID_1851833268" MODIFIED="1557498707229" TEXT="würde vermutlich auf ein Builder-Konstrukt hinauslaufen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...etwas analog zu meinem TreeMutator.
|
||||
|
|
@ -32839,9 +32825,7 @@
|
|||
</node>
|
||||
<node CREATED="1564868280687" ID="ID_593595518" MODIFIED="1564871156101" TEXT="es hilft nichts, wenn man den Screen (nochmal) setzt">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
und ja, den Screen sollte man generell setzten.<br />Steht auch so in der Doku.
|
||||
|
|
@ -33526,9 +33510,7 @@
|
|||
</node>
|
||||
<node CREATED="1582923916162" ID="ID_879903056" MODIFIED="1582923946222">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
daher Policy ändern: jeder schlägt den <b>totalen absoluten</b>  Offset drauf
|
||||
|
|
@ -35555,9 +35537,7 @@
|
|||
<node CREATED="1504200743610" ID="ID_1973994759" MODIFIED="1679362063119" TEXT="Übergangsweise....">
|
||||
<node CREATED="1504200750905" ID="ID_1728645080" MODIFIED="1679359485827" TEXT="gab es noch eine ZombieTimeline">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Zum Abschluß der GUI-Überarbeitung 3/23 habe ich diese Zombie-Timeline tot gemacht
|
||||
|
|
@ -36847,9 +36827,7 @@
|
|||
</node>
|
||||
<node CREATED="1539134224759" ID="ID_766070060" MODIFIED="1576282358024" TEXT="Struktur und Realisierung gemeinsam gepusht">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<ul>
|
||||
<li>
|
||||
|
|
@ -37544,9 +37522,7 @@
|
|||
</node>
|
||||
<node CREATED="1615563869355" ID="ID_411566224" MODIFIED="1615563956504" TEXT="Zeiger verwenden, und keine Registry">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Registry hat zusä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ötigt wird
|
||||
|
|
@ -37903,9 +37879,7 @@
|
|||
</node>
|
||||
<node COLOR="#338800" CREATED="1617471493055" ID="ID_1798821612" MODIFIED="1617568252066" TEXT="Makro in einen zentralen Header verlegen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
habs in error.hpp untergebracht, direkt unter ERROR_LOG_AND_IGNORE
|
||||
|
|
@ -38668,9 +38642,7 @@
|
|||
</node>
|
||||
<node CREATED="1619887281662" ID="ID_843790040" MODIFIED="1619887627626" TEXT="Spezial-Konventionen blähen das API auf">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...wenn man nun eine fest-vorbereitete Lösung für jeden Fall vorsieht, wird die Schnittstelle bereit, unübersichtlich und könnte im Lauf der Zeit verwuchern. Zudem muß eine komplexe Konvention errichtet werden, wer wann für wen welche Variante aufruft
|
||||
|
|
@ -88539,6 +88511,124 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</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 ⟼ Output mit einem Buffer">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734310306689" ID="ID_246862993" MODIFIED="1734310327544" TEXT="Input ⟼ 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">    template<class X, typename...ARGS> </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">    inline void </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">    <b>buildIntoBuffer</b> (void* storageBuffer, ARGS&& ...args) </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">    { </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">      new(storageBuffer) X(forward<ARGS> (args)...); </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">    } </font>
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">      template<class X, typename...ARGS> </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">      static TypeHandler </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">      create (ARGS&& ...args) </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">        { </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">          return TypeHandler ( </font><font color="#9d0404" face="Monospaced" size="2">bind (<b>buildIntoBuffer</b><X,ARGS...>, </font><font color="#c65900" face="Monospaced" size="2"><b>_1</b></font><font color="#9d0404" face="Monospaced" size="2">, forward<ARGS> (args)...)</font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">                             , destroyInBuffer<X>); </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">        }</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">  std::function<void(void*)>::function(</font><font face="Monospaced" size="1" color="#b90563">std::<b>_Bind</b><void (*(std::_Placeholder<1>, int))(void*, int&&)></font><font face="Monospaced" size="1">&)</font>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node CREATED="1734311048512" ID="ID_1681074174" MODIFIED="1734311077645" TEXT="weiter oben im Type-Stack sieht man bereits, daß 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"> = std::_<b>Bind</b><</font><font face="Monospaced" size="2" color="#420477">void (*(std::_Placeholder<1>, int))(void*, int&&)</font><font face="Monospaced" size="2">>;</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 BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1733525831136" ID="ID_1553180375" MODIFIED="1733527489987" TEXT="NodeBuilder_test">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
|
|
@ -91417,8 +91507,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
vorsicht Falle: Parameter werden oft per Referenz genommen
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1734299828371" ID="ID_107221686" MODIFIED="1734299851058" TEXT="diese Einschränkung setze ich hier explizit">
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
|
||||
|
|
@ -91443,8 +91532,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
ich muß für die strukturierten Fälle eine eingene Trait-Spezialisierung anlegen
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1734299948322" ID="ID_1928109484" MODIFIED="1734299969936" TEXT="verlange auch...">
|
||||
|
|
@ -91463,8 +91551,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1734300037782" ID="ID_1265960300" MODIFIED="1734300045369" TEXT="dafür aber Funktoren"/>
|
||||
</node>
|
||||
<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="#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ür noch nichts"/>
|
||||
<node CREATED="1734299700012" ID="ID_1751899842" MODIFIED="1734299720075" TEXT="man kann über die konstituierenden Funktionen gehen">
|
||||
<icon BUILTIN="idea"/>
|
||||
|
|
@ -91489,8 +91577,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
Denn der weitere darauf aufbauende Code ist ebenfalls nicht ganz in Ordnung und benötigt die Generalisierung, um dann grade gezogen zu werden... und ich fürchte die Situation, wo mir ein Berg von Template-Code um die Ohren fliegt
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<font NAME="SansSerif" SIZE="10"/>
|
||||
<icon BUILTIN="smiley-neutral"/>
|
||||
</node>
|
||||
|
|
@ -91786,7 +91873,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node COLOR="#338800" CREATED="1734286473131" ID="ID_414275228" MODIFIED="1734300473228" TEXT="Prallell-Strukturen für den Übergang schaffen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</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"/>
|
||||
</node>
|
||||
<node CREATED="1734286523651" ID="ID_132315841" MODIFIED="1734286531775" TEXT="Fall-Unterscheidungen für die Storage einführen"/>
|
||||
|
|
@ -91832,8 +91920,27 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</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 — weg damit">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Für die BuffTable war früher jede Menge Funktionalität geplant, die inzwischen im BufferProvider realisiert wurde; der alte Test hängt seit >10 Jahren bei den Engine-Tests unimplementiert mit rum — es ist sinnlos, ihn nun umzuwidmen
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
</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"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734133474862" ID="ID_1734639141" MODIFIED="1734133509736" TEXT="MediaWeavingPattern intern anpassen">
|
||||
|
|
|
|||
Loading…
Reference in a new issue