Invocation: expand capabilities in existing code
This is an attempt to rework gradually while keeping the existing code valid. For the simple reason that the existing code is quite elaborate and difficult to re-orient. Thus using a ''second branch,'' and sharing the traits template while expanding its capabilities
This commit is contained in:
parent
1f265044e5
commit
a477c5953b
5 changed files with 281 additions and 71 deletions
|
|
@ -216,6 +216,9 @@ namespace meta{
|
|||
template<typename FUN>
|
||||
using is_BinaryFun = has_Arity<FUN,2>;
|
||||
|
||||
template<typename FUN>
|
||||
using is_TernaryFun = has_Arity<FUN,3>;
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -75,6 +75,7 @@
|
|||
#include "steam/engine/buffhandle.hpp"
|
||||
#include "lib/uninitialised-storage.hpp"
|
||||
#include "lib/meta/function.hpp"
|
||||
#include "lib/meta/typeseq-util.hpp"
|
||||
//#include "lib/several.hpp"
|
||||
|
||||
//#include <utility>
|
||||
|
|
@ -92,8 +93,42 @@ namespace engine {
|
|||
namespace {// Introspection helpers....
|
||||
|
||||
using lib::meta::_Fun;
|
||||
using lib::meta::is_UnaryFun;
|
||||
using lib::meta::is_BinaryFun;
|
||||
using lib::meta::is_TernaryFun;
|
||||
using std::remove_reference_t;
|
||||
using lib::meta::enable_if;
|
||||
using std::void_t;
|
||||
using std::__and_;
|
||||
using std::__not_;
|
||||
|
||||
template<class X, typename SEL=void>
|
||||
struct is_Structured
|
||||
: std::false_type
|
||||
{ };
|
||||
template<class TUP>
|
||||
struct is_Structured<TUP, void_t<std::tuple_size<TUP>>>
|
||||
: std::true_type
|
||||
{ };
|
||||
|
||||
template<typename V>
|
||||
struct is_Value
|
||||
: __and_<__not_<std::is_pointer<V>>
|
||||
,__not_<std::is_reference<V>>
|
||||
,__not_<is_Structured<V>>
|
||||
,std::is_default_constructible<V>
|
||||
,std::is_copy_assignable<V>
|
||||
>
|
||||
{ };
|
||||
|
||||
template<typename B>
|
||||
struct is_Buffer
|
||||
: __and_<__not_<std::is_pointer<B>>
|
||||
,__not_<std::is_reference<B>>
|
||||
,std::is_default_constructible<B>
|
||||
,__not_<_Fun<B>>
|
||||
>
|
||||
{ };
|
||||
|
||||
/** Helper to pick up the parameter dimensions from the processing function
|
||||
* @remark this is the rather simple yet common case that media processing
|
||||
|
|
@ -107,32 +142,78 @@ namespace engine {
|
|||
struct _ProcFun
|
||||
{
|
||||
static_assert(_Fun<FUN>() , "something funktion-like required");
|
||||
static_assert(is_BinaryFun<FUN>() , "function with two arguments expected");
|
||||
static_assert(0 < _Fun<FUN>::ARITY , "function with at least one argument expected");
|
||||
static_assert(3 >= _Fun<FUN>::ARITY , "function with up to three arguments accepted");
|
||||
|
||||
using Sig = typename _Fun<FUN>::Sig;
|
||||
|
||||
template<class ARG>
|
||||
struct MatchBuffArray
|
||||
template<class SIG, size_t i>
|
||||
using _Arg = typename lib::meta::Pick<typename _Fun<SIG>::Args, i>::Type;
|
||||
|
||||
|
||||
template<class ARG, typename SEL =void>
|
||||
struct _ArgTrait
|
||||
{
|
||||
static_assert(not sizeof(ARG), "processing function expected to take array-of-buffer-pointers");
|
||||
static_assert(not sizeof(ARG), "processing function expected to take parameters, "
|
||||
"buffer-poiinters or tuples or arrays of these");
|
||||
};
|
||||
template<class PAR>
|
||||
struct _ArgTrait<PAR, enable_if<is_Value<PAR>>>
|
||||
{
|
||||
using Buff = PAR; ////////////////////////////////OOO not correct, remove this!
|
||||
enum{ SIZ = 1 };
|
||||
};
|
||||
template<class BUF>
|
||||
struct _ArgTrait<BUF*, enable_if<is_Buffer<BUF>>>
|
||||
{
|
||||
using Buff = BUF;
|
||||
enum{ SIZ = 1 };
|
||||
};
|
||||
template<class BUF, size_t N>
|
||||
struct MatchBuffArray<std::array<BUF*,N>>
|
||||
struct _ArgTrait<std::array<BUF*,N>>
|
||||
{
|
||||
using Buff = BUF;
|
||||
enum{ SIZ = N };
|
||||
};
|
||||
|
||||
using SigI = remove_reference_t<typename _Fun<FUN>::Args::List::Head>;
|
||||
using SigO = remove_reference_t<typename _Fun<FUN>::Args::List::Tail::Head>;
|
||||
|
||||
using BuffI = typename MatchBuffArray<SigI>::Buff;
|
||||
using BuffO = typename MatchBuffArray<SigO>::Buff;
|
||||
template<class SIG, typename SEL =void>
|
||||
struct _Case
|
||||
{
|
||||
static_assert(not sizeof(SIG), "use case could not be determined from function stignature");
|
||||
};
|
||||
template<class SIG>
|
||||
struct _Case<SIG, enable_if<is_UnaryFun<SIG>>>
|
||||
{
|
||||
enum{ SLOT_O = 0
|
||||
, SLOT_I = 0
|
||||
};
|
||||
};
|
||||
template<class SIG>
|
||||
struct _Case<SIG, enable_if<is_BinaryFun<SIG>>>
|
||||
{
|
||||
enum{ SLOT_O = 1
|
||||
, SLOT_I = is_Value<_Arg<SIG,0>>()? 1 : 0
|
||||
};
|
||||
};
|
||||
template<class SIG>
|
||||
struct _Case<SIG, enable_if<is_TernaryFun<SIG>>>
|
||||
{
|
||||
enum{ SLOT_O = 2
|
||||
, SLOT_I = 1
|
||||
};
|
||||
};
|
||||
|
||||
enum{ FAN_I = MatchBuffArray<SigI>::SIZ
|
||||
, FAN_O = MatchBuffArray<SigO>::SIZ
|
||||
, SLOT_I = 0
|
||||
, SLOT_O = 1
|
||||
using SigI = _Arg<FUN,_Case<Sig>::SLOT_I>;
|
||||
using SigO = _Arg<FUN,_Case<Sig>::SLOT_O>;
|
||||
|
||||
using BuffI = typename _ArgTrait<SigI>::Buff;
|
||||
using BuffO = typename _ArgTrait<SigO>::Buff;
|
||||
|
||||
enum{ FAN_I = _ArgTrait<SigI>::SIZ
|
||||
, FAN_O = _ArgTrait<SigO>::SIZ
|
||||
, SLOT_I = _Case<Sig>::SLOT_I
|
||||
, SLOT_O = _Case<Sig>::SLOT_O
|
||||
, MAXSZ = std::max (uint(FAN_I), uint(FAN_O)) /////////////////////OOO required temporarily until the switch to tuples
|
||||
};
|
||||
|
||||
|
|
@ -161,8 +242,8 @@ namespace engine {
|
|||
* @todo WIP-WIP-WIP 7/24 now reworking the old design in the light of actual render engine requirements...
|
||||
*/
|
||||
template<class FUN>
|
||||
struct FeedManifold
|
||||
: FeedManifold_StorageSetup<FUN>
|
||||
struct FoldManifeed
|
||||
: util::NonCopyable
|
||||
{
|
||||
enum{ STORAGE_SIZ = _ProcFun<FUN>::MAXSZ };
|
||||
using BuffS = lib::UninitialisedStorage<BuffHandle,STORAGE_SIZ>;
|
||||
|
|
@ -171,6 +252,16 @@ namespace engine {
|
|||
BuffS outBuff;
|
||||
};
|
||||
|
||||
template<class FUN>
|
||||
struct FeedManifold
|
||||
: FeedManifold_StorageSetup<FUN>
|
||||
{
|
||||
using _Trait = _ProcFun<FUN>;
|
||||
|
||||
static constexpr bool hasInput() { return _Trait::hasInput(); }
|
||||
static constexpr bool hasParam() { return _Trait::hasParam(); }
|
||||
};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -145,7 +145,7 @@ namespace engine {
|
|||
: util::MoveOnly
|
||||
{
|
||||
enum{ MAX_SIZ = _ProcFun<FUN>::MAXSZ };
|
||||
using Manifold = FeedManifold<FUN>;
|
||||
using Manifold = FoldManifeed<FUN>; ////////////////////////////////////////////////////OOO temporary fork between old-style and new-style implementation
|
||||
using Feed = SimpleFunctionInvocationAdapter<Manifold, FUN>;
|
||||
|
||||
std::function<Feed()> buildFeed;
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@
|
|||
#include "steam/engine/proc-node.hpp"
|
||||
#include "steam/engine/turnout.hpp"
|
||||
#include "steam/engine/turnout-system.hpp"
|
||||
#include "steam/engine/feed-manifold.hpp"
|
||||
//#include "lib/format-cout.hpp"
|
||||
//#include "lib/util.hpp"
|
||||
|
||||
|
|
@ -50,6 +51,7 @@ namespace test {
|
|||
{
|
||||
seedRand();
|
||||
verify_TurnoutSystem();
|
||||
verify_FeedManifold();
|
||||
UNIMPLEMENTED ("build a simple render node and then activate it");
|
||||
}
|
||||
|
||||
|
|
@ -61,6 +63,24 @@ namespace test {
|
|||
Time nomTime{rani(10'000),0}; // drive test with a random »nominal Time« <10s with ms granularity
|
||||
TurnoutSystem invoker{nomTime}; // a time spec is mandatory, all further parameters are optional
|
||||
}
|
||||
|
||||
|
||||
/** @test the FeedManifold as adapter between Engine and processing library
|
||||
*/
|
||||
void
|
||||
verify_FeedManifold()
|
||||
{
|
||||
// some random numbers to test...
|
||||
long r1 = rani(100);
|
||||
|
||||
// Type setup to build a suitable FeedManifold
|
||||
using Buffer = long;
|
||||
|
||||
auto fun_singleOut = [&](Buffer* buff) { *buff = r1; };
|
||||
using M1 = FeedManifold<decltype(fun_singleOut)>;
|
||||
CHECK (not M1::hasInput());
|
||||
CHECK (not M1::hasParam());
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -23820,9 +23820,7 @@
|
|||
</node>
|
||||
<node CREATED="1565272282454" ID="ID_1908255689" MODIFIED="1565272311351">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Grundlagen müssen <i>vor</i> GTK's Behandlung erfolgen
|
||||
|
|
@ -24335,9 +24333,7 @@
|
|||
</node>
|
||||
<node CREATED="1583103616819" ID="ID_635184052" MODIFIED="1583103674376">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
<b>Nein</b>: keine Abhängigkeiten,
|
||||
|
|
@ -24872,9 +24868,7 @@
|
|||
</node>
|
||||
<node CREATED="1611915849754" ID="ID_409163867" MODIFIED="1611915977254" TEXT="Daten müssen auf dem Pfad der Kontrollstruktur greifbar sein">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
die Kontrollstruktur ist bereits gefährlich komplex; spezielle "Schleifen" durch die Innereien eigentlich nicht involvierter Entitäten allein aus Performance-Gründen sollten vermieden werden
|
||||
|
|
@ -25679,9 +25673,7 @@
|
|||
</node>
|
||||
<node CREATED="1575652931295" ID="ID_1649360599" MODIFIED="1576282358071" TEXT="aber ein voller double-dispatch-Mechanismus ist nicht durchführbar">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
denn er erzwingt entweder....
|
||||
|
|
@ -26948,9 +26940,7 @@
|
|||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1677205333819" ID="ID_1685591638" MODIFIED="1677283853536" TEXT="mühsam ... Inkscape ist nicht das richtige Tool">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
ich kann zwar einrasten, aber ich kann weder um einen definierten Punkt drehen, noch kann ich Schnittpunkte ermitteln
|
||||
|
|
@ -28548,9 +28538,7 @@
|
|||
<node CREATED="1555082433635" ID="ID_1213306272" MODIFIED="1557498707227" TEXT="Time-Ruler "allways on top""/>
|
||||
<node CREATED="1555082442705" ID="ID_497245117" MODIFIED="1576282358065">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Unterscheidung <b>verschoben</b> in die Darstellung
|
||||
|
|
@ -29562,9 +29550,7 @@
|
|||
</node>
|
||||
<node CREATED="1560612691723" ID="ID_1955365339" MODIFIED="1576282358059" TEXT="das Prelude-Verb als Solches ist sinnvoll">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
weil man damit eine generische Klammer bauen kann
|
||||
|
|
@ -32422,9 +32408,7 @@
|
|||
<node CREATED="1563736680910" ID="ID_1193299161" MODIFIED="1563736686803" TEXT="bekommt einen Cairo-Context"/>
|
||||
<node CREATED="1563736687680" ID="ID_476120936" MODIFIED="1563736720837" TEXT="setzt zusätzlich eine genau passende size-Allocation vorraus">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Kommentar sagt: it is your responsibility that these two coordinates match
|
||||
|
|
@ -33870,9 +33854,7 @@
|
|||
</node>
|
||||
<node CREATED="1567689845067" ID="ID_1441909594" MODIFIED="1576282358039" TEXT="ich betrachte das Problem als eigentlich irrelevant">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
man soll ohnehin keinen so großen box-shadow verwenden
|
||||
|
|
@ -35809,9 +35791,7 @@
|
|||
</node>
|
||||
<node CREATED="1477617185582" ID="ID_634277803" MODIFIED="1576282358034" TEXT="PanelManager::createPanels()">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
....erzeugt wird das hier:
|
||||
|
|
@ -37216,9 +37196,7 @@
|
|||
<node CREATED="1614391691166" ID="ID_367156594" MODIFIED="1614391711156" TEXT="d.h. zur Event-Quelle gibt es ein generisches Element wie z.B. GTK-Widget"/>
|
||||
<node CREATED="1614391738263" ID="ID_1536053997" MODIFIED="1614391793230" TEXT="hier entsteht also eine Verquickung mit dem konkreten Framework">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
naja... sie besteht schon von Anfang an, insofern das Event-Konzept, wie auch die konkrete Quelle, ohnehin an das UI-Framework gebunden sind
|
||||
|
|
@ -37697,9 +37675,7 @@
|
|||
<node CREATED="1616771909543" ID="ID_704625942" MODIFIED="1616771922497" TEXT="und zwar genau dann, wenn ein neues Widget geschaffen wurde"/>
|
||||
<node CREATED="1616772271009" ID="ID_1822723171" MODIFIED="1616772366205" TEXT="Problem: es ist nicht (einfach) möglich, eine bestehende Gesten-Konfiguration zu erkennen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...denn ich will ja grade unnötige Storage-Slots für Rückpointer und sonstige Flags vermeiden; daher besteht eine Gesten-Konfiguration nur darin, irgendwo ganz versteckt ein Signal auf das Widget verdrahtet zu haben...
|
||||
|
|
@ -38509,9 +38485,7 @@
|
|||
<node CREATED="1619799349705" ID="ID_281542411" MODIFIED="1619799359972" TEXT="in diesem Fall dann nur noch eine Indirektion"/>
|
||||
<node CREATED="1619799367600" ID="ID_1388699771" MODIFIED="1619799442130">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
im Gegensatz zum CanvasHook ist <i>das hier durchaus relevant</i>
|
||||
|
|
@ -38787,9 +38761,7 @@
|
|||
<node CREATED="1619967375039" ID="ID_1955578195" MODIFIED="1619967379379" TEXT="...aus dem Gesten-Controller herauszuhalten"/>
|
||||
<node CREATED="1619967252543" ID="ID_630081269" MODIFIED="1619967547078" TEXT="ich sehe keinen anderen Weg....">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...sonst würde entweder das Subject selber ad hoc etwas bereitstellen müssen und dafür zusätzliche Storage brauchen (<b>Hebel</b>, es gibt sehr viele Subjekte!), oder das Interface "Subject" würde löchrig und zu einer Kodifizierung von Einzelfällen. Die Lösung mit dem Adapter stattdessen fällt unter das Prinzip <i>Inversion of Control</i>
|
||||
|
|
@ -91304,8 +91276,10 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
<node CREATED="1734188779125" ID="ID_978315882" MODIFIED="1734188785169" TEXT="Fallunterscheidung">
|
||||
<linktarget COLOR="#8e8fa7" DESTINATION="ID_978315882" ENDARROW="Default" ENDINCLINATION="52;169;" ID="Arrow_ID_793891080" SOURCE="ID_286097173" STARTARROW="None" STARTINCLINATION="-331;-17;"/>
|
||||
<icon BUILTIN="info"/>
|
||||
<node CREATED="1734188787125" ID="ID_1834748970" MODIFIED="1734188798681" TEXT="anhand der Arität">
|
||||
<node CREATED="1734188806962" ID="ID_390772438" MODIFIED="1734188832010" TEXT="tertiär: Zuordnung ist eindeutig">
|
||||
<node CREATED="1734188806962" ID="ID_390772438" MODIFIED="1734295019014" TEXT="ternär: Zuordnung ist eindeutig">
|
||||
<node CREATED="1734189402282" ID="ID_1540995607" MODIFIED="1734189410440" TEXT="1:param"/>
|
||||
<node CREATED="1734189411779" ID="ID_496340085" MODIFIED="1734189416340" TEXT="2:input"/>
|
||||
<node CREATED="1734189418040" ID="ID_66062728" MODIFIED="1734189421913" TEXT="3:output"/>
|
||||
|
|
@ -91379,9 +91353,10 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734197949703" ID="ID_614756914" MODIFIED="1734197958950" TEXT="in zwei Schritten umstellen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734197960677" ID="ID_928664533" MODIFIED="1734198014600" TEXT="Schritt-1 : neues Interface">
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734197949703" ID="ID_614756914" MODIFIED="1734299449717" TEXT="in zwei Schritten umstellen">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1734197960677" ID="ID_928664533" MODIFIED="1734299248635" TEXT="Schritt-1 : neues Interface">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1734198655392" ID="ID_1607922853" MODIFIED="1734213039477" TEXT="kann ArgI|O sofort umbenennen ⟼ SigI|O">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
|
|
@ -91420,8 +91395,117 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node CREATED="1734213045001" ID="ID_787577161" MODIFIED="1734213055524" TEXT="sonstige Signatur bereits anlegen"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734197971763" ID="ID_1977596531" MODIFIED="1734197997067" TEXT="Schritt-2 : tatsächliche Flexibilität">
|
||||
<node CREATED="1734214199422" ID="ID_525858909" MODIFIED="1734214224775" TEXT="stellt sich wieder (zum x-ten Mal) die Frage nach dem Layout der FeedManifold"/>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734197971763" ID="ID_1977596531" MODIFIED="1734299442669" TEXT="Schritt-2 : tatsächliche Flexibilität">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#435e98" CREATED="1734214199422" ID="ID_525858909" MODIFIED="1734299260472" TEXT="stellt sich wieder (zum x-ten Mal) die Frage nach dem Layout der FeedManifold">
|
||||
<arrowlink COLOR="#2e2c57" DESTINATION="ID_1045815708" ENDARROW="Default" ENDINCLINATION="-98;-400;" ID="Arrow_ID_639104343" STARTARROW="None" STARTINCLINATION="-367;14;"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734299273886" ID="ID_1992832073" MODIFIED="1734299285393" TEXT="intern mehrstufig aufbauen">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node CREATED="1734299304455" ID="ID_286097173" MODIFIED="1734299376662" TEXT="Trait zur Fallunterscheidung">
|
||||
<arrowlink COLOR="#8e8fa7" DESTINATION="ID_978315882" ENDARROW="Default" ENDINCLINATION="52;169;" ID="Arrow_ID_793891080" STARTARROW="None" STARTINCLINATION="-331;-17;"/>
|
||||
</node>
|
||||
<node CREATED="1734299287036" ID="ID_675651825" MODIFIED="1734299411972" TEXT="Trait zur Klassifikation eines Arguments">
|
||||
<node CREATED="1734299588563" ID="ID_1171470327" MODIFIED="1734299593079" TEXT="Hilfsmittel">
|
||||
<node CREATED="1734299594621" ID="ID_1652085011" MODIFIED="1734299598721" TEXT="is_Value">
|
||||
<node CREATED="1734299796014" ID="ID_91717467" MODIFIED="1734299803280" TEXT="keine Referenz">
|
||||
<node CREATED="1734299805447" ID="ID_757014547" MODIFIED="1734299825696" TEXT="wirklich?">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
vorsicht Falle: Parameter werden oft per Referenz genommen
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1734299828371" ID="ID_107221686" MODIFIED="1734299851058" TEXT="diese Einschränkung setze ich hier explizit">
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1734299854014" ID="ID_633815100" MODIFIED="1734299865387" TEXT="bedeutet: die Binding-Funktionen müssen sich daran eben halten"/>
|
||||
<node CREATED="1734299867289" ID="ID_1447684196" MODIFIED="1734299879256" TEXT="und speziell die Parameter by-Value abnehmen"/>
|
||||
<node COLOR="#7a2e5e" CREATED="1734299887554" ID="ID_1986380883" MODIFIED="1734299907367" TEXT="...einfach mal machen!">
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1734299912429" ID="ID_1689731027" MODIFIED="1734299916457" TEXT="kein Pointer"/>
|
||||
<node CREATED="1734299917777" ID="ID_109395935" MODIFIED="1734299941744" TEXT="muß hier Array und Tuple ausschließen">
|
||||
<arrowlink DESTINATION="ID_822733161" ENDARROW="Default" ENDINCLINATION="-14;-32;" ID="Arrow_ID_990958884" STARTARROW="None" STARTINCLINATION="-92;-2;"/>
|
||||
<node CREATED="1734300089863" ID="ID_551343781" MODIFIED="1734300108488" TEXT="weil ich sonst einfache und zusammengesätzte Fälle nicht getrennt bekomme"/>
|
||||
<node CREATED="1734300116683" ID="ID_886815447" MODIFIED="1734300158482" TEXT="Einschränkung des Traits-Mechanismus: Fälle müssen eindeutig sein">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
ich muß für die strukturierten Fälle eine eingene Trait-Spezialisierung anlegen
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1734299948322" ID="ID_1928109484" MODIFIED="1734299969936" TEXT="verlange auch...">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1734299955097" ID="ID_1456270554" MODIFIED="1734299960532" TEXT="default-konstruierbar"/>
|
||||
<node CREATED="1734299961795" ID="ID_402928846" MODIFIED="1734299966475" TEXT="copy-assignable"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1734299599947" ID="ID_1658357787" MODIFIED="1734299603445" TEXT="is_Buffer">
|
||||
<node CREATED="1734300003050" ID="ID_230897434" MODIFIED="1734300009454" TEXT="sehr ähnlich gelagert"/>
|
||||
<node CREATED="1734300010869" ID="ID_1932874551" MODIFIED="1734300018717" TEXT="gemeint ist: der Buffer-Typ selber"/>
|
||||
<node CREATED="1734300020223" ID="ID_522043996" MODIFIED="1734300032435" TEXT="Unterschied: schließe hier strukturierte Typen nicht aus">
|
||||
<node CREATED="1734300047365" ID="ID_862630860" MODIFIED="1734300071263" TEXT="nur weil es möglich ist"/>
|
||||
<node CREATED="1734300072657" ID="ID_1624991173" MODIFIED="1734300086236" TEXT="denn ich nehme diese Argumente stets per-Pointer"/>
|
||||
</node>
|
||||
<node CREATED="1734300037782" ID="ID_1265960300" MODIFIED="1734300045369" TEXT="dafür aber Funktoren"/>
|
||||
</node>
|
||||
<node CREATED="1734299605025" ID="ID_822733161" MODIFIED="1734299941744" TEXT="is_Structured">
|
||||
<linktarget COLOR="#685a75" DESTINATION="ID_822733161" ENDARROW="Default" ENDINCLINATION="15;31;" ID="Arrow_ID_1498083496" SOURCE="ID_300211802" STARTARROW="None" STARTINCLINATION="83;5;"/>
|
||||
<linktarget COLOR="#a9b4c1" DESTINATION="ID_822733161" ENDARROW="Default" ENDINCLINATION="-14;-32;" ID="Arrow_ID_990958884" SOURCE="ID_109395935" STARTARROW="None" STARTINCLINATION="-92;-2;"/>
|
||||
<node CREATED="1734299688214" ID="ID_1568952693" MODIFIED="1734299696272" TEXT="im C++ selber gibt es dafür noch nichts"/>
|
||||
<node CREATED="1734299700012" ID="ID_1751899842" MODIFIED="1734299720075" TEXT="man kann über die konstituierenden Funktionen gehen">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1734299730688" ID="ID_1277722611" MODIFIED="1734299751160" TEXT="das ist nicht exakt, weil strucutred Bindings auch auf weiteren Typen funktionieren"/>
|
||||
<node CREATED="1734299752398" ID="ID_199462953" MODIFIED="1734299761304" TEXT="aber hier für den Zweck erscheint es ausreichend"/>
|
||||
<node COLOR="#338800" CREATED="1734299762910" ID="ID_638534663" MODIFIED="1734299783097" TEXT="⟹ prüfe ob std::tuple_size instantiierbar ist">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1734300178469" ID="ID_1968928516" MODIFIED="1734300198561" TEXT="Einzelwerte direkt in Value und Pointer unterscheiden"/>
|
||||
<node CREATED="1734300199815" ID="ID_677210614" MODIFIED="1734300217722" TEXT="übergangsweise noch eine Spezialisierung für Arrays mitnehmen">
|
||||
<node CREATED="1734300223358" ID="ID_1517631345" MODIFIED="1734300333972" TEXT="(fragt sich wie lange ich beide Code-Zweige nebeneinander halten kann)">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...dieser Umbau ist durchaus <i>schwer zu stemmen.... </i>
|
||||
</p>
|
||||
<p>
|
||||
Denn der weitere darauf aufbauende Code ist ebenfalls nicht ganz in Ordnung und benötigt die Generalisierung, um dann grade gezogen zu werden... und ich fürchte die Situation, wo mir ein Berg von Template-Code um die Ohren fliegt
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<font NAME="SansSerif" SIZE="10"/>
|
||||
<icon BUILTIN="smiley-neutral"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1734300344699" ID="ID_660526050" MODIFIED="1734300363029" TEXT="strukturierte Typen in einem zweiten Schritt hinzufügen"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1734299615144" ID="ID_1061968970" MODIFIED="1734299633817" TEXT="Umgang mit komplexen Argumenten">
|
||||
<node COLOR="#5b280f" CREATED="1734299635613" ID="ID_1256304259" MODIFIED="1734299646473" TEXT="Fallunterscheidung Tupel und Array">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
</node>
|
||||
<node CREATED="1734299647835" ID="ID_300211802" MODIFIED="1734299682940" TEXT="versuche es direkt über die structured-bindings">
|
||||
<arrowlink COLOR="#685a75" DESTINATION="ID_822733161" ENDARROW="Default" ENDINCLINATION="15;31;" ID="Arrow_ID_1498083496" STARTARROW="None" STARTINCLINATION="83;5;"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -91554,7 +91638,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734214260094" ID="ID_1731140529" MODIFIED="1734214303534" TEXT="muß die Storage neu bestimmen">
|
||||
<icon BUILTIN="yes"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734214271580" ID="ID_1045815708" MODIFIED="1734214294015" TEXT="Nochmal über die Rolle der FeedManifold nachdenken">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734214271580" ID="ID_1045815708" MODIFIED="1734299228970" TEXT="Nochmal über die Rolle der FeedManifold nachdenken">
|
||||
<linktarget COLOR="#2e2c57" DESTINATION="ID_1045815708" ENDARROW="Default" ENDINCLINATION="-98;-400;" ID="Arrow_ID_639104343" SOURCE="ID_525858909" STARTARROW="None" STARTINCLINATION="-367;14;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1734214319422" ID="ID_405803529" MODIFIED="1734214333944" TEXT="sie ist und bleibt die dynamische Invocation-Storage"/>
|
||||
<node CREATED="1734214355412" ID="ID_920827020" MODIFIED="1734214364155" TEXT="und zwar für eine Port-Aktivierung">
|
||||
|
|
@ -91584,8 +91669,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
Der Name und die Vorstellung hat nun mehrfach gewechselt, aber es ging doch letztlich immer darum, eine unbekannte Library-Funktion so aufzurüsten, daß man sie mit einem generischen Schema zu fassen bekommt. Auch die Idee, die Buffer-Pointer in ein Array zu packen, gehört letztlich zu diesem Ansatz. Der darüber hinausgehende Teil der ursprünglichen Idee, dieses Strukur auch zu »bespielen« ist jetzt in der »weaving«-Metapher aufgegangen — und dieses fortschreitende Wechselspiel in der Speicherbelegung findet darüber ja nun tatsächlich statt.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1734224433562" ID="ID_1575355082" MODIFIED="1734224522138" TEXT="dem zufolge ⟹ auch die Storage für den Funktionsaufruf gehört hierher"/>
|
||||
<node CREATED="1734224528900" ID="ID_623526235" MODIFIED="1734224541463" TEXT="und die Storage für die zwei Funktoren"/>
|
||||
|
|
@ -91611,8 +91695,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
hier zeigt sich immer wieder der gleiche Trade-off: zusätzliche Indirektion vs. Template-Bloat
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<arrowlink COLOR="#ec4160" DESTINATION="ID_1378608706" ENDARROW="Default" ENDINCLINATION="-191;526;" ID="Arrow_ID_1877600264" STARTARROW="None" STARTINCLINATION="-161;11;"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -91691,14 +91774,27 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<arrowlink COLOR="#fd0e40" DESTINATION="ID_1166367446" ENDARROW="Default" ENDINCLINATION="-134;6;" ID="Arrow_ID_1369831225" STARTARROW="None" STARTINCLINATION="-270;14;"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734132967020" ID="ID_1354544776" MODIFIED="1734133516984" TEXT="Param-Tuple in FeedManifold aufnehmen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734286428873" ID="ID_1059514888" MODIFIED="1734300480355" TEXT="Vorraussetzung ist ein anspruchsvoller Umbau">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1734286473131" ID="ID_414275228" MODIFIED="1734300473228" TEXT="Prallell-Strukturen für den Übergang schaffen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1734286485714" ID="ID_1348489291" MODIFIED="1734300437327" TEXT="im NodeBase_test versuchsweise instantiieren">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node CREATED="1734286523651" ID="ID_132315841" MODIFIED="1734286531775" TEXT="Fall-Unterscheidungen für die Storage einführen"/>
|
||||
<node CREATED="1734286560983" ID="ID_431464065" MODIFIED="1734300414607" TEXT="auf die flexible Funktor-Signatur schwenken"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734300380799" ID="ID_782708625" MODIFIED="1734300402299" TEXT="dann die Erweiterung auf strukturierte Typen dazunehmen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734133400400" ID="ID_1364724277" MODIFIED="1734141875620" TEXT="zusätzlichen Funktor für die Parameter akzeptieren">
|
||||
<arrowlink COLOR="#c0023e" DESTINATION="ID_1127056731" ENDARROW="Default" ENDINCLINATION="-1257;-48;" ID="Arrow_ID_1717201620" STARTARROW="None" STARTINCLINATION="-908;50;"/>
|
||||
|
|
|
|||
Loading…
Reference in a new issue