Invocation: simplify and unify type decision logic

Now reaping the benefits of the ambitious refactorings done yesterday.
- Only retaining the basic distinction of the four use cases
- all further adaptation now directly based on the »lifted« types
- can even add quite stringent compile-time sanity checks.

Now the refactoring is on-par with the capabilities of the old downstream code,
which, btw, could be retained in compilable (yet not working) state. But the new
traits logic is already more capable and could accept tuples and arrays as well.

Next major topic to address is to provide the foundation for parameter handling.
This commit is contained in:
Fischlurch 2024-12-18 20:50:33 +01:00
parent d5bbec6519
commit 990e4cbb68
3 changed files with 180 additions and 185 deletions

View file

@ -270,6 +270,12 @@ namespace meta {
using BAS::BAS; using BAS::BAS;
}; };
template<class BAS, typename TAG =void>
struct Tagged
: BAS
{
using BAS::BAS;
};

View file

@ -106,21 +106,20 @@ namespace engine {
namespace {// Introspection helpers.... namespace {// Introspection helpers....
using lib::meta::_Fun; using lib::meta::_Fun;
using lib::meta::enable_if;
using lib::meta::is_UnaryFun; using lib::meta::is_UnaryFun;
using lib::meta::is_BinaryFun; using lib::meta::is_BinaryFun;
using lib::meta::is_TernaryFun; using lib::meta::is_TernaryFun;
using std::remove_reference_t;
using lib::meta::enable_if;
using lib::meta::is_Structured; using lib::meta::is_Structured;
using lib::meta::forEachIDX; using lib::meta::forEachIDX;
using lib::meta::ElmTypes; using lib::meta::ElmTypes;
using lib::meta::Tagged;
using lib::meta::TySeq; using lib::meta::TySeq;
using std::is_pointer; using std::is_pointer;
using std::is_reference; using std::is_reference;
using std::remove_reference_t;
using std::remove_pointer_t; using std::remove_pointer_t;
using std::tuple_element_t; using std::tuple_element_t;
using std::tuple_size_v;
using std::void_t;
using std::__and_; using std::__and_;
using std::__not_; using std::__not_;
@ -129,7 +128,6 @@ namespace engine {
struct is_Value struct is_Value
: __and_<__not_<is_pointer<V>> : __and_<__not_<is_pointer<V>>
,__not_<is_reference<V>> ,__not_<is_reference<V>>
,__not_<is_Structured<V>>
,std::is_default_constructible<V> ,std::is_default_constructible<V>
,std::is_copy_assignable<V> ,std::is_copy_assignable<V>
> >
@ -146,115 +144,49 @@ namespace engine {
template<class TUP, template<class> class COND> /**
struct isAllElements * Trait template to analyse and adapt to the given processing function.
{ * The detection logic encoded here attempts to figure out the meaning of
template<typename> * the function arguments by their arrangement and type. As a base rule,
struct AndAll; * the arguments are expected in the order: Parameters, Input, Output
template<size_t...idx> * - a single argument function can only be a data generator
struct AndAll<std::index_sequence<idx...>> * - a binary function can either be a processor input -> output,
{ * or accept parameters at «slot-0» and provide output at «slot-1»
static constexpr bool value = * - a ternary function is expected to accept Parameters, Input, Output.
__and_<COND<tuple_element_t<idx,TUP>> ... * @tparam FUN a _function-like_ object, expected to accept 1 - 3 arguments,
>::value; * which all may be simple types, tuples or arrays.
}; * @note »Buffers« are always accepted by pointer, which allows
using Elms = std::make_index_sequence<tuple_size_v<TUP>>; * to distinguish parameter and data «slots«
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
{
using Seq = TySeq<X>;
using Tup = std::tuple<X>;
};
template<class TUP>
struct StructType<TUP, enable_if<is_Structured<TUP>> >
{
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
* @remark this is the rather simple yet common case that media processing
* is done by a function, which takes an array of input and output
* buffer pointers with a common type; this simple case is used
* 7/2024 for prototyping and validate the design.
* @tparam FUN a _function-like_ object, expected to accept two arguments,
* which both are arrays of buffer pointers (input, output).
*/ */
template<class FUN> template<class FUN>
struct _ProcFun struct _ProcFun
{ {
static_assert(_Fun<FUN>() , "something funktion-like required"); static_assert(_Fun<FUN>() , "something funktion-like required");
static_assert(0 < _Fun<FUN>::ARITY , "function with at least one argument 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"); static_assert(3 >= _Fun<FUN>::ARITY , "function with up to three arguments accepted");
using Sig = typename _Fun<FUN>::Sig; using Sig = typename _Fun<FUN>::Sig;
template<class SIG, size_t i> template<size_t i>
using _Arg = typename lib::meta::Pick<typename _Fun<SIG>::Args, i>::Type; 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 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!
using Args = TySeq<PAR>;
enum{ SIZ = 1 };
};
template<class BUF>
struct _ArgTrait<BUF*, enable_if<is_Buffer<BUF*>>>
{
using Buff = BUF;
using Args = TySeq<BUF*>;
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>
struct _ArgTrait<std::array<BUF*,N>>
{
using Buff = BUF;
using Args = TySeq<BUF>;///////////////////////////OOO Schmuh!!!
enum{ SIZ = N };
};
template<size_t i, template<class> class COND>
using AllElements = typename ElmTypes<_Arg<i>>::template AndAll<COND>;
template<size_t i>
static constexpr bool nonEmpty = ElmTypes<_Arg<i>>::SIZ;
template<size_t i>
static constexpr bool is_BuffSlot = AllElements<i, is_Buffer>();
template<size_t i>
static constexpr bool is_ParamSlot = AllElements<i, is_Value>();
/**
* Detect use-case as indicated by the function signature
*/
template<class SIG, typename SEL =void> template<class SIG, typename SEL =void>
struct _Case struct _Case
{ {
static_assert(not sizeof(SIG), "use case could not be determined from function stignature"); static_assert (not sizeof(SIG), "use case could not be determined from function signature");
}; };
template<class SIG> template<class SIG>
struct _Case<SIG, enable_if<is_UnaryFun<SIG>>> struct _Case<SIG, enable_if<is_UnaryFun<SIG>>>
@ -267,7 +199,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 = typename ElmTypes<_Arg<SIG,0>>::template AndAll<is_Buffer>()? 0 : 1 , SLOT_I = (nonEmpty<0> and is_BuffSlot<0>)? 0 : 1
}; };
}; };
template<class SIG> template<class SIG>
@ -278,19 +210,16 @@ namespace engine {
}; };
}; };
using SigI = _Arg<FUN,_Case<Sig>::SLOT_I>; using SigI = _Arg<_Case<Sig>::SLOT_I>;
using SigO = _Arg<FUN,_Case<Sig>::SLOT_O>; using SigO = _Arg<_Case<Sig>::SLOT_O>;
using SigP = _Arg<FUN, 0>; using SigP = _Arg< 0>;
using ArgI = typename _ArgTrait<SigI>::Args; using ArgI = typename ElmTypes<SigI>::Seq;
using ArgO = typename _ArgTrait<SigO>::Args; using ArgO = typename ElmTypes<SigO>::Seq;
using ArgP = typename _ArgTrait<SigP>::Args; using ArgP = typename ElmTypes<SigP>::Seq;
using BuffI = typename _ArgTrait<SigI>::Buff; enum{ FAN_I = ElmTypes<SigI>::SIZ
using BuffO = typename _ArgTrait<SigO>::Buff; , FAN_O = ElmTypes<SigO>::SIZ
, FAN_P = ElmTypes<SigP>::SIZ
enum{ FAN_I = _ArgTrait<SigI>::SIZ
, FAN_O = _ArgTrait<SigO>::SIZ
, FAN_P = _ArgTrait<SigP>::SIZ
, SLOT_I = _Case<Sig>::SLOT_I , SLOT_I = _Case<Sig>::SLOT_I
, SLOT_O = _Case<Sig>::SLOT_O , SLOT_O = _Case<Sig>::SLOT_O
, SLOT_P = 0 , SLOT_P = 0
@ -299,9 +228,22 @@ namespace engine {
static constexpr bool hasInput() { return SLOT_I != SLOT_O; } static constexpr bool hasInput() { return SLOT_I != SLOT_O; }
static constexpr bool hasParam() { return 0 < SLOT_I; } static constexpr bool hasParam() { return 0 < SLOT_I; }
/* ========== |consistency checks| ========== */
static_assert (nonEmpty<SLOT_O> or nonEmpty<SLOT_I> or nonEmpty<SLOT_P>
,"At least one slot of the function must accept data");
static_assert (is_BuffSlot<SLOT_O>, "Output slot of the function must accept buffer pointers");
static_assert (is_BuffSlot<SLOT_I>, "Input slot of the function must accept buffer pointers");
static_assert (is_ParamSlot<SLOT_P> or not hasParam()
,"Param slot must accept value data");
using BuffO = typename ArgO::List::Head;
using BuffI = typename std::conditional<hasInput(), typename ArgI::List::Head, BuffO>::type; /////////////////////////TODO obsolete ... remove after switch
}; };
/** FeedManifold building block: hold parameter data */
template<class FUN> template<class FUN>
struct ParamStorage struct ParamStorage
{ {
@ -330,7 +272,7 @@ namespace engine {
}; };
template<class X> template<class X>
struct NotProvided : lib::meta::NullType { }; using NotProvided = Tagged<lib::meta::NullType, X>;
template<bool yes, class B> template<bool yes, class B>
using Provide_if = std::conditional_t<yes, B, NotProvided<B>>; using Provide_if = std::conditional_t<yes, B, NotProvided<B>>;
@ -394,10 +336,6 @@ namespace engine {
: process{forward<INIT> (funSetup)...} : process{forward<INIT> (funSetup)...}
{ } { }
using TupI = typename StructType<ArgI>::Tup;
using TupO = typename StructType<ArgO>::Tup;
template<size_t i, class ARG> template<size_t i, class ARG>
auto& auto&
accessArg (ARG& arg) accessArg (ARG& arg)
@ -408,6 +346,10 @@ namespace engine {
return arg; return arg;
} }
using TupI = typename ElmTypes<ArgI>::Tup;
using TupO = typename ElmTypes<ArgO>::Tup;
void void
connect() connect()
{ {
@ -418,11 +360,6 @@ namespace engine {
using BuffI = remove_pointer_t<tuple_element_t<i, TupI>>; using BuffI = remove_pointer_t<tuple_element_t<i, TupI>>;
accessArg<i> (_F::inArgs) = & _F::inBuff[i].template accessAs<BuffI>(); 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) // always wire output buffer(s)
{ {
@ -431,11 +368,6 @@ namespace engine {
using BuffO = remove_pointer_t<tuple_element_t<i, TupO>>; using BuffO = remove_pointer_t<tuple_element_t<i, TupO>>;
accessArg<i> (_F::outArgs) = & _F::outBuff[i].template accessAs<BuffO>(); 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>();
} }
} }
@ -465,8 +397,8 @@ namespace engine {
struct SimpleFunctionInvocationAdapter struct SimpleFunctionInvocationAdapter
: MAN : MAN
{ {
using BuffI = typename _ProcFun<FUN>::BuffI; using BuffI = remove_pointer_t<typename _ProcFun<FUN>::BuffI>;
using BuffO = typename _ProcFun<FUN>::BuffO; using BuffO = remove_pointer_t<typename _ProcFun<FUN>::BuffO>;
enum{ N = MAN::STORAGE_SIZ enum{ N = MAN::STORAGE_SIZ
, FAN_I = _ProcFun<FUN>::FAN_I , FAN_I = _ProcFun<FUN>::FAN_I
@ -475,7 +407,8 @@ namespace engine {
static_assert(FAN_I <= N and FAN_O <= N); static_assert(FAN_I <= N and FAN_O <= N);
using ArrayI = typename _ProcFun<FUN>::SigI; // using ArrayI = typename _ProcFun<FUN>::SigI;
using ArrayI = typename _Fun<FUN>::Args::List::Head; ///////////////////TODO workaround for obsolete code, about to be removed
using ArrayO = typename _ProcFun<FUN>::SigO; using ArrayO = typename _ProcFun<FUN>::SigO;

View file

@ -25432,9 +25432,7 @@
<node CREATED="1540505481022" ID="ID_1566437478" MODIFIED="1557498707226" TEXT="konkrete Widgets leben im DisplayFrame"/> <node CREATED="1540505481022" ID="ID_1566437478" MODIFIED="1557498707226" TEXT="konkrete Widgets leben im DisplayFrame"/>
<node CREATED="1540506987900" ID="ID_1173067540" MODIFIED="1557498707226"> <node CREATED="1540506987900" ID="ID_1173067540" MODIFIED="1557498707226">
<richcontent TYPE="NODE"><html> <richcontent TYPE="NODE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
sub-Frame wird f&#252;r <i>unsere</i>&#160;Kinder erzeugt sub-Frame wird f&#252;r <i>unsere</i>&#160;Kinder erzeugt
@ -25776,9 +25774,7 @@
<icon BUILTIN="yes"/> <icon BUILTIN="yes"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1563467916708" ID="ID_568904515" MODIFIED="1576282358069" TEXT="kl&#xe4;ren: Kind-Widget managen/entfernen"> <node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1563467916708" ID="ID_568904515" MODIFIED="1576282358069" TEXT="kl&#xe4;ren: Kind-Widget managen/entfernen">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
inwiefern gibt es Beschr&#228;nkungen, wenn man ein Kind-Widget von einem Container entfernt? inwiefern gibt es Beschr&#228;nkungen, wenn man ein Kind-Widget von einem Container entfernt?
@ -26076,9 +26072,7 @@
</node> </node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1576876029833" HGAP="57" ID="ID_893654405" MODIFIED="1576876116458" TEXT="kl&#xe4;ren: brauchen wir verschiedene Offsets per Typ" VSHIFT="3"> <node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1576876029833" HGAP="57" ID="ID_893654405" MODIFIED="1576876116458" TEXT="kl&#xe4;ren: brauchen wir verschiedene Offsets per Typ" VSHIFT="3">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
also einen speziellen Offset f&#252;r Clips und einen anderen speziellen Offset f&#252;r Effekt-Marker? also einen speziellen Offset f&#252;r Clips und einen anderen speziellen Offset f&#252;r Effekt-Marker?
@ -26483,9 +26477,7 @@
<icon BUILTIN="hourglass"/> <icon BUILTIN="hourglass"/>
<node COLOR="#435e98" CREATED="1678406932620" ID="ID_1079071766" MODIFIED="1678407138241" TEXT="Stand 3/23: geplant und angelegt"> <node COLOR="#435e98" CREATED="1678406932620" ID="ID_1079071766" MODIFIED="1678407138241" TEXT="Stand 3/23: geplant und angelegt">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
Der L&#246;sungsansatz ist entschieden... Der L&#246;sungsansatz ist entschieden...
@ -27153,9 +27145,7 @@
</node> </node>
<node CREATED="1677283111823" ID="ID_991289244" MODIFIED="1677283133867"> <node CREATED="1677283111823" ID="ID_991289244" MODIFIED="1677283133867">
<richcontent TYPE="NODE"><html> <richcontent TYPE="NODE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
&#10233; ich kann das <b>Ergebnis nicht exportieren</b> &#10233; ich kann das <b>Ergebnis nicht exportieren</b>
@ -28370,9 +28360,7 @@
<node CREATED="1553911798428" ID="ID_1946109008" MODIFIED="1557498707227" TEXT="es bietet nur teilweise die Aktionen eines Tangible"/> <node CREATED="1553911798428" ID="ID_1946109008" MODIFIED="1557498707227" TEXT="es bietet nur teilweise die Aktionen eines Tangible"/>
<node CREATED="1563466370058" ID="ID_863187721" MODIFIED="1576282358066" TEXT="automatisches Management k&#xf6;nnte schwierig werden"> <node CREATED="1563466370058" ID="ID_863187721" MODIFIED="1576282358066" TEXT="automatisches Management k&#xf6;nnte schwierig werden">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
weil der Ruler ja in die Pr&#228;sentation mit einbezogen ist weil der Ruler ja in die Pr&#228;sentation mit einbezogen ist
@ -30375,9 +30363,7 @@
</node> </node>
<node COLOR="#338800" CREATED="1566487379550" ID="ID_272047983" MODIFIED="1672875229852" TEXT="aber horizontal nur eine Minimal-Weite (100px)"> <node COLOR="#338800" CREATED="1566487379550" ID="ID_272047983" MODIFIED="1672875229852" TEXT="aber horizontal nur eine Minimal-Weite (100px)">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
Eigentlich ben&#246;tigt wird das &#187;Aufspreizen&#171; nur in der vertikalen Dimension, damit sich die umschlie&#223;ende Box sinngem&#228;&#223; anpa&#223;t; im Grunde w&#252;rde es sogar gen&#252;gen, nur das obere (Ruler)-ScrolledWindow zu dimensionieren, aber ich halte es f&#252;r sicherer, vom eigentlichen innen liegenden Canvas aus aufzuspreizen, schon wegen der ggfs. dynamischen Dekoration f&#252;r die Scrollbar. Als Kompromi&#223; setze ich jetzt horizontal eine Mindest-Ausdehnung von 100px (das erscheint ohnehin sinnvoll f&#252;r eine Timeline), aber in vertikaler Richtung setze ich einen size-Request auf die berechnete Canvas-H&#246;he Eigentlich ben&#246;tigt wird das &#187;Aufspreizen&#171; nur in der vertikalen Dimension, damit sich die umschlie&#223;ende Box sinngem&#228;&#223; anpa&#223;t; im Grunde w&#252;rde es sogar gen&#252;gen, nur das obere (Ruler)-ScrolledWindow zu dimensionieren, aber ich halte es f&#252;r sicherer, vom eigentlichen innen liegenden Canvas aus aufzuspreizen, schon wegen der ggfs. dynamischen Dekoration f&#252;r die Scrollbar. Als Kompromi&#223; setze ich jetzt horizontal eine Mindest-Ausdehnung von 100px (das erscheint ohnehin sinnvoll f&#252;r eine Timeline), aber in vertikaler Richtung setze ich einen size-Request auf die berechnete Canvas-H&#246;he
@ -31400,9 +31386,7 @@
<node CREATED="1562845842871" ID="ID_119822604" MODIFIED="1562845853198" TEXT="widget-&gt;get_path()"/> <node CREATED="1562845842871" ID="ID_119822604" MODIFIED="1562845853198" TEXT="widget-&gt;get_path()"/>
<node CREATED="1562854489102" ID="ID_1789577981" MODIFIED="1562854522386" TEXT="der erzeugte WidgetPath ist bereits eine Kopie"> <node CREATED="1562854489102" ID="ID_1789577981" MODIFIED="1562854522386" TEXT="der erzeugte WidgetPath ist bereits eine Kopie">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
es ruft den Konstruktor WidgetPath(gobject, make_copy=true) auf es ruft den Konstruktor WidgetPath(gobject, make_copy=true) auf
@ -33862,9 +33846,7 @@
<icon BUILTIN="broken-line"/> <icon BUILTIN="broken-line"/>
<node CREATED="1582498722221" ID="ID_90390359" MODIFIED="1582498771653" TEXT="naja... hab ihn jetzt als ViewHook ausgebaut"> <node CREATED="1582498722221" ID="ID_90390359" MODIFIED="1582498771653" TEXT="naja... hab ihn jetzt als ViewHook ausgebaut">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
das war ein gr&#246;&#223;eres Refactoring; daf&#252;r f&#228;llt dann die L&#246;sung mit den rekursiv &quot;eingeh&#228;kelten&quot; Lambdas weg. Ist sicherlich besser so... das war ein gr&#246;&#223;eres Refactoring; daf&#252;r f&#228;llt dann die L&#246;sung mit den rekursiv &quot;eingeh&#228;kelten&quot; Lambdas weg. Ist sicherlich besser so...
@ -35218,9 +35200,7 @@
<icon BUILTIN="messagebox_warning"/> <icon BUILTIN="messagebox_warning"/>
<node CREATED="1612471524505" ID="ID_1226213044" MODIFIED="1612471811699" TEXT="Widgets sollen nicht direkt mit dem Layout-Manager reden"> <node CREATED="1612471524505" ID="ID_1226213044" MODIFIED="1612471811699" TEXT="Widgets sollen nicht direkt mit dem Layout-Manager reden">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
Ich will nicht, da&#223; der DisplayManager zu bedeutend wird, weil dann eine direkte Manipulation einzelner Widgets durch den DisplayManager als die &quot;einfachste&quot; und &quot;nat&#252;rlichste&quot; L&#246;sung erscheinen k&#246;nnte. Dagegen wehre ich mich, weil es zu einer starken Kopplung f&#252;hrt. Ich will nicht, da&#223; der DisplayManager zu bedeutend wird, weil dann eine direkte Manipulation einzelner Widgets durch den DisplayManager als die &quot;einfachste&quot; und &quot;nat&#252;rlichste&quot; L&#246;sung erscheinen k&#246;nnte. Dagegen wehre ich mich, weil es zu einer starken Kopplung f&#252;hrt.
@ -36098,9 +36078,7 @@
<node CREATED="1532797071961" ID="ID_965723020" MODIFIED="1532797076020" TEXT="hat init-Funktionen"/> <node CREATED="1532797071961" ID="ID_965723020" MODIFIED="1532797076020" TEXT="hat init-Funktionen"/>
<node CREATED="1532797076656" ID="ID_1083316138" MODIFIED="1576282358032"> <node CREATED="1532797076656" ID="ID_1083316138" MODIFIED="1576282358032">
<richcontent TYPE="NODE"><html> <richcontent TYPE="NODE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
betrifft aber <b>nur Framework</b>-Funktionalit&#228;t betrifft aber <b>nur Framework</b>-Funktionalit&#228;t
@ -36187,9 +36165,7 @@
</node> </node>
<node CREATED="1533252898732" ID="ID_28088492" MODIFIED="1576282358030" TEXT="Gio::Application::signal_activate()"> <node CREATED="1533252898732" ID="ID_28088492" MODIFIED="1576282358030" TEXT="Gio::Application::signal_activate()">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
The signal_activate() signal is emitted on the primary instance The signal_activate() signal is emitted on the primary instance
@ -36597,9 +36573,7 @@
</node> </node>
<node CREATED="1533311655519" ID="ID_946023766" MODIFIED="1561827465319"> <node CREATED="1533311655519" ID="ID_946023766" MODIFIED="1561827465319">
<richcontent TYPE="NODE"><html> <richcontent TYPE="NODE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
aber <i>wir</i>&#160;brauchen ein <b>laufendes</b>&#160;UI aber <i>wir</i>&#160;brauchen ein <b>laufendes</b>&#160;UI
@ -37064,9 +37038,7 @@
<node CREATED="1614391615637" FOLDED="true" ID="ID_1108644497" MODIFIED="1614391627843" TEXT="zur Event-Quelle wird eine Closure gebildet"> <node CREATED="1614391615637" FOLDED="true" ID="ID_1108644497" MODIFIED="1614391627843" TEXT="zur Event-Quelle wird eine Closure gebildet">
<node CREATED="1614391628734" ID="ID_1671010257" MODIFIED="1614391663130" TEXT="und zwar f&#xfc;r den konkreten Typ der Interaktion"> <node CREATED="1614391628734" ID="ID_1671010257" MODIFIED="1614391663130" TEXT="und zwar f&#xfc;r den konkreten Typ der Interaktion">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
also nicht generisch, sondern die spezifische Closure f&#252;r z.B. den Fall drag-Clip also nicht generisch, sondern die spezifische Closure f&#252;r z.B. den Fall drag-Clip
@ -91737,7 +91709,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<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"> <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;"/> <arrowlink COLOR="#2e2c57" DESTINATION="ID_1045815708" ENDARROW="Default" ENDINCLINATION="-98;-400;" ID="Arrow_ID_639104343" STARTARROW="None" STARTINCLINATION="-367;14;"/>
</node> </node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734299273886" ID="ID_1992832073" MODIFIED="1734299285393" TEXT="intern mehrstufig aufbauen"> <node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734299273886" ID="ID_1992832073" MODIFIED="1734550631972" TEXT="intern mehrstufig aufgebaut">
<icon BUILTIN="pencil"/> <icon BUILTIN="pencil"/>
<node CREATED="1734299304455" ID="ID_286097173" MODIFIED="1734299376662" TEXT="Trait zur Fallunterscheidung"> <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;"/> <arrowlink COLOR="#8e8fa7" DESTINATION="ID_978315882" ENDARROW="Default" ENDINCLINATION="52;169;" ID="Arrow_ID_793891080" STARTARROW="None" STARTINCLINATION="-331;-17;"/>
@ -91830,7 +91802,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node> </node>
</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 BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734483863501" ID="ID_1884890390" MODIFIED="1734484068908" TEXT="sollte nochmal restukturieren...."> <node COLOR="#435e98" CREATED="1734483863501" ID="ID_1884890390" MODIFIED="1734550617570" TEXT="sollte nochmal restukturieren....">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head/> <head/>
<body> <body>
@ -91844,6 +91816,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node COLOR="#236883" CREATED="1734496443007" ID="ID_1580496045" LINK="#ID_1734731182" MODIFIED="1734496487271" TEXT="generisches Verarbeitungs-Schema: ElmTypes&lt;TUP&gt;"> <node COLOR="#236883" CREATED="1734496443007" ID="ID_1580496045" LINK="#ID_1734731182" MODIFIED="1734496487271" TEXT="generisches Verarbeitungs-Schema: ElmTypes&lt;TUP&gt;">
<icon BUILTIN="idea"/> <icon BUILTIN="idea"/>
</node> </node>
<node CREATED="1734550423852" ID="ID_1069917132" MODIFIED="1734550448603" TEXT="nur noch die Use-Case-Unterscheidung per Traits-Spezialisierung"/>
<node CREATED="1734550451183" ID="ID_1408787596" MODIFIED="1734550469001" TEXT="sonstige Logik direkt auf Parameter-Eigenschafuten aufgebaut"/>
</node> </node>
</node> </node>
</node> </node>
@ -91882,7 +91856,29 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node> </node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1734458906909" ID="ID_53372671" MODIFIED="1734458916675" TEXT="sp&#xe4;ter nochmal beurteilen"> <node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1734458906909" ID="ID_53372671" MODIFIED="1734458916675" TEXT="sp&#xe4;ter nochmal beurteilen">
<icon BUILTIN="hourglass"/> <icon BUILTIN="hourglass"/>
<node CREATED="1734550474791" ID="ID_384640118" MODIFIED="1734550506623" TEXT="vor allem: Downstream-Code mu&#xdf; damit richtig umgehen....">
<icon BUILTIN="messagebox_warning"/>
</node> </node>
<node CREATED="1734547014206" ID="ID_1825901061" MODIFIED="1734547216709" TEXT="m&#xf6;glich unter einer Bedingung: Signatur mu&#xdf; reproduziert werden">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
<u>Erl&#228;uterung</u>: egal wie die interne Logik abl&#228;uft, am Ende mu&#223; sie f&#252;r jeden Slot <i>den Typ (kompatibel) ausweisen,</i>&#160;der initial f&#252;r diese Stelle in der Signatur angegeben wurde
</p>
</body>
</html>
</richcontent>
<linktarget COLOR="#daf6fe" DESTINATION="ID_1825901061" ENDARROW="Default" ENDINCLINATION="-1280;54;" ID="Arrow_ID_1390781333" SOURCE="ID_573532514" STARTARROW="None" STARTINCLINATION="-446;-20;"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1734550521638" ID="ID_1993063494" MODIFIED="1734550551857" TEXT="Leer &#x27f9; kann kein Buffer-Argument sein">
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/>
</node>
<node COLOR="#435e98" CREATED="1734550580870" ID="ID_896575935" MODIFIED="1734550605107" TEXT="Buffer &#x27fa; nur Pointer-Komponenten">
<icon BUILTIN="info"/>
</node> </node>
</node> </node>
</node> </node>
@ -91893,6 +91889,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1734299647835" ID="ID_300211802" MODIFIED="1734299682940" TEXT="versuche es direkt &#xfc;ber die structured-bindings"> <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;"/> <arrowlink COLOR="#685a75" DESTINATION="ID_822733161" ENDARROW="Default" ENDINCLINATION="15;31;" ID="Arrow_ID_1498083496" STARTARROW="None" STARTINCLINATION="83;5;"/>
</node> </node>
<node CREATED="1734550645710" ID="ID_638858764" LINK="#ID_1086476352" MODIFIED="1734550671322" TEXT="Einzel-Argumente: in Tupel &#xbb;heben&#xab;"/>
</node> </node>
</node> </node>
</node> </node>
@ -92210,11 +92207,11 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node> </node>
</node> </node>
</node> </node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1734398371276" ID="ID_1513818427" MODIFIED="1734474043348" TEXT="brauche forEach(IndexTuple)"> <node COLOR="#435e98" CREATED="1734398371276" FOLDED="true" ID="ID_1513818427" MODIFIED="1734546135094" TEXT="brauche forEach(IndexTuple)">
<linktarget COLOR="#4ab2e5" DESTINATION="ID_1513818427" ENDARROW="Default" ENDINCLINATION="-120;11;" ID="Arrow_ID_668892948" SOURCE="ID_81517996" STARTARROW="None" STARTINCLINATION="-103;-9;"/> <linktarget COLOR="#4ab2e5" DESTINATION="ID_1513818427" ENDARROW="Default" ENDINCLINATION="-120;11;" ID="Arrow_ID_668892948" SOURCE="ID_81517996" STARTARROW="None" STARTINCLINATION="-103;-9;"/>
<icon BUILTIN="yes"/> <icon BUILTIN="yes"/>
<node CREATED="1734399341087" ID="ID_763559603" MODIFIED="1734399361894" TEXT="sollte aber auch f&#xfc;r frei stehenden Einzeltyp funktionieren"/> <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"> <node COLOR="#5b280f" CREATED="1734399363642" FOLDED="true" ID="ID_535610409" MODIFIED="1734546119828" TEXT="Verwende das gute alte InstantiateWithIndex aus generator.hpp">
<icon BUILTIN="button_cancel"/> <icon BUILTIN="button_cancel"/>
<node CREATED="1734399387338" ID="ID_683945175" MODIFIED="1734399397194" TEXT="ja ... die guten alten Loki-Listen"/> <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 CREATED="1734399405485" ID="ID_676422515" MODIFIED="1734399426829" TEXT="brauche dazu dann nur die Typ-Sequenz f&#xfc;r einen structuredType"/>
@ -92222,9 +92219,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="smily_bad"/> <icon BUILTIN="smily_bad"/>
</node> </node>
</node> </node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734399930258" ID="ID_552320825" MODIFIED="1734471981106" TEXT="oder doch nur einen Index-Generator &#x27f6; &#x3bb;"> <node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1734399930258" ID="ID_552320825" MODIFIED="1734546125548" TEXT="oder doch nur einen Index-Generator &#x27f6; &#x3bb;">
<icon BUILTIN="yes"/> <icon BUILTIN="idea"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#3d1981" CREATED="1734471983248" ID="ID_180764617" MODIFIED="1734475355476" TEXT="geht das &#xfc;berhaupt mit einem Lambda?"> <node BACKGROUND_COLOR="#e0ceaa" COLOR="#3d1981" CREATED="1734471983248" FOLDED="true" ID="ID_180764617" MODIFIED="1734475355476" TEXT="geht das &#xfc;berhaupt mit einem Lambda?">
<font NAME="SansSerif" SIZE="12"/> <font NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="help"/> <icon BUILTIN="help"/>
<node COLOR="#5b280f" CREATED="1734472004853" ID="ID_1548338453" MODIFIED="1734472034734" TEXT="im Body wird der Index als constexpr gebraucht"> <node COLOR="#5b280f" CREATED="1734472004853" ID="ID_1548338453" MODIFIED="1734472034734" TEXT="im Body wird der Index als constexpr gebraucht">
@ -92378,17 +92375,17 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node> </node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734480964996" ID="ID_806319334" MODIFIED="1734480977083" TEXT="schrittweise auf komplexere Signaturen erweitern"> <node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734480964996" ID="ID_806319334" MODIFIED="1734480977083" TEXT="schrittweise auf komplexere Signaturen erweitern">
<icon BUILTIN="pencil"/> <icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734483925269" ID="ID_1086476352" MODIFIED="1734484068908" TEXT="m&#xf6;glichst Fallunterscheidungen durch &#xbb;Heben&#xab; vermeiden"> <node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734483925269" ID="ID_1086476352" MODIFIED="1734546060607" TEXT="m&#xf6;glichst Fallunterscheidungen durch &#xbb;Heben&#xab; vermeiden">
<arrowlink COLOR="#c8022e" DESTINATION="ID_1884890390" ENDARROW="Default" ENDINCLINATION="-1263;97;" ID="Arrow_ID_232119446" STARTARROW="None" STARTINCLINATION="-517;-18;"/> <arrowlink COLOR="#c8022e" DESTINATION="ID_1884890390" ENDARROW="Default" ENDINCLINATION="-1263;97;" ID="Arrow_ID_232119446" STARTARROW="None" STARTINCLINATION="-517;-18;"/>
<icon BUILTIN="flag-yellow"/> <icon BUILTIN="pencil"/>
<node CREATED="1734483987277" ID="ID_1841429759" MODIFIED="1734483994879" TEXT="wir haben zu viele Einzelf&#xe4;lle"/> <node CREATED="1734483987277" ID="ID_1841429759" MODIFIED="1734483994879" TEXT="wir haben zu viele Einzelf&#xe4;lle"/>
<node CREATED="1734483996540" ID="ID_249201624" MODIFIED="1734484013365" TEXT="es besteht die Gefahr, Typ-Struktur und Nutzen zu vermischen"/> <node CREATED="1734483996540" ID="ID_249201624" MODIFIED="1734484013365" TEXT="es besteht die Gefahr, Typ-Struktur und Nutzen zu vermischen"/>
<node CREATED="1734484014897" ID="ID_1533580969" MODIFIED="1734484112886" TEXT="Idee: alles per Iteration &#xfc;ber StructType&lt;T&gt;"> <node CREATED="1734484014897" ID="ID_1533580969" MODIFIED="1734484112886" TEXT="Idee: alles per Iteration &#xfc;ber StructType&lt;T&gt;">
<arrowlink COLOR="#5583b2" DESTINATION="ID_1710377001" ENDARROW="Default" ENDINCLINATION="113;86;" ID="Arrow_ID_1043919586" STARTARROW="None" STARTINCLINATION="103;6;"/> <arrowlink COLOR="#5583b2" DESTINATION="ID_1710377001" ENDARROW="Default" ENDINCLINATION="113;86;" ID="Arrow_ID_1043919586" STARTARROW="None" STARTINCLINATION="103;6;"/>
<icon BUILTIN="idea"/> <icon BUILTIN="idea"/>
</node> </node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734484966366" ID="ID_1734731182" MODIFIED="1734496372644" TEXT="Hilfsmittel zur Iteration &#xfc;ber Element-Typen"> <node COLOR="#338800" CREATED="1734484966366" ID="ID_1734731182" MODIFIED="1734546051435" TEXT="Hilfsmittel zur Iteration &#xfc;ber Element-Typen">
<icon BUILTIN="pencil"/> <icon BUILTIN="button_ok"/>
<node CREATED="1734484982190" ID="ID_1667690583" MODIFIED="1734485007124"> <node CREATED="1734484982190" ID="ID_1667690583" MODIFIED="1734485007124">
<richcontent TYPE="NODE"><html> <richcontent TYPE="NODE"><html>
<head/> <head/>
@ -92442,11 +92439,24 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node> </node>
</node> </node>
</node> </node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1734496383891" ID="ID_352066932" MODIFIED="1734496422850" TEXT="damit sollte hoffentlich das _ProcFun-Traits-Template wesentlich einfacher werden...."> <node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1734496383891" ID="ID_352066932" MODIFIED="1734546010832" TEXT="damit wird das _ProcFun-Traits-Template wesentlich einfacher....">
<icon BUILTIN="idea"/> <icon BUILTIN="idea"/>
<node COLOR="#338800" CREATED="1734537123396" ID="ID_1099344573" MODIFIED="1734537142599" TEXT="Fehlsteuerung in der Use-Case-Erkennung jetzt einfach zu beheben"> <node COLOR="#338800" CREATED="1734537123396" ID="ID_1099344573" MODIFIED="1734537142599" TEXT="Fehlsteuerung in der Use-Case-Erkennung jetzt einfach zu beheben">
<icon BUILTIN="button_ok"/> <icon BUILTIN="button_ok"/>
</node> </node>
<node COLOR="#338800" CREATED="1734545909195" ID="ID_655855847" MODIFIED="1734545946761" TEXT="Die spezielle Trait-Kaskade _Arg f&#xfc;r jedes Argument kann komplett wegfallen">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1734545948613" ID="ID_1474061827" MODIFIED="1734545969908" TEXT="die speziellen Metafunktionen is_StructBuffs k&#xf6;nnen wegfallen">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1734545972826" ID="ID_1185734846" MODIFIED="1734545994101" TEXT="mehrere dedizierte Iterations-Templates werden &#xfc;berfl&#xfc;ssig">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1734550331943" ID="ID_1935947799" MODIFIED="1734550400425" TEXT="kann auch leere &#xbb;slots&#xbb; akzeptieren">
<arrowlink COLOR="#83b5ac" DESTINATION="ID_573532514" ENDARROW="Default" ENDINCLINATION="178;-18;" ID="Arrow_ID_109400658" STARTARROW="None" STARTINCLINATION="-110;8;"/>
<icon BUILTIN="button_ok"/>
</node>
</node> </node>
</node> </node>
<node COLOR="#338800" CREATED="1734535852731" ID="ID_745699305" MODIFIED="1734537109150" TEXT="Test: Einzel-Buffer IN &#x27f6; OUT"> <node COLOR="#338800" CREATED="1734535852731" ID="ID_745699305" MODIFIED="1734537109150" TEXT="Test: Einzel-Buffer IN &#x27f6; OUT">
@ -92457,6 +92467,52 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="broken-line"/> <icon BUILTIN="broken-line"/>
</node> </node>
</node> </node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1734546191477" ID="ID_700906161" MODIFIED="1734546209411" TEXT="Leere Signatur-Slots">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1734546212121" ID="ID_847430872" MODIFIED="1734546226854" TEXT="z.B. im bestehenden NodeLinkage_test">
<node CREATED="1734546252740" ID="ID_368698478" MODIFIED="1734546283608">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
void dummyOp (<font color="#d80f0f"><b>NoArg</b></font>&#160;in, <b>SoloArg</b>&#160;out)
</p>
</body>
</html>
</richcontent>
<font NAME="SansSerif" SIZE="11"/>
</node>
<node CREATED="1734546333505" ID="ID_1369045625" MODIFIED="1734546509505" TEXT="der erste Slot kann nicht klassifiziert werden">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
rein logisch l&#228;&#223;t sich das nicht l&#246;sen &#8212; die Entscheidung beruht dann auf einer willk&#252;rlichen Konvention; im Moment habe ich fesgelegt: &#187;das k&#246;nnen keine Buffer sein&#171;
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1734546349095" ID="ID_1864083410" MODIFIED="1734546372125" TEXT="per Default wird er ein Param-Slot"/>
</node>
<node CREATED="1734546907140" ID="ID_1830073767" MODIFIED="1734546915372" TEXT="sinnvolle Logik">
<node CREATED="1734546807275" ID="ID_590391415" MODIFIED="1734546967843" TEXT="im Zweifelsfall &#x27f6; Parameter (defensiver Ansatz)">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
denn f&#252;r einen Parameter-Slot mu&#223; weniger getan werden; im Zweifelsfall mu&#223; er nur default-konstruiert werden &#8212; und es wird dann halt auch kein Param-Funktor dazu aufgerufen
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1734546970587" ID="ID_573532514" MODIFIED="1734550387114" TEXT="aber wichtig ist: f&#xfc;r den Aufruf mu&#xdf; jeder Slot &#xbb;seinen&#xab; Typ wieder bekommen">
<arrowlink COLOR="#daf6fe" DESTINATION="ID_1825901061" ENDARROW="Default" ENDINCLINATION="-1280;54;" ID="Arrow_ID_1390781333" STARTARROW="None" STARTINCLINATION="-446;-20;"/>
<linktarget COLOR="#83b5ac" DESTINATION="ID_573532514" ENDARROW="Default" ENDINCLINATION="178;-18;" ID="Arrow_ID_109400658" SOURCE="ID_1935947799" STARTARROW="None" STARTINCLINATION="-110;8;"/>
<icon BUILTIN="yes"/>
</node>
</node>
</node>
</node> </node>
</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"> <node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734133400400" ID="ID_1364724277" MODIFIED="1734141875620" TEXT="zus&#xe4;tzlichen Funktor f&#xfc;r die Parameter akzeptieren">