Invocation: break-through with generic implementation

This changeset is a sketch how to switch the entire implementation of the ''Invocation Adatper''
over to a generic argument usage scheme. This requires the ability to
 - detect if some argument is actually a ''structured type''
 - investigate components of such a structured type to draw a distinction between »Buffer« and »Parameter«
 - ''lift'' the implementation of simple values to work on tuples
 - provide a way to ''bridge'' from ''tuple-style'' programming to ''array access''

As a building block, we use a new iteration-over-index construct,
based on an idea discussed in https://stackoverflow.com/q/53522781/444796
The trick is to pass a `std::integer_constant` to a λ-generic
This commit is contained in:
Fischlurch 2024-12-17 23:32:11 +01:00
parent 23b4a54e79
commit cf4bc380b0
4 changed files with 588 additions and 107 deletions

View file

@ -116,24 +116,6 @@ namespace meta {
//////////////////////////TICKET #943 : temporary workaround until full C++14 compliance (need constexpr)
template<typename X>
constexpr inline X const&
max (X const& a, X const& b)
{
return a < b? b : a;
}
template<typename X>
constexpr inline X const&
min (X const& a, X const& b)
{
return b < a? b : a;
}
//////////////////////////TICKET #943 : temporary workaround until full C++14 compliance (need constexpr)
@ -169,7 +151,7 @@ namespace meta {
using FilledWith = typename BuildIndexSeq<n-1>::template FilledWith<x>::template AppendElm<x>; using FilledWith = typename BuildIndexSeq<n-1>::template FilledWith<x>::template AppendElm<x>;
template<size_t c> template<size_t c>
using First = typename BuildIndexSeq<min(c,n)>::Ascending; using First = typename BuildIndexSeq<std::min(c,n)>::Ascending;
template<size_t c> template<size_t c>
using After = typename BuildIndexSeq< (n>c)? n-c : 0>::template OffsetBy<c>; using After = typename BuildIndexSeq< (n>c)? n-c : 0>::template OffsetBy<c>;
@ -250,7 +232,6 @@ namespace meta {
/* ==== Rebinding Variadic Arguments ==== **/ /* ==== Rebinding Variadic Arguments ==== **/
/** /**
@ -277,6 +258,65 @@ namespace meta {
/* ==== Invoke with index from variadic ==== **/
/** helper to invoke a functor, passing instances of std::integral_constant
* @tparam N size of the index-sequence to use for instantiation
*/
template<size_t N>
class WithIdxSeq
{
template<class FUN, size_t...idx>
static void
invoke (FUN&& fun, std::index_sequence<idx...>)
{
(fun (std::integral_constant<size_t,idx>{}), ...);
}
public:
template<class FUN>
static void
invoke (FUN&& fun)
{
invoke (std::forward<FUN>(fun), std::make_index_sequence<N>{});
}
};
/**
* Invoke a function (or λ) with index numbers derived from some variadic count.
* Notably this construct can be used for compile-time iteration over a structure.
* Instances of `std::integral_constant` are passed in sequence to the functor.
* The _size_ of the index sequence is derived from the following sources
* - if the type \a TTX is _tuple-like,_ then std::tuple_size<TTX> is used
* - otherwise, if the type is a loki-style type sequence or type list,
* the number of type nodes is used
* - otherwise, as fall-back the number of template parameters is used
*/
template<class TTX, class FUN>
inline void
forEachIDX (FUN&& fun)
{
auto N = []{
if constexpr (is_Structured<TTX>())
return size_t(std::tuple_size<TTX>::value);
else
if constexpr (lib::meta::is_Typelist<TTX>::value)
return lib::meta::count<typename TTX::List>::value;
else
{ // Fallback: rebind template arguments into a type sequence
using Seq = typename RebindVariadic<TySeq, TTX>::Type;
return size_t(count<typename Seq::List>::value);
}
};
WithIdxSeq<N()>::invoke (std::forward<FUN> (fun));
}

View file

@ -85,10 +85,14 @@
#include "lib/meta/function.hpp" #include "lib/meta/function.hpp"
#include "lib/meta/trait.hpp" #include "lib/meta/trait.hpp"
#include "lib/meta/typeseq-util.hpp" #include "lib/meta/typeseq-util.hpp"
#include "lib/meta/variadic-helper.hpp"
#include "lib/meta/generator.hpp"
#include "lib/test/test-helper.hpp"
//#include "lib/several.hpp" //#include "lib/several.hpp"
//#include <utility> //#include <utility>
//#include <array> //#include <array>
#include <tuple>
////////////////////////////////TICKET #826 12/2024 the invocation sequence has been reworked and reoriented for integration with the Scheduler ////////////////////////////////TICKET #826 12/2024 the invocation sequence has been reworked and reoriented for integration with the Scheduler
@ -108,8 +112,12 @@ namespace engine {
using std::remove_reference_t; using std::remove_reference_t;
using lib::meta::enable_if; using lib::meta::enable_if;
using lib::meta::is_Structured; using lib::meta::is_Structured;
using lib::meta::forEachIDX;
using lib::meta::TySeq;
using std::is_pointer; using std::is_pointer;
using std::is_reference; using std::is_reference;
using std::remove_pointer_t;
using std::tuple_element_t;
using std::tuple_size_v; using std::tuple_size_v;
using std::void_t; using std::void_t;
using std::__and_; using std::__and_;
@ -128,16 +136,66 @@ namespace engine {
template<typename B> template<typename B>
struct is_Buffer struct is_Buffer
: __and_<__not_<is_pointer<B>> : __and_<is_pointer<B>
,__not_<is_reference<B>>
,std::is_default_constructible<B>
,__not_<_Fun<B>> ,__not_<_Fun<B>>
,std::is_default_constructible<remove_pointer_t<B>>
> >
{ }; { };
template<class TUP, template<class> class COND>
struct isAllElements
{
template<typename>
struct AndAll;
template<size_t...idx>
struct AndAll<std::index_sequence<idx...>>
{
static constexpr bool value =
__and_<COND<tuple_element_t<idx,TUP>> ...
>::value;
};
using Elms = std::make_index_sequence<tuple_size_v<TUP>>;
static constexpr bool value = AndAll<Elms>::value;
};
template<class TUP, typename SEL = void>
struct is_StructBuffs
: std::false_type
{ };
template<class TUP>
struct is_StructBuffs<TUP, enable_if<is_Structured<TUP>> >
: isAllElements<TUP, is_Buffer>
{ };
template<class X, typename SEL = void>
struct StructType
{
// static lib::test::TypeDebugger<X> kacki;
using Seq = TySeq<X>;
using Tup = std::tuple<X>;
};
template<class TUP>
struct StructType<TUP, enable_if<is_Structured<TUP>> >
{
// static lib::test::TypeDebugger<TUP> drecky;
template<typename>
struct AllZ;
template<size_t...idx>
struct AllZ<std::index_sequence<idx...>>
{
using Seq = TySeq<tuple_element_t<idx,TUP> ...>;
};
using Elms = std::make_index_sequence<tuple_size_v<TUP>>;
using Seq = typename AllZ<Elms>::Seq;
using Tup = TUP;
};
/** Helper to pick up the parameter dimensions from the processing function /** Helper to pick up the parameter dimensions from the processing function
* @remark this is the rather simple yet common case that media processing * @remark this is the rather simple yet common case that media processing
@ -170,18 +228,27 @@ namespace engine {
struct _ArgTrait<PAR, enable_if<is_Value<PAR>>> struct _ArgTrait<PAR, enable_if<is_Value<PAR>>>
{ {
using Buff = PAR; ////////////////////////////////OOO not correct, remove this! using Buff = PAR; ////////////////////////////////OOO not correct, remove this!
using Args = TySeq<PAR>;
enum{ SIZ = 1 }; enum{ SIZ = 1 };
}; };
template<class BUF> template<class BUF>
struct _ArgTrait<BUF*, enable_if<is_Buffer<BUF>>> struct _ArgTrait<BUF*, enable_if<is_Buffer<BUF*>>>
{ {
using Buff = BUF; using Buff = BUF;
using Args = TySeq<BUF*>;
enum{ SIZ = 1 }; enum{ SIZ = 1 };
}; };
// template<class TUP>
// struct _ArgTrait<TUP, enable_if<is_StructBuffs<TUP>>>
// {
// using Args = typename StructType<TUP>::Seq;
// enum{ SIZ = std::tuple_size_v<TUP> };
// };
template<class BUF, size_t N> template<class BUF, size_t N>
struct _ArgTrait<std::array<BUF*,N>> struct _ArgTrait<std::array<BUF*,N>>
{ {
using Buff = BUF; using Buff = BUF;
using Args = TySeq<BUF>;///////////////////////////OOO Schmuh!!!
enum{ SIZ = N }; enum{ SIZ = N };
}; };
@ -202,7 +269,7 @@ namespace engine {
struct _Case<SIG, enable_if<is_BinaryFun<SIG>>> struct _Case<SIG, enable_if<is_BinaryFun<SIG>>>
{ {
enum{ SLOT_O = 1 enum{ SLOT_O = 1
, SLOT_I = is_Value<_Arg<SIG,0>>()? 1 : 0 , SLOT_I = is_StructBuffs<_Arg<SIG,0>>::value? 0 : 1 ////////OOO maybe derive directly from std::conditional?
}; };
}; };
template<class SIG> template<class SIG>
@ -216,6 +283,9 @@ 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 SigP = _Arg<FUN, 0>;
using ArgI = typename _ArgTrait<SigI>::Args;
using ArgO = typename _ArgTrait<SigO>::Args;
using ArgP = typename _ArgTrait<SigP>::Args;
using BuffI = typename _ArgTrait<SigI>::Buff; using BuffI = typename _ArgTrait<SigI>::Buff;
using BuffO = typename _ArgTrait<SigO>::Buff; using BuffO = typename _ArgTrait<SigO>::Buff;
@ -238,7 +308,7 @@ namespace engine {
struct ParamStorage struct ParamStorage
{ {
using ParSig = typename _ProcFun<FUN>::SigP; using ParSig = typename _ProcFun<FUN>::SigP;
ParSig param; ParSig param{};
}; };
template<class FUN> template<class FUN>
@ -248,7 +318,7 @@ namespace engine {
using ArgSig = typename _ProcFun<FUN>::SigI; using ArgSig = typename _ProcFun<FUN>::SigI;
BuffS inBuff; BuffS inBuff;
ArgSig inArgs; ArgSig inArgs{};
}; };
template<class FUN> template<class FUN>
@ -258,7 +328,7 @@ namespace engine {
using ArgSig = typename _ProcFun<FUN>::SigO; using ArgSig = typename _ProcFun<FUN>::SigO;
BuffS outBuff; BuffS outBuff;
ArgSig outArgs; ArgSig outArgs{};
}; };
template<class X> template<class X>
@ -307,9 +377,78 @@ namespace engine {
: FeedManifold_StorageSetup<FUN> : FeedManifold_StorageSetup<FUN>
{ {
using _Trait = _ProcFun<FUN>; using _Trait = _ProcFun<FUN>;
using _F = FeedManifold;
static constexpr bool hasInput() { return _Trait::hasInput(); } static constexpr bool hasInput() { return _Trait::hasInput(); }
static constexpr bool hasParam() { return _Trait::hasParam(); } static constexpr bool hasParam() { return _Trait::hasParam(); }
using ArgI = typename _Trait::SigI;
using ArgO = typename _Trait::SigO;
enum{ FAN_I = _Trait::FAN_I
, FAN_O = _Trait::FAN_O
};
FUN process;
template<typename...INIT>
FeedManifold (INIT&& ...funSetup)
: process{forward<INIT> (funSetup)...}
{ }
using TupI = typename StructType<ArgI>::Tup;
using TupO = typename StructType<ArgO>::Tup;
template<size_t i, class ARG>
auto&
accessArg (ARG& arg)
{
if constexpr (is_Structured<ARG>())
return std::get<i> (arg);
else
return arg;
}
void
connect()
{
if constexpr (hasInput())
{
forEachIDX<TupI> ([&](auto i)
{
using BuffI = remove_pointer_t<tuple_element_t<i, TupI>>;
accessArg<i> (_F::inArgs) = & _F::inBuff[i].template accessAs<BuffI>();
});
// if constexpr (is_Structured<ArgI>())
// for (uint i=0; i<FAN_I; ++i)
// std::get<i> (_F::inArgs) = & _F::inBuff[i].template accessAs<BuffI>();
// else
// _F::inArgs = & _F::inBuff[0].template accessAs<BuffI>();
}
// always wire output buffer(s)
{
forEachIDX<TupO> ([&](auto i)
{
using BuffO = remove_pointer_t<tuple_element_t<i, TupO>>;
accessArg<i> (_F::outArgs) = & _F::outBuff[i].template accessAs<BuffO>();
});
// if constexpr (is_Structured<ArgO>())
// for (uint i=0; i<FAN_O; ++i)
// std::get<i> (_F::outArgs) = & _F::outBuff[i].template accessAs<BuffO>();
// else
// _F::outArgs = & _F::inBuff[0].template accessAs<BuffI>();
}
}
void
invoke()
{
if constexpr (hasInput())
process (_F::inArgs, _F::outArgs);
else
process (_F::outArgs);
}
}; };

View file

@ -26,10 +26,13 @@
#include "steam/engine/diagnostic-buffer-provider.hpp" #include "steam/engine/diagnostic-buffer-provider.hpp"
#include "steam/engine/buffhandle-attach.hpp" #include "steam/engine/buffhandle-attach.hpp"
//#include "lib/format-cout.hpp" //#include "lib/format-cout.hpp"
#include "lib/test/diagnostic-output.hpp"/////////////////////TODO
//#include "lib/util.hpp" //#include "lib/util.hpp"
//using std::string; //using std::string;
using std::tuple;/////////////TODO
using std::array;
namespace steam { namespace steam {
@ -77,13 +80,20 @@ namespace test {
// Type setup to build a suitable FeedManifold // Type setup to build a suitable FeedManifold
using Buffer = long; using Buffer = long;
/////////////////////////////////////////////////////////////////////////////////TODO
using T1 = tuple<int,double>;
using T2 = array<int*,3>;
using T3 = int;
using T4 = int*;
using T5 = lib::HeteroData<int*>;
/////////////////////////////////////////////////////////////////////////////////TODO
auto fun_singleOut = [&](Buffer* buff) { *buff = r1; }; auto fun_singleOut = [&](Buffer* buff) { *buff = r1; };
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{}; M1 m1{fun_singleOut};
CHECK (1 == m1.outBuff.array().size()); CHECK (1 == m1.outBuff.array().size());
SHOW_EXPR(m1.outArgs)
CHECK (nullptr == m1.outArgs ); CHECK (nullptr == m1.outArgs );
// CHECK (m1.inArgs ); // does not compile because storage field is not provided // CHECK (m1.inArgs ); // does not compile because storage field is not provided
// CHECK (m1.param ); // CHECK (m1.param );
@ -96,6 +106,16 @@ namespace test {
m1.outBuff.createAt (0, buff); m1.outBuff.createAt (0, buff);
CHECK (m1.outBuff[0].isValid()); CHECK (m1.outBuff[0].isValid());
CHECK (m1.outBuff[0].accessAs<long>() == -55); CHECK (m1.outBuff[0].accessAs<long>() == -55);
SHOW_TYPE(M1::ArgI)
SHOW_TYPE(M1::TupI)
SHOW_TYPE(M1::ArgO)
SHOW_TYPE(M1::TupO)
m1.connect();
SHOW_EXPR(m1.outArgs)
SHOW_EXPR(m1.outBuff[0])
SHOW_EXPR(util::showAdr(*buff))
SHOW_EXPR(util::showAdr(*m1.outBuff[0]))
} }
}; };

View file

@ -24458,9 +24458,7 @@
<node CREATED="1582996768074" ID="ID_1685131335" MODIFIED="1582996782861" TEXT="bisheriger Profil-Trigger mu&#xdf; herausgel&#xf6;st werden"/> <node CREATED="1582996768074" ID="ID_1685131335" MODIFIED="1582996782861" TEXT="bisheriger Profil-Trigger mu&#xdf; herausgel&#xf6;st werden"/>
<node CREATED="1582996783904" ID="ID_1435982546" MODIFIED="1583008976682" TEXT="ermittelte Gr&#xf6;&#xdf;e mu&#xdf; vom Evaluation-Pass weiterverarbeitet werden"> <node CREATED="1582996783904" ID="ID_1435982546" MODIFIED="1583008976682" TEXT="ermittelte Gr&#xf6;&#xdf;e mu&#xdf; vom Evaluation-Pass weiterverarbeitet werden">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
nicht mehr direkt auf den BodyCanvas als Gr&#246;&#223;e anwenden nicht mehr direkt auf den BodyCanvas als Gr&#246;&#223;e anwenden
@ -25058,9 +25056,7 @@
<icon BUILTIN="button_ok"/> <icon BUILTIN="button_ok"/>
<node CREATED="1612023464364" ID="ID_1135923056" MODIFIED="1612023511217" TEXT="Eingef&#xfc;hrt durch Changeset 5b336054"> <node CREATED="1612023464364" ID="ID_1135923056" MODIFIED="1612023511217" TEXT="Eingef&#xfc;hrt durch Changeset 5b336054">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
commit 5b33605469352f3403d44cb0d77ef3c224895f5b (HEAD, ichthyo/gui) commit 5b33605469352f3403d44cb0d77ef3c224895f5b (HEAD, ichthyo/gui)
@ -25745,9 +25741,7 @@
<icon BUILTIN="flag-pink"/> <icon BUILTIN="flag-pink"/>
<node CREATED="1563467519263" ID="ID_497587608" MODIFIED="1576282358071" TEXT="anders als der initiale Aufbau"> <node CREATED="1563467519263" ID="ID_497587608" MODIFIED="1576282358071" TEXT="anders als der initiale Aufbau">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
beim initialen Aufbau sitzen wir in einem ctor-Aufruf, beim initialen Aufbau sitzen wir in einem ctor-Aufruf,
@ -26430,9 +26424,7 @@
<icon BUILTIN="button_ok"/> <icon BUILTIN="button_ok"/>
<node CREATED="1582503411035" HGAP="45" ID="ID_1293494572" MODIFIED="1582503470645" TEXT="der Canvas braucht nur ein Widget, wir aber konstruieren einen Clip" VSHIFT="22"> <node CREATED="1582503411035" HGAP="45" ID="ID_1293494572" MODIFIED="1582503470645" TEXT="der Canvas braucht nur ein Widget, wir aber konstruieren einen Clip" VSHIFT="22">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
eigentlich brauchen wir den konkreten Typ nur f&#252;r den ctor-Aufruf eigentlich brauchen wir den konkreten Typ nur f&#252;r den ctor-Aufruf
@ -27618,9 +27610,7 @@
<node CREATED="1678027936823" ID="ID_1498868700" MODIFIED="1678027946209" TEXT="attach|detach SubFork"/> <node CREATED="1678027936823" ID="ID_1498868700" MODIFIED="1678027946209" TEXT="attach|detach SubFork"/>
<node CREATED="1678028843581" ID="ID_1168167530" MODIFIED="1678028951827" TEXT="&#xfc;berfl&#xfc;ssig: bringt eigentlich nix"> <node CREATED="1678028843581" ID="ID_1168167530" MODIFIED="1678028951827" TEXT="&#xfc;berfl&#xfc;ssig: bringt eigentlich nix">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
...denn wir m&#252;ssen sowiso einen globalen Pass machen, und zwar erst sp&#228;t, wenn das Layout bereits komplett geregelt ist ...denn wir m&#252;ssen sowiso einen globalen Pass machen, und zwar erst sp&#228;t, wenn das Layout bereits komplett geregelt ist
@ -28094,9 +28084,7 @@
</node> </node>
<node CREATED="1677626098881" ID="ID_656135180" MODIFIED="1677626201096"> <node CREATED="1677626098881" ID="ID_656135180" MODIFIED="1677626201096">
<richcontent TYPE="NODE"><html> <richcontent TYPE="NODE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
<u>gesucht...</u> <u>gesucht...</u>
@ -29404,9 +29392,7 @@
</node> </node>
<node CREATED="1560303861175" ID="ID_1281704590" MODIFIED="1576282358060" TEXT="Renderer ist ein einmal-wegwerf-Objekt"> <node CREATED="1560303861175" ID="ID_1281704590" MODIFIED="1576282358060" TEXT="Renderer ist ein einmal-wegwerf-Objekt">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
...daher die Factory ...daher die Factory
@ -32479,9 +32465,7 @@
</node> </node>
<node COLOR="#435e98" CREATED="1564495803795" FOLDED="true" ID="ID_936454608" MODIFIED="1564932165356"> <node COLOR="#435e98" CREATED="1564495803795" FOLDED="true" ID="ID_936454608" MODIFIED="1564932165356">
<richcontent TYPE="NODE"><html> <richcontent TYPE="NODE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
herausfinden, <i>warum </i>er solid gezeichnet wird herausfinden, <i>warum </i>er solid gezeichnet wird
@ -34171,9 +34155,7 @@
<node CREATED="1611124983105" ID="ID_93713729" MODIFIED="1611124999600" TEXT="ggfs eine spezifische Verschiebung, die sich der Clip merkt"/> <node CREATED="1611124983105" ID="ID_93713729" MODIFIED="1611124999600" TEXT="ggfs eine spezifische Verschiebung, die sich der Clip merkt"/>
<node COLOR="#435e98" CREATED="1611125005500" ID="ID_1031158985" MODIFIED="1611478790295" TEXT="Problem Koordinaten-System im Track-Canvas"> <node COLOR="#435e98" CREATED="1611125005500" ID="ID_1031158985" MODIFIED="1611478790295" TEXT="Problem Koordinaten-System im Track-Canvas">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
Problem wegen dem Overview-Ruler, d.h. wie ber&#252;cksichtigt der untere Canvas die Ausdehnung des oberen Canvas? Problem wegen dem Overview-Ruler, d.h. wie ber&#252;cksichtigt der untere Canvas die Ausdehnung des oberen Canvas?
@ -35023,9 +35005,7 @@
<node CREATED="1586383139624" ID="ID_683488370" MODIFIED="1586383149522" TEXT="gegeben als TimeSpan"/> <node CREATED="1586383139624" ID="ID_683488370" MODIFIED="1586383149522" TEXT="gegeben als TimeSpan"/>
<node CREATED="1586383150821" ID="ID_51987562" MODIFIED="1586383287858" TEXT="&#xdc;bersetzung in Pixel ist rein Client-seitig"> <node CREATED="1586383150821" ID="ID_51987562" MODIFIED="1586383287858" TEXT="&#xdc;bersetzung in Pixel ist rein Client-seitig">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
Zoomen, Scrollen, Scroll-Window und View-Path sind reine Gui-Bildungen und werden instantan ohne Round-Trip realisiert Zoomen, Scrollen, Scroll-Window und View-Path sind reine Gui-Bildungen und werden instantan ohne Round-Trip realisiert
@ -36266,9 +36246,7 @@
<linktarget COLOR="#224e99" DESTINATION="ID_28088492" ENDARROW="Default" ENDINCLINATION="37;-48;" ID="Arrow_ID_550550684" SOURCE="ID_1891535415" STARTARROW="None" STARTINCLINATION="-151;-4;"/> <linktarget COLOR="#224e99" DESTINATION="ID_28088492" ENDARROW="Default" ENDINCLINATION="37;-48;" ID="Arrow_ID_550550684" SOURCE="ID_1891535415" STARTARROW="None" STARTINCLINATION="-151;-4;"/>
<node CREATED="1533252951945" ID="ID_182447520" MODIFIED="1533252955015"> <node CREATED="1533252951945" ID="ID_182447520" MODIFIED="1533252955015">
<richcontent TYPE="NODE"><html> <richcontent TYPE="NODE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
g_application_activate() g_application_activate()
@ -37121,9 +37099,7 @@
<node CREATED="1614391269807" ID="ID_236795034" MODIFIED="1614391284866" TEXT="es wird Registrierung der genau passenden Rollen-Adapter unterstellt"/> <node CREATED="1614391269807" ID="ID_236795034" MODIFIED="1614391284866" TEXT="es wird Registrierung der genau passenden Rollen-Adapter unterstellt"/>
<node CREATED="1614391304259" ID="ID_1592976230" MODIFIED="1614391351824" TEXT="es mu&#xdf; Verdrahtungs-Hooks geben"> <node CREATED="1614391304259" ID="ID_1592976230" MODIFIED="1614391351824" TEXT="es mu&#xdf; Verdrahtungs-Hooks geben">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
nachdem sich eine Instanz einer Rolle gemeldet hat, kann der Hook sie individuell verkn&#252;pfen, typischerweise als Lambda nachdem sich eine Instanz einer Rolle gemeldet hat, kann der Hook sie individuell verkn&#252;pfen, typischerweise als Lambda
@ -37437,9 +37413,7 @@
</body> </body>
</html></richcontent> </html></richcontent>
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
Warum m&#246;chte man denn &#252;berhaupt eine Geste &quot;abbrechen k&#246;nnen&quot;? Warum m&#246;chte man denn &#252;berhaupt eine Geste &quot;abbrechen k&#246;nnen&quot;?
@ -37670,9 +37644,7 @@
<node CREATED="1616773839167" ID="ID_186857995" MODIFIED="1616773868828" TEXT="baut stets das Delegate from scratch"/> <node CREATED="1616773839167" ID="ID_186857995" MODIFIED="1616773868828" TEXT="baut stets das Delegate from scratch"/>
<node CREATED="1616773969494" ID="ID_711732245" MODIFIED="1616773998586" TEXT="vereinfachte Logik f&#xfc;r den Anzeigestil"> <node CREATED="1616773969494" ID="ID_711732245" MODIFIED="1616773998586" TEXT="vereinfachte Logik f&#xfc;r den Anzeigestil">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
da man verschiedene F&#228;lle hier zu beginn gleich ausschlie&#223;en kann da man verschiedene F&#228;lle hier zu beginn gleich ausschlie&#223;en kann
@ -55975,6 +55947,89 @@
</node> </node>
</node> </node>
</node> </node>
<node CREATED="1734472826827" ID="ID_1739669703" MODIFIED="1734472937793" TEXT="generische Iteration">
<node COLOR="#435e98" CREATED="1734473802675" FOLDED="true" ID="ID_1446921071" MODIFIED="1734473919955" TEXT="forEach / mapEach">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<node COLOR="#435e98" CREATED="1734473815969" ID="ID_550040594" MODIFIED="1734473900405" TEXT="Hintergrund">
<icon BUILTIN="info"/>
<node CREATED="1734473819557" ID="ID_1810634829" MODIFIED="1734473827564" TEXT="erstmals eingef&#xfc;hrt im Yoshimi-Testrunner"/>
<node CREATED="1734473828359" ID="ID_1841645390" MODIFIED="1734473846344" TEXT="dann Fr&#xfc;hjahr 2024 mit den CSV-Utils extrahiert"/>
<node CREATED="1734473851555" ID="ID_1042513204" MODIFIED="1734473892922" TEXT="man kann damit einfaches Processing per &#x3bb;-generic auf Tuple-Elemente anwenden"/>
</node>
<node CREATED="1734473906427" ID="ID_757329242" MODIFIED="1734473913887" TEXT="definiert in tuple-helper.cpp"/>
</node>
<node COLOR="#435e98" CREATED="1734472833541" FOLDED="true" ID="ID_1252632465" MODIFIED="1734473957976" TEXT="forEachIDX">
<arrowlink COLOR="#3c85dc" DESTINATION="ID_1249171051" ENDARROW="Default" ENDINCLINATION="-2291;-794;" ID="Arrow_ID_987359602" STARTARROW="None" STARTINCLINATION="4755;992;"/>
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<node COLOR="#435e98" CREATED="1734472997687" ID="ID_1962370184" MODIFIED="1734473902629" TEXT="Hintergrund">
<icon BUILTIN="info"/>
<node CREATED="1734473017277" ID="ID_950616793" MODIFIED="1734473035190" TEXT="entwickelt 12/2024 f&#xfc;r die FeedManifold in der Node-Invocation"/>
<node CREATED="1734473039049" ID="ID_241201979" MODIFIED="1734473231046">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
soll sowohl einfache Tyen, alsauch &#187;<b>strukturierte Typen</b>&#171; (tuple-like) akzeptieren
</p>
</body>
</html>
</richcontent>
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Konkret: man soll ein Binding auf eine Render-Node herstellen k&#246;nnen von einer Funktion, die einfach einen Buffer-Pointer braucht. Aber aman soll auch Funktionen einbinden k&#246;nnen, die zig verschiedene Eingabe- und Ausgabepuffer wollen, und dazu noch eine Menge an Parametern, die dann vielleicht auch noch per Automation zu versorgen sind
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1734473066996" ID="ID_26414360" MODIFIED="1734473301381" TEXT="dann soll eine Br&#xfc;cke geschaffen werden zu einem Array-artigen Interface">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...denn die weitere Node-Invocation beruht auf rekursiven Aufrufen in Vorg&#228;nger-Nodes, die dann jeweils ein BuffHandle abliefern. Sowas m&#246;chte man schmerzfrei in eine Art Array abstellen k&#246;nnen (wenngleich es auch in der Praxis als UninitialisedStorage implementiert ist)
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1734473094120" ID="ID_1983060833" MODIFIED="1734473132885">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
deshalb ist es sinnvoll, einen &#955;-closed Code-Block <i>f&#252;r jeden Index zu instantiieren</i>
</p>
</body>
</html>
</richcontent>
</node>
</node>
<node CREATED="1734473468024" HGAP="41" ID="ID_1159486680" MODIFIED="1734473478720" TEXT="definiert in variadic-helper.cpp">
<node CREATED="1734473487117" ID="ID_1217556573" MODIFIED="1734473502095" TEXT="anwendbar f&#xfc;r &#xbb;tuple-like&#xab; types"/>
<node CREATED="1734473502803" ID="ID_67318567" MODIFIED="1734473509709" TEXT="oder f&#xfc;r Loki-Typlisten"/>
<node CREATED="1734473510338" ID="ID_260827883" MODIFIED="1734473518373" TEXT="oder Templates mit N Template-Parametern"/>
</node>
<node CREATED="1734473317725" HGAP="81" ID="ID_1159300225" LINK="https://stackoverflow.com/q/53522781/444796" MODIFIED="1734473522786" TEXT="Grundidee" VSHIFT="-70">
<node CREATED="1734473328898" ID="ID_167026546" MODIFIED="1734473342551" TEXT="man verschafft sich eine Index-Sequenz aus &#xbb;der Struktur&#xab;"/>
<node CREATED="1734473343280" ID="ID_41745089" MODIFIED="1734473374857" TEXT="man erzeugt daraus std::integer_constant&lt;size_t, I&gt;"/>
<node CREATED="1734473375908" ID="ID_1340474514" MODIFIED="1734473403444" TEXT="und gibt diese als Werte an ein &#x3bb;-generic"/>
</node>
</node>
</node>
<node CREATED="1734474134102" FOLDED="true" ID="ID_1942900317" MODIFIED="1734474336372" TEXT="Hilfsmittel f&#xfc;r Tuple-Protocol">
<node COLOR="#435e98" CREATED="1734474149788" ID="ID_1392132639" MODIFIED="1734474304945" TEXT="is_Structured">
<arrowlink COLOR="#65a0c8" DESTINATION="ID_1962318483" ENDARROW="Default" ENDINCLINATION="-561;59;" ID="Arrow_ID_1253919416" STARTARROW="None" STARTINCLINATION="4095;820;"/>
<node CREATED="1734474272972" HGAP="45" ID="ID_752241989" MODIFIED="1734474297902" TEXT="erkennt ob ein Typ std::tuple_size&lt;T&gt; unterst&#xfc;tzt" VSHIFT="2">
<font NAME="SansSerif" SIZE="10"/>
</node>
</node>
<node COLOR="#435e98" CREATED="1734474159266" ID="ID_458414563" LINK="#ID_1710377001" MODIFIED="1734474304945" TEXT="StructType">
<node CREATED="1734474272972" HGAP="45" ID="ID_1114931809" MODIFIED="1734474326928" TEXT="&#xbb;hebt&#xab; einen einfachen Typ in ein Tupel" VSHIFT="2">
<font NAME="SansSerif" SIZE="10"/>
</node>
</node>
</node>
<node CREATED="1697906135803" ID="ID_47415467" MODIFIED="1697927623614" TEXT="Function utils"> <node CREATED="1697906135803" ID="ID_47415467" MODIFIED="1697927623614" TEXT="Function utils">
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1697906141042" FOLDED="true" ID="ID_334205441" MODIFIED="1697927708161" TEXT="lib::meta::_Fun"> <node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1697906141042" FOLDED="true" ID="ID_334205441" MODIFIED="1697927708161" TEXT="lib::meta::_Fun">
<font BOLD="true" NAME="SansSerif" SIZE="12"/> <font BOLD="true" NAME="SansSerif" SIZE="12"/>
@ -88484,7 +88539,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node> </node>
</node> </node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734310118603" ID="ID_1954508996" MODIFIED="1734310510263" TEXT="Feed-Manifold: Eigenschaften demonstrieren"> <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;"/> <linktarget COLOR="#406cd3" DESTINATION="ID_1954508996" ENDARROW="Default" ENDINCLINATION="-484;30;" ID="Arrow_ID_640616380" SOURCE="ID_1710382999" STARTARROW="None" STARTINCLINATION="-2974;268;"/>
<icon BUILTIN="pencil"/> <icon BUILTIN="pencil"/>
<node CREATED="1734310213994" ID="ID_691754137" MODIFIED="1734310241708" TEXT="mehrere Varianten von Funktions-Signaturen vorstellen"> <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"> <node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734310245306" ID="ID_1881940952" MODIFIED="1734310329959" TEXT="reiner Output mit einem Buffer">
@ -88497,17 +88552,20 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="flag-yellow"/> <icon BUILTIN="flag-yellow"/>
</node> </node>
</node> </node>
<node CREATED="1734310333302" ID="ID_1944960168" MODIFIED="1734310341752" TEXT="jeweils eine Manifold erstellen"/> <node COLOR="#338800" CREATED="1734310333302" ID="ID_1944960168" MODIFIED="1734391162068" TEXT="jeweils eine Manifold erstellen">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1734310343475" ID="ID_594704625" MODIFIED="1734389465766" TEXT="mit einem Test-BuffHandle beschicken"> <node COLOR="#338800" CREATED="1734310343475" ID="ID_594704625" MODIFIED="1734389465766" TEXT="mit einem Test-BuffHandle beschicken">
<icon BUILTIN="button_ok"/> <icon BUILTIN="button_ok"/>
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1734310375328" ID="ID_126539331" MODIFIED="1734310384120" TEXT="Test-Setup funktioniert nicht"> <node COLOR="#435e98" CREATED="1734310375328" FOLDED="true" ID="ID_126539331" MODIFIED="1734391150786" TEXT="Test-Setup funktioniert nicht">
<icon BUILTIN="broken-line"/> <icon BUILTIN="broken-line"/>
<node CREATED="1734310554672" ID="ID_1304749247" MODIFIED="1734310563567" TEXT="der Shortcut BufferProvider::lockBufferFor(args...)"/> <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"> <node CREATED="1734310565998" ID="ID_1313467025" MODIFIED="1734310582156" TEXT="hatte ihn bisher stets ohne konkrete Argumente verwendet">
<icon BUILTIN="smiley-oh"/> <icon BUILTIN="smiley-oh"/>
</node> </node>
<node CREATED="1734310588763" ID="ID_1230270056" MODIFIED="1734310609188" TEXT="Implementierung erzeugt on-the-fly einen Binder"> <node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1734310588763" ID="ID_1230270056" MODIFIED="1734391140351" 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="info"/>
<node COLOR="#338800" CREATED="1734310612849" FOLDED="true" ID="ID_433175533" MODIFIED="1734391145334" TEXT="Untersuchung">
<icon BUILTIN="forward"/> <icon BUILTIN="forward"/>
<node CREATED="1734310670231" ID="ID_179795775" MODIFIED="1734310853961" STYLE="bubble"> <node CREATED="1734310670231" ID="ID_179795775" MODIFIED="1734310853961" STYLE="bubble">
<richcontent TYPE="NODE"><html> <richcontent TYPE="NODE"><html>
@ -88592,13 +88650,42 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node COLOR="#5b280f" CREATED="1734311128476" ID="ID_1282234493" MODIFIED="1734311165943" TEXT="ich vestehe diese Typ-Signatur nicht"> <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;"/> <arrowlink COLOR="#a502af" DESTINATION="ID_1399777845" ENDARROW="Default" ENDINCLINATION="77;114;" ID="Arrow_ID_1332245965" STARTARROW="None" STARTINCLINATION="221;17;"/>
<icon BUILTIN="stop-sign"/> <icon BUILTIN="stop-sign"/>
<node CREATED="1734390596397" ID="ID_205739715" MODIFIED="1734390721967" TEXT="ist aber &#xbb;irgendwie&#xab; korrekt">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
will sagen ... das ist nicht das Problem; der Compiler macht hier eine verwirrende Transformation, die den Typ eines Funktionspointers mit Template-Argumenten instaniiert. Leider hat das aber zur Folge, da&#223; man das eigentliche Problem nicht sieht (selbst wenn man endlos drauf starrt...)
</p>
</body>
</html>
</richcontent>
</node> </node>
<node CREATED="1734376827379" ID="ID_781787798" MODIFIED="1734376870062" TEXT="Analyse mit direktem Aufruf (try.cpp)"> <node BACKGROUND_COLOR="#e0ceaa" COLOR="#802361" CREATED="1734390724212" HGAP="25" ID="ID_1829336783" MODIFIED="1734390924760" TEXT="(ja das tats&#xe4;chliche Problem w&#xe4;re hier versteckt gewesen)" VSHIFT="-15">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...aber aufgrund der sonderbaren Zuordnung praktisch nicht zu erkennen....
</p>
<p>
<u>Tip</u>: wir &#252;bergeben einen extra int-Parameter an eine Funktion, die auf einen in&amp;&amp; parametrisiert wurde
</p>
</body>
</html></richcontent>
<arrowlink COLOR="#f7dffd" DESTINATION="ID_217508249" ENDARROW="Default" ENDINCLINATION="420;13;" ID="Arrow_ID_1048587640" STARTARROW="None" STARTINCLINATION="171;10;"/>
<font NAME="SansSerif" SIZE="10"/>
<icon BUILTIN="smiley-angry"/>
</node>
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#690f14" CREATED="1734376827379" ID="ID_781787798" MODIFIED="1734390938929" TEXT="Analyse mit direktem Aufruf (try.cpp)">
<icon BUILTIN="forward"/>
<node BACKGROUND_COLOR="#fefc4e" COLOR="#351d75" CREATED="1734376872367" ID="ID_1505723613" MODIFIED="1734376903471" TEXT="reproduzierbar"> <node BACKGROUND_COLOR="#fefc4e" COLOR="#351d75" CREATED="1734376872367" ID="ID_1505723613" MODIFIED="1734376903471" TEXT="reproduzierbar">
<font BOLD="true" NAME="SansSerif" SIZE="12"/> <font BOLD="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="idea"/> <icon BUILTIN="idea"/>
</node> </node>
<node CREATED="1734376912301" HGAP="30" ID="ID_1396318540" MODIFIED="1734377033194" TEXT="Problem liegt am bind()-Ausdruck" VSHIFT="19"> <node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1734376912301" HGAP="30" ID="ID_1396318540" MODIFIED="1734390959612" TEXT="Problem liegt am bind()-Ausdruck" VSHIFT="19">
<icon BUILTIN="idea"/>
<node CREATED="1734376971625" ID="ID_1500057972" MODIFIED="1734376981959" TEXT="nur die Variante ohne weitere Argumente funktioniert"/> <node CREATED="1734376971625" ID="ID_1500057972" MODIFIED="1734376981959" TEXT="nur die Variante ohne weitere Argumente funktioniert"/>
<node CREATED="1734376982941" ID="ID_1093169887" MODIFIED="1734377042591" TEXT="funktioniert auch nicht wenn man die Variadics wegl&#xe4;&#xdf;t"/> <node CREATED="1734376982941" ID="ID_1093169887" MODIFIED="1734377042591" TEXT="funktioniert auch nicht wenn man die Variadics wegl&#xe4;&#xdf;t"/>
<node CREATED="1734377003920" ID="ID_1513970872" MODIFIED="1734377047351" TEXT="funktioniert auch nicht wenn man jedwede Templates wegl&#xe4;&#xdf;t"/> <node CREATED="1734377003920" ID="ID_1513970872" MODIFIED="1734377047351" TEXT="funktioniert auch nicht wenn man jedwede Templates wegl&#xe4;&#xdf;t"/>
@ -88615,8 +88702,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
Aufgerufen:&#160;<font face="Monospaced">(std::_Bind&lt;void (*(std::_Placeholder&lt;1&gt;, int))(void*, int&amp;&amp;)&gt;) (void*&amp;)</font> Aufgerufen:&#160;<font face="Monospaced">(std::_Bind&lt;void (*(std::_Placeholder&lt;1&gt;, int))(void*, int&amp;&amp;)&gt;) (void*&amp;)</font>
</p> </p>
</body> </body>
</html> </html></richcontent>
</richcontent>
</node> </node>
<node CREATED="1734378022592" ID="ID_1829030870" MODIFIED="1734378077075"> <node CREATED="1734378022592" ID="ID_1829030870" MODIFIED="1734378077075">
<richcontent TYPE="NODE"><html> <richcontent TYPE="NODE"><html>
@ -88656,13 +88742,32 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
Beobachtung:&#160;<font face="Monospaced">_Functor(_Bound_args ...)</font> Beobachtung:&#160;<font face="Monospaced">_Functor(_Bound_args ...)</font>
</p> </p>
</body> </body>
</html></richcontent>
<node CREATED="1734378654651" ID="ID_461500481" MODIFIED="1734391082365">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
void (*(std::_Placeholder&lt;1&gt;, int))(void*, <b><font color="#e00219">int&amp;&amp;</font></b>)
</p>
</body>
</html> </html>
</richcontent> </richcontent>
<node CREATED="1734378654651" ID="ID_461500481" MODIFIED="1734378710056" TEXT="void (*(std::_Placeholder&lt;1&gt;, int))(void*, int&amp;&amp;)"/> </node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1734378652331" ID="ID_804249162" MODIFIED="1734378687327" TEXT="&#x2260;"> <node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1734378652331" ID="ID_804249162" MODIFIED="1734378687327" TEXT="&#x2260;">
<font NAME="SansSerif" SIZE="14"/> <font NAME="SansSerif" SIZE="14"/>
</node> </node>
<node CREATED="1734378600970" ID="ID_1568813709" MODIFIED="1734378712108" TEXT="(void (*)(void*, int&amp;&amp;)) (std::_Placeholder&lt;1&gt;, int)"/> <node CREATED="1734378600970" ID="ID_1568813709" MODIFIED="1734391062488">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
(void (*)(void*, int&amp;&amp;)) (std::_Placeholder&lt;1&gt;, <b><font color="#a90404">int</font></b>)
</p>
</body>
</html>
</richcontent>
</node>
</node> </node>
<node COLOR="#5b280f" CREATED="1734380583440" ID="ID_944972328" MODIFIED="1734386726726" TEXT="Nein! das ist es nicht"> <node COLOR="#5b280f" CREATED="1734380583440" ID="ID_944972328" MODIFIED="1734386726726" TEXT="Nein! das ist es nicht">
<arrowlink COLOR="#5b3840" DESTINATION="ID_544743170" ENDARROW="Default" ENDINCLINATION="119;6;" ID="Arrow_ID_662126387" STARTARROW="None" STARTINCLINATION="-86;10;"/> <arrowlink COLOR="#5b3840" DESTINATION="ID_544743170" ENDARROW="Default" ENDINCLINATION="119;6;" ID="Arrow_ID_662126387" STARTARROW="None" STARTINCLINATION="-86;10;"/>
@ -88680,7 +88785,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node> </node>
</node> </node>
</node> </node>
<node CREATED="1734382759141" ID="ID_1882396684" MODIFIED="1734386826582" TEXT="Minimales Beispiel"> <node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1734382759141" ID="ID_1882396684" MODIFIED="1734390967611" TEXT="Minimales Beispiel">
<icon BUILTIN="info"/> <icon BUILTIN="info"/>
<node CREATED="1734383075588" ID="ID_1238945155" MODIFIED="1734383114465" STYLE="bubble"> <node CREATED="1734383075588" ID="ID_1238945155" MODIFIED="1734383114465" STYLE="bubble">
<richcontent TYPE="NODE"><html> <richcontent TYPE="NODE"><html>
@ -88739,8 +88844,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</div> </div>
</body> </body>
</html> </html></richcontent>
</richcontent>
</node> </node>
<node BACKGROUND_COLOR="#efb775" COLOR="#fa002a" CREATED="1734383189560" ID="ID_1267982630" MODIFIED="1734386862320" TEXT="Problem reproduzierbar mit neuesten Compilern"> <node BACKGROUND_COLOR="#efb775" COLOR="#fa002a" CREATED="1734383189560" ID="ID_1267982630" MODIFIED="1734386862320" TEXT="Problem reproduzierbar mit neuesten Compilern">
<icon BUILTIN="broken-line"/> <icon BUILTIN="broken-line"/>
@ -88749,10 +88853,20 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node> </node>
</node> </node>
</node> </node>
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1734385893133" ID="ID_1856944234" MODIFIED="1734385928505" TEXT="Ursache: Binder liefert eine Kopie"> <node BACKGROUND_COLOR="#f1be85" COLOR="#900148" CREATED="1734385893133" ID="ID_1856944234" MODIFIED="1734391010205">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
<u>Ursache</u>: Binder liefert eine <b>Kopie</b>
</p>
</body>
</html></richcontent>
<font NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="broken-line"/> <icon BUILTIN="broken-line"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1734381356576" ID="ID_217508249" MODIFIED="1734386742771" TEXT="...und die gebundene Funktion wurde aber f&#xfc;r RValues instantiiert"> <node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1734381356576" ID="ID_217508249" MODIFIED="1734386742771" TEXT="...und die gebundene Funktion wurde aber f&#xfc;r RValues instantiiert">
<linktarget COLOR="#fde3e9" DESTINATION="ID_217508249" ENDARROW="Default" ENDINCLINATION="464;20;" ID="Arrow_ID_891244985" SOURCE="ID_944972328" STARTARROW="None" STARTINCLINATION="-86;10;"/> <linktarget COLOR="#fde3e9" DESTINATION="ID_217508249" ENDARROW="Default" ENDINCLINATION="464;20;" ID="Arrow_ID_891244985" SOURCE="ID_944972328" STARTARROW="None" STARTINCLINATION="-86;10;"/>
<linktarget COLOR="#f7dffd" DESTINATION="ID_217508249" ENDARROW="Default" ENDINCLINATION="420;13;" ID="Arrow_ID_1048587640" SOURCE="ID_1829336783" STARTARROW="None" STARTINCLINATION="171;10;"/>
<icon BUILTIN="broken-line"/> <icon BUILTIN="broken-line"/>
</node> </node>
<node CREATED="1734385977834" ID="ID_1426672931" MODIFIED="1734385991397" TEXT="Das ist wohl ein inh&#xe4;rentes Problem"> <node CREATED="1734385977834" ID="ID_1426672931" MODIFIED="1734385991397" TEXT="Das ist wohl ein inh&#xe4;rentes Problem">
@ -88768,8 +88882,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
also: <font face="Monospaced">func&lt;</font><font face="Monospaced" color="#612549">ARGS</font><font face="Monospaced" color="#ed0212"><b>&amp;</b></font><font face="Monospaced">&#160;...&gt;</font> also: <font face="Monospaced">func&lt;</font><font face="Monospaced" color="#612549">ARGS</font><font face="Monospaced" color="#ed0212"><b>&amp;</b></font><font face="Monospaced">&#160;...&gt;</font>
</p> </p>
</body> </body>
</html> </html></richcontent>
</richcontent>
<linktarget COLOR="#f7fdca" DESTINATION="ID_1179078617" ENDARROW="Default" ENDINCLINATION="-159;21;" ID="Arrow_ID_1473711263" SOURCE="ID_314389327" STARTARROW="None" STARTINCLINATION="22;-36;"/> <linktarget COLOR="#f7fdca" DESTINATION="ID_1179078617" ENDARROW="Default" ENDINCLINATION="-159;21;" ID="Arrow_ID_1473711263" SOURCE="ID_314389327" STARTARROW="None" STARTINCLINATION="22;-36;"/>
</node> </node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#bd000b" CREATED="1734386778574" ID="ID_233689242" MODIFIED="1734386807216" TEXT="(funktioniert nat&#xfc;rlich nicht mit allen Typen...)"> <node BACKGROUND_COLOR="#e0ceaa" COLOR="#bd000b" CREATED="1734386778574" ID="ID_233689242" MODIFIED="1734386807216" TEXT="(funktioniert nat&#xfc;rlich nicht mit allen Typen...)">
@ -91751,6 +91864,46 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node> </node>
<node CREATED="1734300344699" ID="ID_660526050" MODIFIED="1734300363029" TEXT="strukturierte Typen in einem zweiten Schritt hinzuf&#xfc;gen"/> <node CREATED="1734300344699" ID="ID_660526050" MODIFIED="1734300363029" TEXT="strukturierte Typen in einem zweiten Schritt hinzuf&#xfc;gen"/>
</node> </node>
<node CREATED="1734458417453" ID="ID_1458239434" MODIFIED="1734458430809" TEXT="struktuierte Argumente korrekt klassifizieren">
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1734458433484" ID="ID_569916262" MODIFIED="1734458448795" TEXT="Frage: wie umgehen mit leeren Strukturen?">
<icon BUILTIN="help"/>
<node CREATED="1734458451019" ID="ID_522884490" LINK="https://math.stackexchange.com/a/3634823" MODIFIED="1734458500305" TEXT="Logik: leere Konjunktion &#x2261; true">
<icon BUILTIN="info"/>
</node>
<node CREATED="1734458527530" ID="ID_1065531651" MODIFIED="1734458570509">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
man k&#246;nnte nun sagen: <i>det sollen se halt nit machen!</i>
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1734458587984" ID="ID_402660303" MODIFIED="1734458899210" TEXT="sekund&#xe4;re Schwierigkeit: wir klassifizieren die Use-Cases anhand der &#xbb;Art&#xab; eines Arguments">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
bedeutet, wir &#8222;biegen&#8220; dann in einem Fall, n&#228;mlich wenn nur zwei Argumente gegeben sind, jeweils zwangsl&#228;ufig in einer bestimmten Richtung ab, je nachdem ob eine leere Struct als <i>wahr gilt; </i>
</p>
<p>
</p>
<p>
Beispielsweise in der aktuellen Logik pr&#252;fen wir ob der 1.Slot ein &#187;Valu&#171; ist, was dann bei einer leeren Struct dazu f&#252;hren w&#252;rde, diese als ein leeres Param-Tupel zu behandeln. Kommt dann darauf an, ob das tats&#228;chlich einen Schaden im Code anrichtet, oder auch <i>leer durchl&#228;uft.</i>&#160;Denn an sich sollte es ja egal sein, sofern dann nur dieser Slot auch tats&#228;chlich keine Behandlung bekommt
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="forward"/>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1734458906909" ID="ID_53372671" MODIFIED="1734458916675" TEXT="sp&#xe4;ter nochmal beurteilen">
<icon BUILTIN="hourglass"/>
</node>
</node>
</node>
</node> </node>
<node CREATED="1734299615144" ID="ID_1061968970" MODIFIED="1734299633817" TEXT="Umgang mit komplexen Argumenten"> <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"> <node COLOR="#5b280f" CREATED="1734299635613" ID="ID_1256304259" MODIFIED="1734299646473" TEXT="Fallunterscheidung Tupel und Array">
@ -91890,9 +92043,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node> </node>
</node> </node>
</node> </node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734214260094" ID="ID_1731140529" MODIFIED="1734214303534" TEXT="mu&#xdf; die Storage neu bestimmen"> <node COLOR="#435e98" CREATED="1734214260094" ID="ID_1731140529" MODIFIED="1734397828794" TEXT="mu&#xdf; die Storage neu bestimmen">
<icon BUILTIN="yes"/> <icon BUILTIN="yes"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734214271580" ID="ID_1045815708" MODIFIED="1734299228970" TEXT="Nochmal &#xfc;ber die Rolle der FeedManifold nachdenken"> <node COLOR="#435e98" CREATED="1734214271580" ID="ID_1045815708" MODIFIED="1734397811621" 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;"/> <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"/> <icon BUILTIN="yes"/>
<node CREATED="1734214319422" ID="ID_405803529" MODIFIED="1734214333944" TEXT="sie ist und bleibt die dynamische Invocation-Storage"/> <node CREATED="1734214319422" ID="ID_405803529" MODIFIED="1734214333944" TEXT="sie ist und bleibt die dynamische Invocation-Storage"/>
@ -91955,7 +92108,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node> </node>
</node> </node>
</node> </node>
<node CREATED="1734226154995" ID="ID_1824135693" MODIFIED="1734226165663" TEXT="Konsequenzen"> <node COLOR="#435e98" CREATED="1734226154995" ID="ID_1824135693" MODIFIED="1734397838296" TEXT="Konsequenzen">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="forward"/>
<node CREATED="1734226167432" ID="ID_152918477" MODIFIED="1734226177431" TEXT="FeedManifold ist der InvocationAdapter"/> <node CREATED="1734226167432" ID="ID_152918477" MODIFIED="1734226177431" TEXT="FeedManifold ist der InvocationAdapter"/>
<node CREATED="1734226179091" ID="ID_656635473" MODIFIED="1734226192693" TEXT="Parametrisiert wird mit dem konkreten Funktor"/> <node CREATED="1734226179091" ID="ID_656635473" MODIFIED="1734226192693" TEXT="Parametrisiert wird mit dem konkreten Funktor"/>
<node CREATED="1734226218750" ID="ID_1815522792" MODIFIED="1734226239453" TEXT="daraus mu&#xdf; sich FeedManifold komplett selbst konfigurieren"/> <node CREATED="1734226218750" ID="ID_1815522792" MODIFIED="1734226239453" TEXT="daraus mu&#xdf; sich FeedManifold komplett selbst konfigurieren"/>
@ -91965,10 +92120,10 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node> </node>
</node> </node>
</node> </node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734226596427" ID="ID_1730595360" MODIFIED="1734226615270" TEXT="Struktur neu aufbauen"> <node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734226596427" ID="ID_1730595360" MODIFIED="1734397856015" TEXT="Struktur neu aufbauen">
<icon BUILTIN="flag-yellow"/> <icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734226295084" ID="ID_43554059" MODIFIED="1734226617257" TEXT="FeedManifold wird aus mehreren Layern zusammengesetzt"> <node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734226295084" ID="ID_43554059" MODIFIED="1734397850135" TEXT="FeedManifold wird aus mehreren Layern zusammengesetzt">
<icon BUILTIN="flag-yellow"/> <icon BUILTIN="pencil"/>
<node CREATED="1734226447447" ID="ID_1121321956" MODIFIED="1734226473215" TEXT="Param-Storage (optional)"/> <node CREATED="1734226447447" ID="ID_1121321956" MODIFIED="1734226473215" TEXT="Param-Storage (optional)"/>
<node CREATED="1734226474754" ID="ID_334989563" MODIFIED="1734226483630" TEXT="Input-Storage (optional)"/> <node CREATED="1734226474754" ID="ID_334989563" MODIFIED="1734226483630" TEXT="Input-Storage (optional)"/>
<node CREATED="1734226485049" ID="ID_1102989908" MODIFIED="1734226491735" TEXT="Output-Storage (mandatory)"/> <node CREATED="1734226485049" ID="ID_1102989908" MODIFIED="1734226491735" TEXT="Output-Storage (mandatory)"/>
@ -91987,11 +92142,11 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="flag-yellow"/> <icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734282520970" ID="ID_1381423523" MODIFIED="1734282533060" TEXT="Aufgabe: flexible Storage-Struktur bereitstellen"> <node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734282520970" ID="ID_1381423523" MODIFIED="1734282533060" TEXT="Aufgabe: flexible Storage-Struktur bereitstellen">
<icon BUILTIN="pencil"/> <icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734282535179" ID="ID_1723358537" MODIFIED="1734282603738" TEXT="l&#xe4;uft wohl hinaus auf ein compile-time conditional mix-in"> <node COLOR="#435e98" CREATED="1734282535179" ID="ID_1723358537" MODIFIED="1734397871068" TEXT="l&#xe4;uft wohl hinaus auf ein compile-time conditional mix-in">
<icon BUILTIN="idea"/> <icon BUILTIN="idea"/>
</node> </node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734282677568" ID="ID_1599850203" MODIFIED="1734282692157" TEXT="Konfigurations-Basis-Klasse dazwischen schalten"> <node COLOR="#338800" CREATED="1734282677568" ID="ID_1599850203" MODIFIED="1734397868364" TEXT="Konfigurations-Basis-Klasse dazwischen schalten">
<icon BUILTIN="flag-yellow"/> <icon BUILTIN="button_ok"/>
</node> </node>
</node> </node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1734282698342" ID="ID_1166367446" MODIFIED="1734283404476" TEXT="Aufgabe: Konstruktor-Parameter h&#xe4;ngen von der Konfiguration ab"> <node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1734282698342" ID="ID_1166367446" MODIFIED="1734283404476" TEXT="Aufgabe: Konstruktor-Parameter h&#xe4;ngen von der Konfiguration ab">
@ -92053,15 +92208,141 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="flag-yellow"/> <icon BUILTIN="flag-yellow"/>
<node CREATED="1734397915749" ID="ID_1226245371" MODIFIED="1734397929207" TEXT="mu&#xdf; Pr&#xe4;dikate auf alle Typen anwenden"/> <node CREATED="1734397915749" ID="ID_1226245371" MODIFIED="1734397929207" TEXT="mu&#xdf; Pr&#xe4;dikate auf alle Typen anwenden"/>
<node CREATED="1734397930454" ID="ID_1067248557" MODIFIED="1734397961120" TEXT="brauche Operation &#xfc;ber Elemente eines strukturierten Typs"/> <node CREATED="1734397930454" ID="ID_1067248557" MODIFIED="1734397961120" TEXT="brauche Operation &#xfc;ber Elemente eines strukturierten Typs"/>
<node CREATED="1734403556414" ID="ID_971023481" MODIFIED="1734403580870" TEXT="mu&#xdf; dazu den Einzelfall-Typ auf einen structured-Type &#xbb;heben&#xab;"> <node CREATED="1734397967893" ID="ID_662205800" MODIFIED="1734398257368" TEXT="der forEach-Apply-Trick funktioniert auf structuredTypes">
<node CREATED="1734403583091" ID="ID_1710377001" MODIFIED="1734403593253" TEXT="StructType&lt;TY&gt;"> <icon BUILTIN="idea"/>
</node>
<node CREATED="1734398073088" ID="ID_1873421349" MODIFIED="1734398086312" TEXT="mu&#xdf; aber auf Array-Elemente zugreifen">
<node CREATED="1734398091309" ID="ID_448809561" MODIFIED="1734398115209" TEXT="Subscript in die Buffer-Table">
<icon BUILTIN="info"/>
<node COLOR="#435e98" CREATED="1734398117130" ID="ID_288959672" MODIFIED="1734398124401" TEXT="sinnvoll?">
<node CREATED="1734398126369" ID="ID_1110387551" MODIFIED="1734398142107" TEXT="stellt eine Br&#xfc;cke dar f&#xfc;r downstream-Code"/>
<node CREATED="1734398143406" ID="ID_1350915295" MODIFIED="1734398156440" TEXT="dieser kann dann eine einfache Array-Iteration machen"/>
<node CREATED="1734398157764" ID="ID_110363632" MODIFIED="1734398171805" TEXT="im Besonderen: rekursive Calls..."/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1734398371276" ID="ID_1513818427" MODIFIED="1734474043348" TEXT="brauche forEach(IndexTuple)">
<icon BUILTIN="yes"/>
<node CREATED="1734399341087" ID="ID_763559603" MODIFIED="1734399361894" TEXT="sollte aber auch f&#xfc;r frei stehenden Einzeltyp funktionieren"/>
<node COLOR="#5b280f" CREATED="1734399363642" ID="ID_535610409" MODIFIED="1734471924041" TEXT="Verwende das gute alte InstantiateWithIndex aus generator.hpp">
<icon BUILTIN="button_cancel"/>
<node CREATED="1734399387338" ID="ID_683945175" MODIFIED="1734399397194" TEXT="ja ... die guten alten Loki-Listen"/>
<node CREATED="1734399405485" ID="ID_676422515" MODIFIED="1734399426829" TEXT="brauche dazu dann nur die Typ-Sequenz f&#xfc;r einen structuredType"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1734471930599" ID="ID_885074382" MODIFIED="1734471957968" TEXT="mu&#xdf; daf&#xfc;r aber eine relativ komplexe Intantiierungs-Konvention einf&#xfc;hren">
<icon BUILTIN="smily_bad"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734399930258" ID="ID_552320825" MODIFIED="1734471981106" TEXT="oder doch nur einen Index-Generator &#x27f6; &#x3bb;">
<icon BUILTIN="yes"/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1734471983248" ID="ID_180764617" MODIFIED="1734472002527" TEXT="geht das &#xfc;berhaupt mit einem Lambda?">
<font NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="help"/>
<node COLOR="#5b280f" CREATED="1734472004853" ID="ID_1548338453" MODIFIED="1734472034734" TEXT="im Body wird der Index als constexpr gebraucht">
<icon BUILTIN="closed"/>
</node>
<node CREATED="1734472037144" ID="ID_465893949" MODIFIED="1734472072711" TEXT="brauche also wohl doch einen speziellen Template-Extension-point..."/>
<node BACKGROUND_COLOR="#ede3b1" COLOR="#690f14" CREATED="1734472074252" ID="ID_97193324" MODIFIED="1734472273486" TEXT="DOCH &#x27f6; es geht!">
<icon BUILTIN="idea"/>
<node CREATED="1734472095569" ID="ID_1467523521" LINK="https://stackoverflow.com/q/53522781/444796" MODIFIED="1734472125384" TEXT="Trick auf Stackoverflow gefunden"/>
<node COLOR="#435e98" CREATED="1734472185682" ID="ID_1287540275" MODIFIED="1734472207270" TEXT="man gibt dem Lambda eine std::integer_constant">
<icon BUILTIN="idea"/>
</node>
<node BACKGROUND_COLOR="#cab3d2" COLOR="#a6086b" CREATED="1734472140658" ID="ID_1563109849" MODIFIED="1734472237864" TEXT="da mu&#xdf; man erst mal drauf kommen!!!">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Hut ab f&#252;r den Poster auf Stackoverflow: der hat diese M&#246;glichkeit gesehen und ist dann nur an ein paar Kleinigkeiten gescheitert.
</p>
</body>
</html>
</richcontent>
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1734472285111" ID="ID_576227286" MODIFIED="1734473972771" TEXT="in generischen Library-Helper einbauen">
<icon BUILTIN="yes"/>
<node CREATED="1734472314563" ID="ID_878985358" MODIFIED="1734472355171" TEXT="weil &#x2014; mu&#xdf; hier Komplexit&#xe4;t verbergen">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
sonst dreht &#187;man&#171; (&#8793;ich) noch durch...
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1734472364508" ID="ID_1969110660" MODIFIED="1734472377795" TEXT="und sieht im Moment tats&#xe4;chlich nach etwas N&#xfc;tzlichem aus"/>
<node CREATED="1734472387069" ID="ID_1245131792" MODIFIED="1734472415065" TEXT="w&#xe4;hle die Struktur &#xab;Template + Funktions-front-end&#xbb;"/>
<node COLOR="#435e98" CREATED="1734472416485" ID="ID_564026816" MODIFIED="1734472668891" TEXT="aber wohin damit??">
<icon BUILTIN="help"/>
<node CREATED="1734472427460" ID="ID_453448134" MODIFIED="1734472439094" TEXT="naheliegend w&#xe4;ren die tuple-helper"/>
<node CREATED="1734472440504" ID="ID_288639764" MODIFIED="1734472480555" TEXT="ich m&#xf6;chte aber keinen #import &lt;tuple&gt;">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...denn diese Mechanik ist im Grunde komplett unabh&#228;ngig von Tuples (oder auch sonstigen Strukturen)
</p>
</body>
</html>
</richcontent>
</node>
<node COLOR="#5b280f" CREATED="1734472482636" ID="ID_1888534617" MODIFIED="1734472501560" TEXT="k&#xf6;nnte sogar in meta/utils">
<icon BUILTIN="stop-sign"/>
<node COLOR="#8a2763" CREATED="1734472505467" HGAP="25" ID="ID_1535049858" MODIFIED="1734472529217" TEXT="die werden langsam zu fett..." VSHIFT="9">
<font NAME="SansSerif" SIZE="9"/>
</node>
</node>
<node COLOR="#435e98" CREATED="1734472534622" ID="ID_929896284" MODIFIED="1734472663473" TEXT="dann wohl ehr zu den variadic-helpern?">
<icon BUILTIN="yes"/>
<node CREATED="1734472551411" ID="ID_193385433" MODIFIED="1734472563445" TEXT="hat aber &#xfc;berhaupt keinen Bezug zu &#xbb;Variadics&#xab;"/>
<node CREATED="1734472566033" ID="ID_653891510" MODIFIED="1734472579115" TEXT="sondern verwendet das C++ tuple-Protokoll"/>
<node COLOR="#435e98" CREATED="1734472580559" ID="ID_267621132" MODIFIED="1734472599967" TEXT="dann &#x201e;schaffen&#x201c; wir eben einen Bezug">
<icon BUILTIN="yes"/>
</node>
<node COLOR="#435e98" CREATED="1734472602340" ID="ID_399912585" MODIFIED="1734472651061" TEXT="magische Varianten">
<icon BUILTIN="idea"/>
<node CREATED="1734472615890" ID="ID_1127700750" MODIFIED="1734472622189" TEXT="verwendet Tuple-Protokll"/>
<node CREATED="1734472623499" ID="ID_1086241536" MODIFIED="1734472636588" TEXT="verwendet L&#xe4;nge einer Loki-Liste"/>
<node CREATED="1734472637935" ID="ID_785815106" MODIFIED="1734472646649" TEXT="z&#xe4;hlt Anzahl an Template-Argumenten"/>
</node>
</node>
<node CREATED="1734472673374" ID="ID_1249171051" MODIFIED="1734473957976">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
<font color="#837070" face="Monospaced">lib::meta::</font><font color="#3c2980" face="Monospaced"><b>forEachIDX</b></font><font color="#837070" face="Monospaced">&lt;</font><font color="#8f224f" face="Monospaced">T</font><font color="#837070" face="Monospaced">&gt; ( </font><font color="#783d34" face="Monospaced"><b>&#955; </b></font><font color="#837070" face="Monospaced">)</font>
</p>
</body>
</html></richcontent>
<linktarget COLOR="#3c85dc" DESTINATION="ID_1249171051" ENDARROW="Default" ENDINCLINATION="-2291;-794;" ID="Arrow_ID_987359602" SOURCE="ID_1252632465" STARTARROW="None" STARTINCLINATION="4755;992;"/>
<icon BUILTIN="forward"/>
<node CREATED="1734472882847" ID="ID_533227992" MODIFIED="1734472892441" TEXT="der Funktor bekommt compile-time-Konstanten"/>
<node CREATED="1734472894029" ID="ID_120767076" MODIFIED="1734472902507" TEXT="er kann damit Templates Instantiieren"/>
</node>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1734473996312" ID="ID_970193220" MODIFIED="1734474093813" TEXT="zusammen mit einem Access-Helper &#x27f9; Basis-Funktionalit&#xe4;t bereitgestellt">
<linktarget COLOR="#419bab" DESTINATION="ID_970193220" ENDARROW="Default" ENDINCLINATION="7;120;" ID="Arrow_ID_633874673" SOURCE="ID_971023481" STARTARROW="None" STARTINCLINATION="30;-94;"/>
<icon BUILTIN="button_ok"/>
</node>
</node>
<node CREATED="1734403556414" ID="ID_971023481" MODIFIED="1734474109401" TEXT="mu&#xdf; dazu den Einzelfall-Typ auf einen structured-Type &#xbb;heben&#xab;">
<arrowlink COLOR="#419bab" DESTINATION="ID_970193220" ENDARROW="Default" ENDINCLINATION="7;120;" ID="Arrow_ID_633874673" STARTARROW="None" STARTINCLINATION="30;-94;"/>
<node COLOR="#338800" CREATED="1734403583091" ID="ID_1710377001" MODIFIED="1734474118087" TEXT="StructType&lt;TY&gt;">
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1734403595048" ID="ID_496079267" MODIFIED="1734450365546" TEXT="spricht falsch an im Compile"> <node COLOR="#435e98" CREATED="1734403595048" ID="ID_496079267" MODIFIED="1734450365546" TEXT="spricht falsch an im Compile">
<icon BUILTIN="broken-line"/> <icon BUILTIN="broken-line"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#a6086b" CREATED="1734403634332" ID="ID_817342705" MODIFIED="1734450390281" TEXT="funktioniert enable_if&lt;is_Structured&lt;long*&gt; &gt; korrekt?"/> <node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1734403634332" ID="ID_817342705" MODIFIED="1734451117928" TEXT="funktioniert enable_if&lt;is_Structured&lt;long*&gt; &gt; korrekt?"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1734450087903" ID="ID_1588306692" MODIFIED="1734450379412" TEXT="is_Structured war naiv implementiert"> <node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1734450087903" ID="ID_1588306692" MODIFIED="1734450379412" TEXT="is_Structured war naiv implementiert">
<icon BUILTIN="broken-line"/> <icon BUILTIN="broken-line"/>
</node> </node>
<node COLOR="#338800" CREATED="1734450102857" ID="ID_1962318483" MODIFIED="1734450109137" TEXT="versuche es besser..."> <node COLOR="#338800" CREATED="1734450102857" ID="ID_1962318483" MODIFIED="1734474259663" TEXT="versuche es besser...">
<linktarget COLOR="#65a0c8" DESTINATION="ID_1962318483" ENDARROW="Default" ENDINCLINATION="-561;59;" ID="Arrow_ID_1253919416" SOURCE="ID_1392132639" STARTARROW="None" STARTINCLINATION="4095;820;"/>
<icon BUILTIN="button_ok"/> <icon BUILTIN="button_ok"/>
<node COLOR="#5b280f" CREATED="1734450111282" ID="ID_1778075632" MODIFIED="1734450135378" TEXT="das ganze &#xbb;tuple-protocol&#xab; abpr&#xfc;fen"> <node COLOR="#5b280f" CREATED="1734450111282" ID="ID_1778075632" MODIFIED="1734450135378" TEXT="das ganze &#xbb;tuple-protocol&#xab; abpr&#xfc;fen">
<icon BUILTIN="button_cancel"/> <icon BUILTIN="button_cancel"/>
@ -92078,9 +92359,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node COLOR="#435e98" CREATED="1734450281377" ID="ID_258396157" MODIFIED="1734450319901" TEXT="ein enable_if-Variante dazu"/> <node COLOR="#435e98" CREATED="1734450281377" ID="ID_258396157" MODIFIED="1734450319901" TEXT="ein enable_if-Variante dazu"/>
<node COLOR="#435e98" CREATED="1734450289604" ID="ID_1035452314" MODIFIED="1734450357273" TEXT="getestet mit verschiedenen Typen"> <node COLOR="#435e98" CREATED="1734450289604" ID="ID_1035452314" MODIFIED="1734450357273" TEXT="getestet mit verschiedenen Typen">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
MetaUtils_test::detect_tupleProtocol() MetaUtils_test::detect_tupleProtocol()
@ -92092,6 +92371,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node> </node>
</node> </node>
</node> </node>
<node COLOR="#338800" CREATED="1734457614086" ID="ID_1045658856" MODIFIED="1734457639968" TEXT="Gepr&#xfc;ft: StructType&lt;T&gt; verh&#xe4;lt sich nun wie erwartet">
<icon BUILTIN="button_ok"/>
</node>
</node> </node>
</node> </node>
</node> </node>
@ -92160,7 +92442,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="button_cancel"/> <icon BUILTIN="button_cancel"/>
</node> </node>
<node CREATED="1734309990069" ID="ID_1710382999" MODIFIED="1734310510263" TEXT="angesiedelt in NodeBase_test"> <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;"/> <arrowlink COLOR="#406cd3" DESTINATION="ID_1954508996" ENDARROW="Default" ENDINCLINATION="-484;30;" 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;"/> <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"/> <icon BUILTIN="info"/>
</node> </node>