Invocation: expand capabilities in existing code

This is an attempt to rework gradually while keeping the existing code valid.
For the simple reason that the existing code is quite elaborate and difficult to re-orient.

Thus using a ''second branch,'' and sharing the traits template while expanding its capabilities
This commit is contained in:
Fischlurch 2024-12-15 23:25:01 +01:00
parent 1f265044e5
commit a477c5953b
5 changed files with 281 additions and 71 deletions

View file

@ -216,6 +216,9 @@ namespace meta{
template<typename FUN>
using is_BinaryFun = has_Arity<FUN,2>;
template<typename FUN>
using is_TernaryFun = has_Arity<FUN,3>;

View file

@ -75,6 +75,7 @@
#include "steam/engine/buffhandle.hpp"
#include "lib/uninitialised-storage.hpp"
#include "lib/meta/function.hpp"
#include "lib/meta/typeseq-util.hpp"
//#include "lib/several.hpp"
//#include <utility>
@ -92,8 +93,42 @@ namespace engine {
namespace {// Introspection helpers....
using lib::meta::_Fun;
using lib::meta::is_UnaryFun;
using lib::meta::is_BinaryFun;
using lib::meta::is_TernaryFun;
using std::remove_reference_t;
using lib::meta::enable_if;
using std::void_t;
using std::__and_;
using std::__not_;
template<class X, typename SEL=void>
struct is_Structured
: std::false_type
{ };
template<class TUP>
struct is_Structured<TUP, void_t<std::tuple_size<TUP>>>
: std::true_type
{ };
template<typename V>
struct is_Value
: __and_<__not_<std::is_pointer<V>>
,__not_<std::is_reference<V>>
,__not_<is_Structured<V>>
,std::is_default_constructible<V>
,std::is_copy_assignable<V>
>
{ };
template<typename B>
struct is_Buffer
: __and_<__not_<std::is_pointer<B>>
,__not_<std::is_reference<B>>
,std::is_default_constructible<B>
,__not_<_Fun<B>>
>
{ };
/** Helper to pick up the parameter dimensions from the processing function
* @remark this is the rather simple yet common case that media processing
@ -107,32 +142,78 @@ namespace engine {
struct _ProcFun
{
static_assert(_Fun<FUN>() , "something funktion-like required");
static_assert(is_BinaryFun<FUN>() , "function with two arguments expected");
static_assert(0 < _Fun<FUN>::ARITY , "function with at least one argument expected");
static_assert(3 >= _Fun<FUN>::ARITY , "function with up to three arguments accepted");
using Sig = typename _Fun<FUN>::Sig;
template<class ARG>
struct MatchBuffArray
template<class SIG, size_t i>
using _Arg = typename lib::meta::Pick<typename _Fun<SIG>::Args, i>::Type;
template<class ARG, typename SEL =void>
struct _ArgTrait
{
static_assert(not sizeof(ARG), "processing function expected to take array-of-buffer-pointers");
static_assert(not sizeof(ARG), "processing function expected to take parameters, "
"buffer-poiinters or tuples or arrays of these");
};
template<class PAR>
struct _ArgTrait<PAR, enable_if<is_Value<PAR>>>
{
using Buff = PAR; ////////////////////////////////OOO not correct, remove this!
enum{ SIZ = 1 };
};
template<class BUF>
struct _ArgTrait<BUF*, enable_if<is_Buffer<BUF>>>
{
using Buff = BUF;
enum{ SIZ = 1 };
};
template<class BUF, size_t N>
struct MatchBuffArray<std::array<BUF*,N>>
struct _ArgTrait<std::array<BUF*,N>>
{
using Buff = BUF;
enum{ SIZ = N };
};
using SigI = remove_reference_t<typename _Fun<FUN>::Args::List::Head>;
using SigO = remove_reference_t<typename _Fun<FUN>::Args::List::Tail::Head>;
using BuffI = typename MatchBuffArray<SigI>::Buff;
using BuffO = typename MatchBuffArray<SigO>::Buff;
template<class SIG, typename SEL =void>
struct _Case
{
static_assert(not sizeof(SIG), "use case could not be determined from function stignature");
};
template<class SIG>
struct _Case<SIG, enable_if<is_UnaryFun<SIG>>>
{
enum{ SLOT_O = 0
, SLOT_I = 0
};
};
template<class SIG>
struct _Case<SIG, enable_if<is_BinaryFun<SIG>>>
{
enum{ SLOT_O = 1
, SLOT_I = is_Value<_Arg<SIG,0>>()? 1 : 0
};
};
template<class SIG>
struct _Case<SIG, enable_if<is_TernaryFun<SIG>>>
{
enum{ SLOT_O = 2
, SLOT_I = 1
};
};
enum{ FAN_I = MatchBuffArray<SigI>::SIZ
, FAN_O = MatchBuffArray<SigO>::SIZ
, SLOT_I = 0
, SLOT_O = 1
using SigI = _Arg<FUN,_Case<Sig>::SLOT_I>;
using SigO = _Arg<FUN,_Case<Sig>::SLOT_O>;
using BuffI = typename _ArgTrait<SigI>::Buff;
using BuffO = typename _ArgTrait<SigO>::Buff;
enum{ FAN_I = _ArgTrait<SigI>::SIZ
, FAN_O = _ArgTrait<SigO>::SIZ
, SLOT_I = _Case<Sig>::SLOT_I
, SLOT_O = _Case<Sig>::SLOT_O
, MAXSZ = std::max (uint(FAN_I), uint(FAN_O)) /////////////////////OOO required temporarily until the switch to tuples
};
@ -161,8 +242,8 @@ namespace engine {
* @todo WIP-WIP-WIP 7/24 now reworking the old design in the light of actual render engine requirements...
*/
template<class FUN>
struct FeedManifold
: FeedManifold_StorageSetup<FUN>
struct FoldManifeed
: util::NonCopyable
{
enum{ STORAGE_SIZ = _ProcFun<FUN>::MAXSZ };
using BuffS = lib::UninitialisedStorage<BuffHandle,STORAGE_SIZ>;
@ -171,6 +252,16 @@ namespace engine {
BuffS outBuff;
};
template<class FUN>
struct FeedManifold
: FeedManifold_StorageSetup<FUN>
{
using _Trait = _ProcFun<FUN>;
static constexpr bool hasInput() { return _Trait::hasInput(); }
static constexpr bool hasParam() { return _Trait::hasParam(); }
};
/**

View file

@ -145,7 +145,7 @@ namespace engine {
: util::MoveOnly
{
enum{ MAX_SIZ = _ProcFun<FUN>::MAXSZ };
using Manifold = FeedManifold<FUN>;
using Manifold = FoldManifeed<FUN>; ////////////////////////////////////////////////////OOO temporary fork between old-style and new-style implementation
using Feed = SimpleFunctionInvocationAdapter<Manifold, FUN>;
std::function<Feed()> buildFeed;

View file

@ -22,6 +22,7 @@
#include "steam/engine/proc-node.hpp"
#include "steam/engine/turnout.hpp"
#include "steam/engine/turnout-system.hpp"
#include "steam/engine/feed-manifold.hpp"
//#include "lib/format-cout.hpp"
//#include "lib/util.hpp"
@ -50,6 +51,7 @@ namespace test {
{
seedRand();
verify_TurnoutSystem();
verify_FeedManifold();
UNIMPLEMENTED ("build a simple render node and then activate it");
}
@ -61,6 +63,24 @@ namespace test {
Time nomTime{rani(10'000),0}; // drive test with a random »nominal Time« <10s with ms granularity
TurnoutSystem invoker{nomTime}; // a time spec is mandatory, all further parameters are optional
}
/** @test the FeedManifold as adapter between Engine and processing library
*/
void
verify_FeedManifold()
{
// some random numbers to test...
long r1 = rani(100);
// Type setup to build a suitable FeedManifold
using Buffer = long;
auto fun_singleOut = [&](Buffer* buff) { *buff = r1; };
using M1 = FeedManifold<decltype(fun_singleOut)>;
CHECK (not M1::hasInput());
CHECK (not M1::hasParam());
}
};

View file

@ -23820,9 +23820,7 @@
</node>
<node CREATED="1565272282454" ID="ID_1908255689" MODIFIED="1565272311351">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
Grundlagen m&#252;ssen <i>vor</i>&#160;GTK's Behandlung erfolgen
@ -24335,9 +24333,7 @@
</node>
<node CREATED="1583103616819" ID="ID_635184052" MODIFIED="1583103674376">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
<b>Nein</b>: keine Abh&#228;ngigkeiten,
@ -24872,9 +24868,7 @@
</node>
<node CREATED="1611915849754" ID="ID_409163867" MODIFIED="1611915977254" TEXT="Daten m&#xfc;ssen auf dem Pfad der Kontrollstruktur greifbar sein">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
die Kontrollstruktur ist bereits gef&#228;hrlich komplex; spezielle &quot;Schleifen&quot; durch die Innereien eigentlich nicht involvierter Entit&#228;ten allein aus Performance-Gr&#252;nden sollten vermieden werden
@ -25679,9 +25673,7 @@
</node>
<node CREATED="1575652931295" ID="ID_1649360599" MODIFIED="1576282358071" TEXT="aber ein voller double-dispatch-Mechanismus ist nicht durchf&#xfc;hrbar">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
denn er erzwingt entweder....
@ -26948,9 +26940,7 @@
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1677205333819" ID="ID_1685591638" MODIFIED="1677283853536" TEXT="m&#xfc;hsam ... Inkscape ist nicht das richtige Tool">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
ich kann zwar einrasten, aber ich kann weder um einen definierten Punkt drehen, noch kann ich Schnittpunkte ermitteln
@ -28548,9 +28538,7 @@
<node CREATED="1555082433635" ID="ID_1213306272" MODIFIED="1557498707227" TEXT="Time-Ruler &quot;allways on top&quot;"/>
<node CREATED="1555082442705" ID="ID_497245117" MODIFIED="1576282358065">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
Unterscheidung <b>verschoben</b>&#160;in die Darstellung
@ -29562,9 +29550,7 @@
</node>
<node CREATED="1560612691723" ID="ID_1955365339" MODIFIED="1576282358059" TEXT="das Prelude-Verb als Solches ist sinnvoll">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
weil man damit eine generische Klammer bauen kann
@ -32422,9 +32408,7 @@
<node CREATED="1563736680910" ID="ID_1193299161" MODIFIED="1563736686803" TEXT="bekommt einen Cairo-Context"/>
<node CREATED="1563736687680" ID="ID_476120936" MODIFIED="1563736720837" TEXT="setzt zus&#xe4;tzlich eine genau passende size-Allocation vorraus">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
Kommentar sagt: it is your responsibility that these two coordinates match
@ -33870,9 +33854,7 @@
</node>
<node CREATED="1567689845067" ID="ID_1441909594" MODIFIED="1576282358039" TEXT="ich betrachte das Problem als eigentlich irrelevant">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
man soll ohnehin keinen so gro&#223;en box-shadow verwenden
@ -35809,9 +35791,7 @@
</node>
<node CREATED="1477617185582" ID="ID_634277803" MODIFIED="1576282358034" TEXT="PanelManager::createPanels()">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
....erzeugt wird das hier:
@ -37216,9 +37196,7 @@
<node CREATED="1614391691166" ID="ID_367156594" MODIFIED="1614391711156" TEXT="d.h. zur Event-Quelle gibt es ein generisches Element wie z.B. GTK-Widget"/>
<node CREATED="1614391738263" ID="ID_1536053997" MODIFIED="1614391793230" TEXT="hier entsteht also eine Verquickung mit dem konkreten Framework">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
naja... sie besteht schon von Anfang an, insofern das Event-Konzept, wie auch die konkrete Quelle, ohnehin an das UI-Framework gebunden sind
@ -37697,9 +37675,7 @@
<node CREATED="1616771909543" ID="ID_704625942" MODIFIED="1616771922497" TEXT="und zwar genau dann, wenn ein neues Widget geschaffen wurde"/>
<node CREATED="1616772271009" ID="ID_1822723171" MODIFIED="1616772366205" TEXT="Problem: es ist nicht (einfach) m&#xf6;glich, eine bestehende Gesten-Konfiguration zu erkennen">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...denn ich will ja grade unn&#246;tige Storage-Slots f&#252;r R&#252;ckpointer und sonstige Flags vermeiden; daher besteht eine Gesten-Konfiguration nur darin, irgendwo ganz versteckt ein Signal auf das Widget verdrahtet zu haben...
@ -38509,9 +38485,7 @@
<node CREATED="1619799349705" ID="ID_281542411" MODIFIED="1619799359972" TEXT="in diesem Fall dann nur noch eine Indirektion"/>
<node CREATED="1619799367600" ID="ID_1388699771" MODIFIED="1619799442130">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
im Gegensatz zum CanvasHook ist <i>das hier durchaus relevant</i>
@ -38787,9 +38761,7 @@
<node CREATED="1619967375039" ID="ID_1955578195" MODIFIED="1619967379379" TEXT="...aus dem Gesten-Controller herauszuhalten"/>
<node CREATED="1619967252543" ID="ID_630081269" MODIFIED="1619967547078" TEXT="ich sehe keinen anderen Weg....">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...sonst w&#252;rde entweder das Subject selber ad hoc etwas bereitstellen m&#252;ssen und daf&#252;r zus&#228;tzliche Storage brauchen (<b>Hebel</b>, es gibt sehr viele Subjekte!), oder das Interface &quot;Subject&quot; w&#252;rde l&#246;chrig und zu einer Kodifizierung von Einzelf&#228;llen. Die L&#246;sung mit dem Adapter stattdessen f&#228;llt unter das Prinzip <i>Inversion of Control</i>
@ -91304,8 +91276,10 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
<node CREATED="1734188779125" ID="ID_978315882" MODIFIED="1734188785169" TEXT="Fallunterscheidung">
<linktarget COLOR="#8e8fa7" DESTINATION="ID_978315882" ENDARROW="Default" ENDINCLINATION="52;169;" ID="Arrow_ID_793891080" SOURCE="ID_286097173" STARTARROW="None" STARTINCLINATION="-331;-17;"/>
<icon BUILTIN="info"/>
<node CREATED="1734188787125" ID="ID_1834748970" MODIFIED="1734188798681" TEXT="anhand der Arit&#xe4;t">
<node CREATED="1734188806962" ID="ID_390772438" MODIFIED="1734188832010" TEXT="terti&#xe4;r: Zuordnung ist eindeutig">
<node CREATED="1734188806962" ID="ID_390772438" MODIFIED="1734295019014" TEXT="tern&#xe4;r: Zuordnung ist eindeutig">
<node CREATED="1734189402282" ID="ID_1540995607" MODIFIED="1734189410440" TEXT="1:param"/>
<node CREATED="1734189411779" ID="ID_496340085" MODIFIED="1734189416340" TEXT="2:input"/>
<node CREATED="1734189418040" ID="ID_66062728" MODIFIED="1734189421913" TEXT="3:output"/>
@ -91379,9 +91353,10 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734197949703" ID="ID_614756914" MODIFIED="1734197958950" TEXT="in zwei Schritten umstellen">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734197960677" ID="ID_928664533" MODIFIED="1734198014600" TEXT="Schritt-1 : neues Interface">
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734197949703" ID="ID_614756914" MODIFIED="1734299449717" TEXT="in zwei Schritten umstellen">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1734197960677" ID="ID_928664533" MODIFIED="1734299248635" TEXT="Schritt-1 : neues Interface">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1734198655392" ID="ID_1607922853" MODIFIED="1734213039477" TEXT="kann ArgI|O sofort umbenennen &#x27fc; SigI|O">
<richcontent TYPE="NOTE"><html>
<head/>
@ -91420,8 +91395,117 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node CREATED="1734213045001" ID="ID_787577161" MODIFIED="1734213055524" TEXT="sonstige Signatur bereits anlegen"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734197971763" ID="ID_1977596531" MODIFIED="1734197997067" TEXT="Schritt-2 : tats&#xe4;chliche Flexibilit&#xe4;t">
<node CREATED="1734214199422" ID="ID_525858909" MODIFIED="1734214224775" TEXT="stellt sich wieder (zum x-ten Mal) die Frage nach dem Layout der FeedManifold"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734197971763" ID="ID_1977596531" MODIFIED="1734299442669" TEXT="Schritt-2 : tats&#xe4;chliche Flexibilit&#xe4;t">
<icon BUILTIN="pencil"/>
<node COLOR="#435e98" CREATED="1734214199422" ID="ID_525858909" MODIFIED="1734299260472" TEXT="stellt sich wieder (zum x-ten Mal) die Frage nach dem Layout der FeedManifold">
<arrowlink COLOR="#2e2c57" DESTINATION="ID_1045815708" ENDARROW="Default" ENDINCLINATION="-98;-400;" ID="Arrow_ID_639104343" STARTARROW="None" STARTINCLINATION="-367;14;"/>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734299273886" ID="ID_1992832073" MODIFIED="1734299285393" TEXT="intern mehrstufig aufbauen">
<icon BUILTIN="pencil"/>
<node CREATED="1734299304455" ID="ID_286097173" MODIFIED="1734299376662" TEXT="Trait zur Fallunterscheidung">
<arrowlink COLOR="#8e8fa7" DESTINATION="ID_978315882" ENDARROW="Default" ENDINCLINATION="52;169;" ID="Arrow_ID_793891080" STARTARROW="None" STARTINCLINATION="-331;-17;"/>
</node>
<node CREATED="1734299287036" ID="ID_675651825" MODIFIED="1734299411972" TEXT="Trait zur Klassifikation eines Arguments">
<node CREATED="1734299588563" ID="ID_1171470327" MODIFIED="1734299593079" TEXT="Hilfsmittel">
<node CREATED="1734299594621" ID="ID_1652085011" MODIFIED="1734299598721" TEXT="is_Value">
<node CREATED="1734299796014" ID="ID_91717467" MODIFIED="1734299803280" TEXT="keine Referenz">
<node CREATED="1734299805447" ID="ID_757014547" MODIFIED="1734299825696" TEXT="wirklich?">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
vorsicht Falle: Parameter werden oft per Referenz genommen
</p>
</body>
</html>
</richcontent>
</node>
<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"/>
<icon BUILTIN="yes"/>
<node CREATED="1734299854014" ID="ID_633815100" MODIFIED="1734299865387" TEXT="bedeutet: die Binding-Funktionen m&#xfc;ssen sich daran eben halten"/>
<node CREATED="1734299867289" ID="ID_1447684196" MODIFIED="1734299879256" TEXT="und speziell die Parameter by-Value abnehmen"/>
<node COLOR="#7a2e5e" CREATED="1734299887554" ID="ID_1986380883" MODIFIED="1734299907367" TEXT="...einfach mal machen!">
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="yes"/>
</node>
</node>
</node>
<node CREATED="1734299912429" ID="ID_1689731027" MODIFIED="1734299916457" TEXT="kein Pointer"/>
<node CREATED="1734299917777" ID="ID_109395935" MODIFIED="1734299941744" TEXT="mu&#xdf; hier Array und Tuple ausschlie&#xdf;en">
<arrowlink DESTINATION="ID_822733161" ENDARROW="Default" ENDINCLINATION="-14;-32;" ID="Arrow_ID_990958884" STARTARROW="None" STARTINCLINATION="-92;-2;"/>
<node CREATED="1734300089863" ID="ID_551343781" MODIFIED="1734300108488" TEXT="weil ich sonst einfache und zusammenges&#xe4;tzte F&#xe4;lle nicht getrennt bekomme"/>
<node CREATED="1734300116683" ID="ID_886815447" MODIFIED="1734300158482" TEXT="Einschr&#xe4;nkung des Traits-Mechanismus: F&#xe4;lle m&#xfc;ssen eindeutig sein">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
ich mu&#223; f&#252;r die strukturierten F&#228;lle eine eingene Trait-Spezialisierung anlegen
</p>
</body>
</html>
</richcontent>
</node>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1734299948322" ID="ID_1928109484" MODIFIED="1734299969936" TEXT="verlange auch...">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1734299955097" ID="ID_1456270554" MODIFIED="1734299960532" TEXT="default-konstruierbar"/>
<node CREATED="1734299961795" ID="ID_402928846" MODIFIED="1734299966475" TEXT="copy-assignable"/>
</node>
</node>
<node CREATED="1734299599947" ID="ID_1658357787" MODIFIED="1734299603445" TEXT="is_Buffer">
<node CREATED="1734300003050" ID="ID_230897434" MODIFIED="1734300009454" TEXT="sehr &#xe4;hnlich gelagert"/>
<node CREATED="1734300010869" ID="ID_1932874551" MODIFIED="1734300018717" TEXT="gemeint ist: der Buffer-Typ selber"/>
<node CREATED="1734300020223" ID="ID_522043996" MODIFIED="1734300032435" TEXT="Unterschied: schlie&#xdf;e hier strukturierte Typen nicht aus">
<node CREATED="1734300047365" ID="ID_862630860" MODIFIED="1734300071263" TEXT="nur weil es m&#xf6;glich ist"/>
<node CREATED="1734300072657" ID="ID_1624991173" MODIFIED="1734300086236" TEXT="denn ich nehme diese Argumente stets per-Pointer"/>
</node>
<node CREATED="1734300037782" ID="ID_1265960300" MODIFIED="1734300045369" TEXT="daf&#xfc;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;"/>
<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">
<icon BUILTIN="idea"/>
<node CREATED="1734299730688" ID="ID_1277722611" MODIFIED="1734299751160" TEXT="das ist nicht exakt, weil strucutred Bindings auch auf weiteren Typen funktionieren"/>
<node CREATED="1734299752398" ID="ID_199462953" MODIFIED="1734299761304" TEXT="aber hier f&#xfc;r den Zweck erscheint es ausreichend"/>
<node COLOR="#338800" CREATED="1734299762910" ID="ID_638534663" MODIFIED="1734299783097" TEXT="&#x27f9; pr&#xfc;fe ob std::tuple_size instantiierbar ist">
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
</node>
<node CREATED="1734300178469" ID="ID_1968928516" MODIFIED="1734300198561" TEXT="Einzelwerte direkt in Value und Pointer unterscheiden"/>
<node CREATED="1734300199815" ID="ID_677210614" MODIFIED="1734300217722" TEXT="&#xfc;bergangsweise noch eine Spezialisierung f&#xfc;r Arrays mitnehmen">
<node CREATED="1734300223358" ID="ID_1517631345" MODIFIED="1734300333972" TEXT="(fragt sich wie lange ich beide Code-Zweige nebeneinander halten kann)">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...dieser Umbau ist durchaus <i>schwer zu stemmen.... </i>
</p>
<p>
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>
</body>
</html>
</richcontent>
<font NAME="SansSerif" SIZE="10"/>
<icon BUILTIN="smiley-neutral"/>
</node>
</node>
<node CREATED="1734300344699" ID="ID_660526050" MODIFIED="1734300363029" TEXT="strukturierte Typen in einem zweiten Schritt hinzuf&#xfc;gen"/>
</node>
</node>
<node CREATED="1734299615144" ID="ID_1061968970" MODIFIED="1734299633817" TEXT="Umgang mit komplexen Argumenten">
<node COLOR="#5b280f" CREATED="1734299635613" ID="ID_1256304259" MODIFIED="1734299646473" TEXT="Fallunterscheidung Tupel und Array">
<icon BUILTIN="button_cancel"/>
</node>
<node CREATED="1734299647835" ID="ID_300211802" MODIFIED="1734299682940" TEXT="versuche es direkt &#xfc;ber die structured-bindings">
<arrowlink COLOR="#685a75" DESTINATION="ID_822733161" ENDARROW="Default" ENDINCLINATION="15;31;" ID="Arrow_ID_1498083496" STARTARROW="None" STARTINCLINATION="83;5;"/>
</node>
</node>
</node>
</node>
</node>
@ -91554,7 +91638,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734214260094" ID="ID_1731140529" MODIFIED="1734214303534" TEXT="mu&#xdf; die Storage neu bestimmen">
<icon BUILTIN="yes"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734214271580" ID="ID_1045815708" MODIFIED="1734214294015" TEXT="Nochmal &#xfc;ber die Rolle der FeedManifold nachdenken">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734214271580" ID="ID_1045815708" MODIFIED="1734299228970" TEXT="Nochmal &#xfc;ber die Rolle der FeedManifold nachdenken">
<linktarget COLOR="#2e2c57" DESTINATION="ID_1045815708" ENDARROW="Default" ENDINCLINATION="-98;-400;" ID="Arrow_ID_639104343" SOURCE="ID_525858909" STARTARROW="None" STARTINCLINATION="-367;14;"/>
<icon BUILTIN="yes"/>
<node CREATED="1734214319422" ID="ID_405803529" MODIFIED="1734214333944" TEXT="sie ist und bleibt die dynamische Invocation-Storage"/>
<node CREATED="1734214355412" ID="ID_920827020" MODIFIED="1734214364155" TEXT="und zwar f&#xfc;r eine Port-Aktivierung">
@ -91584,8 +91669,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
Der Name und die Vorstellung hat nun mehrfach gewechselt, aber es ging doch letztlich immer darum, eine unbekannte Library-Funktion so aufzur&#252;sten, da&#223; man sie mit einem generischen Schema zu fassen bekommt. Auch die Idee, die Buffer-Pointer in ein Array zu packen, geh&#246;rt letztlich zu diesem Ansatz. Der dar&#252;ber hinausgehende Teil der urspr&#252;nglichen Idee, dieses Strukur auch zu &#187;bespielen&#171; ist jetzt in der &#187;weaving&#171;-Metapher aufgegangen &#8212; und dieses fortschreitende Wechselspiel in der Speicherbelegung findet dar&#252;ber ja nun tats&#228;chlich statt.
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1734224433562" ID="ID_1575355082" MODIFIED="1734224522138" TEXT="dem zufolge &#x27f9; auch die Storage f&#xfc;r den Funktionsaufruf geh&#xf6;rt hierher"/>
<node CREATED="1734224528900" ID="ID_623526235" MODIFIED="1734224541463" TEXT="und die Storage f&#xfc;r die zwei Funktoren"/>
@ -91611,8 +91695,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
hier zeigt sich immer wieder der gleiche Trade-off: zus&#228;tzliche Indirektion vs. Template-Bloat
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<arrowlink COLOR="#ec4160" DESTINATION="ID_1378608706" ENDARROW="Default" ENDINCLINATION="-191;526;" ID="Arrow_ID_1877600264" STARTARROW="None" STARTINCLINATION="-161;11;"/>
</node>
</node>
@ -91691,14 +91774,27 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</li>
</ul>
</body>
</html>
</richcontent>
</html></richcontent>
<arrowlink COLOR="#fd0e40" DESTINATION="ID_1166367446" ENDARROW="Default" ENDINCLINATION="-134;6;" ID="Arrow_ID_1369831225" STARTARROW="None" STARTINCLINATION="-270;14;"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734132967020" ID="ID_1354544776" MODIFIED="1734133516984" TEXT="Param-Tuple in FeedManifold aufnehmen">
<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"/>
<node COLOR="#338800" CREATED="1734286473131" ID="ID_414275228" MODIFIED="1734300473228" TEXT="Prallell-Strukturen f&#xfc;r den &#xdc;bergang schaffen">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1734286485714" ID="ID_1348489291" MODIFIED="1734300437327" TEXT="im NodeBase_test versuchsweise instantiieren">
<icon BUILTIN="button_ok"/>
</node>
<node CREATED="1734286523651" ID="ID_132315841" MODIFIED="1734286531775" TEXT="Fall-Unterscheidungen f&#xfc;r die Storage einf&#xfc;hren"/>
<node CREATED="1734286560983" ID="ID_431464065" MODIFIED="1734300414607" TEXT="auf die flexible Funktor-Signatur schwenken"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734300380799" ID="ID_782708625" MODIFIED="1734300402299" TEXT="dann die Erweiterung auf strukturierte Typen dazunehmen">
<icon BUILTIN="flag-yellow"/>
</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">
<arrowlink COLOR="#c0023e" DESTINATION="ID_1127056731" ENDARROW="Default" ENDINCLINATION="-1257;-48;" ID="Arrow_ID_1717201620" STARTARROW="None" STARTINCLINATION="-908;50;"/>