Invocation: switch WeavingPattern and Level-1 builder to the reworked FeedManifold

After the complete makeover of the `FeedManifold` structure,
which among other entails a switch from ''buffer arrays'' to tuples
and the ''introduction of a parameter tuple'', this changeset now
switches the „downstream code“ of the builder and node invocation,
relying on an largely identical invocation API.

The partially finished NodeLink_test now **runs as before**
but on top of a drastically more flexible and open infrastructure.

Quite a feat.
This commit is contained in:
Fischlurch 2024-12-01 05:24:12 +01:00
parent 0ccc2d0b89
commit e46ff7a8a7
8 changed files with 728 additions and 131 deletions

View file

@ -216,6 +216,10 @@ namespace engine {
using ArgO = typename ElmTypes<SigO>::Seq;
using ArgP = typename ElmTypes<SigP>::Seq;
// Metaprogramming helper for Buffer types (sans pointer)
using ElmsI = ElmTypes<typename ElmTypes<SigI>::template Apply<remove_pointer_t>>;
using ElmsO = ElmTypes<typename ElmTypes<SigO>::template Apply<remove_pointer_t>>;
enum{ FAN_I = ElmTypes<SigI>::SIZ
, FAN_O = ElmTypes<SigO>::SIZ
, FAN_P = ElmTypes<SigP>::SIZ
@ -457,6 +461,7 @@ namespace engine {
struct FeedManifold
: _StorageSetup<FUN>::Storage
{
using _T = _ProcFun<FUN>;
using _S = _StorageSetup<FUN>;
using _F = typename _S::Storage;
@ -493,8 +498,8 @@ namespace engine {
return arg;
}
using TupI = typename ElmTypes<ArgI>::Tup;
using TupO = typename ElmTypes<ArgO>::Tup;
using TupI = typename _T::ElmsI::Tup;
using TupO = typename _T::ElmsO::Tup;
void
@ -504,7 +509,7 @@ namespace engine {
{
forEachIDX<TupI> ([&](auto i)
{
using BuffI = remove_pointer_t<tuple_element_t<i, TupI>>;
using BuffI = tuple_element_t<i, TupI>;
accessArg<i> (_F::inArgs) = & _F::inBuff[i].template accessAs<BuffI>();
});
}
@ -512,7 +517,7 @@ namespace engine {
{
forEachIDX<TupO> ([&](auto i)
{
using BuffO = remove_pointer_t<tuple_element_t<i, TupO>>;
using BuffO = tuple_element_t<i, TupO>;
accessArg<i> (_F::outArgs) = & _F::outBuff[i].template accessAs<BuffO>();
});
}
@ -552,7 +557,7 @@ namespace engine {
* parameter-functor with the **cross-builder-API**, a _new instance_ of the prototype
* is created _as a replacement_ of the old one (note: we move the processing functor).
* This adds a parameter-functor to the configuration, which will then be invoked
* _whenever a new FeedManifold instance_ [is created](\ref #createFeed); the result of
* _whenever a new FeedManifold instance_ [is created](\ref #buildFeed); the result of
* this parameter-functor invocation should be a parameter value, which can be passed
* into the constructor of FeedManifold, together with a copy of the proc-functor.
* @see NodeBase_test::verify_FeedPrototype()
@ -561,13 +566,26 @@ namespace engine {
class FeedPrototype
: util::MoveOnly
{
using _Proc = _ProcFun<FUN>;
using _Trait = _ParamFun<FUN>;
using Feed = FeedManifold<FUN>;
FUN procFun_;
PAM paramFun_;
public:
using Feed = FeedManifold<FUN>;
enum{ FAN_I = Feed::FAN_I
, FAN_O = Feed::FAN_O
, FAN_P = Feed::FAN_P
};
using ElmsI = typename _Proc::ElmsI;
using ElmsO = typename _Proc::ElmsO;
template<template<class> class META>
using OutTypesApply = typename ElmsO::template Apply<META>;
/** setup with processing-functor only */
FeedPrototype (FUN&& proc)
: procFun_{move (proc)}
, paramFun_{}
@ -583,16 +601,16 @@ namespace engine {
static constexpr bool hasParamFun() { return _Trait::template isParamFun<PAM>(); }
static constexpr bool canActivate() { return _Trait::template canActivate<PAM>(); }
/** @return runtime test: there is actually usable parameter-functor to invoke? */
/** @return runtime test: actually usable parameter-functor available to invoke? */
bool isActivated() const { return _Trait::isActivated(paramFun_); }
/************************************************************//**
* build suitable Feed(Manifold) for processing a Node invocation
* create suitable Feed(Manifold) for processing a Node invocation
*/
Feed
createFeed (TurnoutSystem& turnoutSys)
buildFeed (TurnoutSystem& turnoutSys)
{
if constexpr (hasParamFun())
if (isActivated())

View file

@ -361,7 +361,7 @@ namespace engine {
completePort()
{
weavingBuilder_.connectRemainingInputs (_Par::leads_, this->defaultPort_);
weavingBuilder_.fillRemainingBufferTypes();
weavingBuilder_.fillRemainingBufferTypes(); ////////////////////////////////////////////////////////////////////OOO Nein! sollte gleich zu Beginn (automatisch) passieren
return NodeBuilder{static_cast<NodeBuilder<POL,DAT>&&> (*this) // slice away PortBulder subclass data
,weavingBuilder_.sizMark
,weavingBuilder_.build()};

View file

@ -76,7 +76,9 @@ namespace engine {
constexpr bool
_verify_usable_as_InvocationAdapter()
{
ASSERT_MEMBER_FUNCTOR (&ADA::connect, void(uint, uint));
// also: array-like outBuff
// optionally array-like inBuff
ASSERT_MEMBER_FUNCTOR (&ADA::connect, void());
ASSERT_MEMBER_FUNCTOR (&ADA::invoke, void());
return sizeof(ADA);
}
@ -87,7 +89,7 @@ namespace engine {
_verify_usable_as_WeavingPattern()
{
using Feed = typename PAT::Feed;
ASSERT_MEMBER_FUNCTOR (&PAT::mount, Feed());
ASSERT_MEMBER_FUNCTOR (&PAT::mount, Feed(TurnoutSystem&));
ASSERT_MEMBER_FUNCTOR (&PAT::pull, void(Feed&, TurnoutSystem&));
ASSERT_MEMBER_FUNCTOR (&PAT::shed, void(Feed&, OptionalBuff));
ASSERT_MEMBER_FUNCTOR (&PAT::weft, void(Feed&));
@ -129,7 +131,7 @@ namespace engine {
BuffHandle
weave (TurnoutSystem& turnoutSys, OptionalBuff outBuff =std::nullopt) override
{
Feed feed = PAT::mount();
Feed feed = PAT::mount(turnoutSys);
PAT::pull(feed, turnoutSys);
PAT::shed(feed, outBuff);
PAT::weft(feed);

View file

@ -101,6 +101,7 @@
#include "steam/engine/weaving-pattern.hpp"
#include "steam/engine/buffer-provider.hpp"
#include "steam/engine/buffhandle-attach.hpp" /////////////////OOO why do we need to include this? we need the accessAs<TY>() template function
#include "lib/meta/tuple-helper.hpp"
#include "lib/test/test-helper.hpp" ////////////////////////////OOO TODO added for test
#include "lib/format-string.hpp"
#include "lib/iter-zip.hpp"
@ -225,8 +226,8 @@ namespace engine {
template<class FUN>
using SimpleDirectInvoke = MediaWeavingPattern<DirectFunctionInvocation<FUN>>;
// template<class FUN>
// using SimpleDirectInvoke = MediaWeavingPattern<DirectFunctionInvocation<FUN>>;
/**
@ -246,11 +247,13 @@ namespace engine {
struct WeavingBuilder
: util::MoveOnly
{
using FunSpec = _ProcFun<FUN>;
using TurnoutWeaving = Turnout<SimpleDirectInvoke<FUN>>;
using FunSpec = _ProcFun<FUN>; ///////////////////////////////////TODO remove this!!!
using Prototype = typename FeedManifold<FUN>::Prototype;
using WeavingPattern = MediaWeavingPattern<Prototype>;
using TurnoutWeaving = Turnout<WeavingPattern>;
static constexpr SizMark<sizeof(TurnoutWeaving)> sizMark{};
static constexpr uint FAN_I = FunSpec::FAN_I;
static constexpr uint FAN_O = FunSpec::FAN_O;
static constexpr uint FAN_I = Prototype::FAN_I;
static constexpr uint FAN_O = Prototype::FAN_O;
using TypeMarker = std::function<BuffDescr(BufferProvider&)>;
@ -271,6 +274,7 @@ namespace engine {
template<typename...INIT>
WeavingBuilder(FUN&& init, StrView nodeSymb, StrView portSpec, INIT&& ...alloInit)
: leadPorts{forward<INIT> (alloInit)...}
, buffTypes{fillDefaultBufferTypes()}
, nodeSymb_{nodeSymb}
, portSpec_{portSpec}
, fun_{move(init)}
@ -305,11 +309,16 @@ namespace engine {
return move(*this);
}
/** @deprecated handling of output buffer configuration should be "the other way round":
* Instead of filling-in, a default should be established at start,
* which can then arbitrarily be refined
*/
WeavingBuilder&&
fillRemainingBufferTypes()
fillRemainingBufferTypes() ///////////////////////////////////////////////////OOO Buffer-Typen gleich zu Beginn default-belegen
{
using BuffO = typename FunSpec::BuffO;
uint cnt = FAN_O - buffTypes.size();
ENSURE (cnt == 0); ///////////////////////////////////////////////////////////////////OOO already filled in constructor now -- remove this code
return appendBufferTypes<BuffO>(cnt);
}
@ -352,8 +361,8 @@ namespace engine {
outTypes.append (
typeConstructor (providers[i]));
ENSURE (leadPorts.size() == FunSpec::FAN_I);
ENSURE (outTypes.size() == FunSpec::FAN_O);
ENSURE (leadPorts.size() == FAN_I);
ENSURE (outTypes.size() == FAN_O);
using PortDataBuilder = DataBuilder<POL, Port>;
// provide a free-standing functor to build a suitable Port impl (≙Turnout)
@ -381,6 +390,59 @@ namespace engine {
for (uint i=providers.size(); i < maxSlots; ++i)
providers.emplace_back (ctx().mem);
}
/**
* @internal configuration builder for buffer descriptors
* @tparam BU target type of the buffer (without pointer)
* The FeedPrototype can generate for the given \a FUN a
* type sequence of output buffer types, which are used
* to instantiate this template and then later to work
* on specific output buffer slots.
*/
template<typename BU>
struct BufferDescriptor
{
/**
* Setup the constructor function for the default BufferDescriptors.
* @return a functor that can be applied to the actual BufferProviders
* at the point when everything for this port is configured.
*/
TypeMarker
makeBufferDescriptor() const
{
return [](BufferProvider& provider)
{ return provider.getDescriptor<BU>(); };
}
};
using OutTypesDescriptors = typename Prototype::template OutTypesApply<BufferDescriptor>;
using OutDescriptorTup = lib::meta::Tuple<OutTypesDescriptors>;
/** A tuple of BufferDescriptor instances for all output buffer types */
static constexpr OutDescriptorTup outDescriptors{};
/** @internal pre-initialise the buffTypes vector with a default configuration.
* @remarks In the _terminal step,_ the buffTypes will be transformed into a
* sequence of BufferDescriptor entries, which can later be used
* by the node invocation to prepare a set of output buffers.
* - each slot holds a function<BufferDescripter(BufferProvider&)>
* - these can be used to configure specific setup for some buffers
* - the default BufferDescriptor will just default-construct the
* designated «output slot» of the media processing-function.
*/
static auto
fillDefaultBufferTypes()
{
std::vector<TypeMarker> defaultBufferTypes;
defaultBufferTypes.reserve (std::tuple_size_v<OutDescriptorTup>);
lib::meta::forEach(outDescriptors
,[&](auto& desc)
{
defaultBufferTypes.emplace_back(
desc.makeBufferDescriptor());
});
return defaultBufferTypes;
}
};
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1367 : (End)Prototyping: how to assemble a Turnout

View file

@ -85,10 +85,12 @@ namespace engine {
* @note assumptions made regarding the overall structure
* - `INVO::Feed` defines an _invocation adapter_ for the processing function
* - `INVO::buildFeed()` is a functor to (repeatedly) build `Feed` instances
* - the _invocation adapter_ in turn embeds a `FeedManifold<N>` to hold
* + an array of input buffer pointers
* + an array of output buffer pointers
* + `INVO::MAX_SIZ` limits both arrays
* - the _invocation adapter_ in turn embeds a `FeedManifold<FUN>` to hold
* + a setup of output buffer pointers (single, tuple or array)
* + (optionally) a similar setup for input buffer pointers
* + (optionally) a parameter or parameter tuple
* + storage to configure BuffHandle entries for each «slot»
* + storage to hold the actual processing functor
*/
template<class INVO>
struct MediaWeavingPattern
@ -117,14 +119,17 @@ namespace engine {
Feed
mount()
mount (TurnoutSystem& turnoutSys)
{
return INVO::buildFeed();
ENSURE (leadPort.size() <= INVO::FAN_I);
ENSURE (outTypes.size() <= INVO::FAN_O);
return INVO::buildFeed (turnoutSys);
}
void
pull (Feed& feed, TurnoutSystem& turnoutSys)
{
if constexpr (Feed::hasInput())
for (uint i=0; i<leadPort.size(); ++i)
{
BuffHandle inputData = leadPort[i].get().weave (turnoutSys);
@ -142,7 +147,7 @@ namespace engine {
: outTypes[i].lockBuffer();
feed.outBuff.createAt(i, move(resultData));
}
feed.connect (leadPort.size(),outTypes.size());
feed.connect();
}
void
@ -154,6 +159,7 @@ namespace engine {
BuffHandle
fix (Feed& feed)
{
if constexpr (Feed::hasInput())
for (uint i=0; i<leadPort.size(); ++i)
{
feed.inBuff[i].release();
@ -164,7 +170,7 @@ namespace engine {
if (i != resultSlot)
feed.outBuff[i].release();
}
ENSURE (resultSlot < INVO::MAX_SIZ, "invalid result buffer configured.");
ENSURE (resultSlot < INVO::FAN_O, "invalid result buffer configured.");
return feed.outBuff[resultSlot];
}

View file

@ -346,7 +346,7 @@ namespace test {
CHECK (sizeof(p1) <= sizeof(void*));
TurnoutSystem turSys{Time::NEVER}; // Each Node invocation uses a TurnoutSystem instance....
M1 m1 = p1.createFeed(turSys); //... and also will create a new FeedManifold from the prototype
M1 m1 = p1.buildFeed(turSys); //... and also will create a new FeedManifold from the prototype
CHECK (m1.param == short{}); // In this case here, the param value is default constructed.
m1.outBuff.createAt(0, buff); // Perform the usual steps for an invocation....
CHECK (buff.accessAs<long>() == -55);
@ -370,7 +370,7 @@ namespace test {
CHECK (not P1x::canActivate());
P1x p1x = p1.moveAdapted (move(fun_paramSimple));
M1 m1x = p1x.createFeed(turSys); // ◁————————— param-functor invoked here
M1 m1x = p1x.buildFeed(turSys); // ◁————————— param-functor invoked here
CHECK (rr == m1x.param); // ...as indicated by the side-effect
short r1 = m1x.param;
@ -387,7 +387,7 @@ namespace test {
CHECK (calcResult == r1 - 1); // as does m1x, without invoking the param-functor
// create yet another instance from the prototype...
M1 m1y = p1x.createFeed(turSys); // ◁————————— param-functor invoked here
M1 m1y = p1x.buildFeed(turSys); // ◁————————— param-functor invoked here
CHECK (rr == m1y.param);
CHECK (r1 < m1y.param); // ...note again the side-effect
m1y.outBuff.createAt(0, buff);
@ -423,18 +423,18 @@ namespace test {
CHECK (not p1f.isActivated()); // yet in current runtime configuration, the function is empty
// create a FeedManifold instance from this prototype
M1 m1f1 = p1f.createFeed(turSys); // no param-functor invoked,
M1 m1f1 = p1f.buildFeed(turSys); // no param-functor invoked,
CHECK (m1f1.param == short{}); // so this FeedManifold will use the default-constructed parameter
// but since std::function is assignable, we can activate it...
CHECK (not p1f.isActivated());
p1f.assignParamFun ([](TurnoutSystem&){ return 47; });
CHECK ( p1f.isActivated());
M1 m1f2 = p1f.createFeed(turSys); // ◁————————— param-functor invoked here
M1 m1f2 = p1f.buildFeed(turSys); // ◁————————— param-functor invoked here
CHECK (m1f2.param == 47); // ...surprise: we got number 47...
p1f.assignParamFun();
CHECK (not p1f.isActivated()); // can /deactivate/ it again...
M1 m1f3 = p1f.createFeed(turSys); // so no param-functor invoked here
M1 m1f3 = p1f.buildFeed(turSys); // so no param-functor invoked here
CHECK (m1f3.param == short{});
// done with buffer

View file

@ -112,7 +112,7 @@ SHOW_EXPR(metaN1.genNodeSpec(con.leads))
/** @test TODO Use existing node connectivity to generate a TurnoutSystem
* @todo WIP 7/24 🔁 define implement
* @todo WIP 12/24 🔁 define implement
*/
void
generate_turnout_system()
@ -122,7 +122,7 @@ SHOW_EXPR(metaN1.genNodeSpec(con.leads))
/** @test TODO Invoke some render nodes as linked together
* @todo WIP 7/24 🔁 define implement
* @todo WIP 12/24 🔁 define implement
*/
void
trigger_node_port_invocation()

View file

@ -1,6 +1,6 @@
<map version="1.0.1">
<!-- To view this file, download free mind mapping software FreeMind from http://freemind.sourceforge.net -->
<node BACKGROUND_COLOR="#6666ff" CREATED="1434127882200" ID="ID_1452170048" MODIFIED="1733091464357" STYLE="fork" TEXT="Lumi">
<node BACKGROUND_COLOR="#6666ff" CREATED="1434127882200" ID="ID_1452170048" MODIFIED="1734743418261" STYLE="fork" TEXT="Lumi">
<font NAME="SansSerif" SIZE="25"/>
<node CREATED="1434128046296" FOLDED="true" ID="ID_1900827283" MODIFIED="1679363052358" POSITION="right" TEXT="GUI">
<font BOLD="true" NAME="SansSerif" SIZE="14"/>
@ -27563,9 +27563,7 @@
<icon BUILTIN="button_ok"/>
<node CREATED="1678028166248" ID="ID_1827737851" MODIFIED="1678028674353">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
<font face="Monospaced" size="2">TrackHeadWidget::syncSubtrackStartHeight (uint directHeight)</font>
@ -27950,9 +27948,7 @@
</node>
<node CREATED="1677549011508" ID="ID_1030834105" LINK="https://docs.gtk.org/Pango/method.FontDescription.get_size.html" MODIFIED="1677549122645" TEXT="gint pango_font_description_get_size()">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
<a http-equiv="content-type" content="text/html; charset=utf-8" href="javascript:void(0)" class="collapse-toggle">
@ -28223,9 +28219,7 @@
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1679082719008" ID="ID_1600275521" MODIFIED="1679084618405" TEXT="Anzeige der Track-Scopes pr&#xe4;zise steuern">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
Mehrere Aspekte sind hier offen (2023: Abschlu&#223; der GUI-Neugr&#252;ndung und vor Playback-Vertical-Slice):
@ -28923,9 +28917,7 @@
<node CREATED="1557446503084" ID="ID_1518606339" MODIFIED="1557498707229" TEXT="w&#xfc;rde ohnehin sp&#xe4;ter beim Compilieren scheitern"/>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1557446627092" ID="ID_805659416" MODIFIED="1557498707229" TEXT="mit #1197 hinf&#xe4;llig">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
weil ich dann explizit ein bestimmtes Basis-Interface verlangen werde,
@ -29584,9 +29576,7 @@
<icon BUILTIN="info"/>
<node CREATED="1678840184103" ID="ID_1797129143" MODIFIED="1678840379017" TEXT="siehe 09714cfe">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
<font color="#912929" face="Monospaced">commit 09714cfe28739ceff0b5693447be41166c1cc8d6</font>
@ -30927,9 +30917,7 @@
<node CREATED="1555021797428" ID="ID_1566025774" MODIFIED="1557498707230" TEXT="Problem: Fallback">
<node CREATED="1555021809578" ID="ID_1964178964" MODIFIED="1576282358052" TEXT="was wenn die Clip-Region nicht gesetzt ist?">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
wir k&#246;nnen nicht von 0 bis MAXINT zeichnen
@ -31152,9 +31140,7 @@
<node CREATED="1562236335828" ID="ID_185933728" MODIFIED="1562236350237" TEXT="der User mu&#xdf; diese explizit stylen"/>
<node CREATED="1562236351178" ID="ID_340701173" MODIFIED="1562236389823" TEXT="das lumiera.css definiert diese">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
....und dient damit als Vorlage f&#252;r Theme-Autoren
@ -32154,9 +32140,7 @@
</node>
<node COLOR="#435e98" CREATED="1564932484393" ID="ID_1092949064" MODIFIED="1566519094002">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
und zwar f&#252;r bestimmte Elemente (<b>Konvention</b>)
@ -33109,9 +33093,7 @@
<icon BUILTIN="yes"/>
<node CREATED="1566956361471" ID="ID_1879544719" MODIFIED="1576282358041" TEXT="Vorsicht bei gemeinsam genormten Koordinaten">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
weil dann der Platz f&#252;r den &quot;pinned&quot; Ruler redundant im Body-Canvas vorhanden ist!
@ -33815,9 +33797,7 @@
</node>
<node CREATED="1583679138220" ID="ID_1641273224" MODIFIED="1583679221489" TEXT="es handelt sich eigentlich um etas &#xdc;bergreifendes">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
n&#228;mlich eine abgek&#252;rzte &#220;bersichts-Darstellung, die wohl ehr auf der Basis ganzer Tracks zu zeichnen w&#228;re (Tracks deshalb, weil wir eine <i>Abk&#252;rzungs-Darstellung</i>&#160; der Tracks selber nicht vorsehen)
@ -34376,9 +34356,7 @@
<node CREATED="1661693565527" ID="ID_361309488" MODIFIED="1661693572119" TEXT="vermittelnd.....">
<node CREATED="1661693573892" ID="ID_554831193" MODIFIED="1661693649780" TEXT="Endpunkt f&#xfc;r UI-Signal-Wiring">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
aktive Elemente im Clip-Widget l&#246;sen UI-Signale aus, die eine abstrahierte Funktion aufrufen &#8212; und diese gebundene Funktion (zumindest der Einsprungpunkt) liegt im Clip-Presenter
@ -91519,9 +91497,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734060125195" ID="ID_1347066000" MODIFIED="1734060532007" TEXT="Entwurf um Storage + Funktor f&#xfc;r Parameter erg&#xe4;nzen">
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734060125195" ID="ID_1347066000" MODIFIED="1734755857763" TEXT="Entwurf um Storage + Funktor f&#xfc;r Parameter erg&#xe4;nzen">
<linktarget COLOR="#b02152" DESTINATION="ID_1347066000" ENDARROW="Default" ENDINCLINATION="-739;36;" ID="Arrow_ID_1367798112" SOURCE="ID_1795912761" STARTARROW="None" STARTINCLINATION="532;31;"/>
<icon BUILTIN="flag-yellow"/>
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1734060219654" ID="ID_64712491" MODIFIED="1734060380089" TEXT="Konzeption der Nutz-Muster">
<arrowlink COLOR="#314dba" DESTINATION="ID_927225402" ENDARROW="Default" ENDINCLINATION="536;1135;" ID="Arrow_ID_352726523" STARTARROW="None" STARTINCLINATION="-380;-913;"/>
<icon BUILTIN="info"/>
@ -91529,8 +91507,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1734060427954" ID="ID_714381100" MODIFIED="1734060440806" TEXT="draus dann ein Storage-Layout in der Render-Engine entwickelt"/>
<node CREATED="1734060460509" ID="ID_1434138828" LINK="#ID_532258033" MODIFIED="1734060510084" TEXT="HetroData : Hilfskomponente zur Implementierung des Turnout-Systems"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734132938355" ID="ID_695632181" MODIFIED="1734133509735" TEXT="Umbauten">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734132938355" ID="ID_695632181" MODIFIED="1734755866478" TEXT="Umbauten">
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#582d92" CREATED="1734133041626" ID="ID_1421951599" MODIFIED="1734725184858">
<richcontent TYPE="NODE"><html>
<head/>
@ -91595,7 +91573,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node COLOR="#338800" CREATED="1734191239971" ID="ID_114334831" MODIFIED="1734725150896" TEXT="Traits differenzieren">
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1734191250817" FOLDED="true" ID="ID_1191066600" MODIFIED="1734725360030" TEXT="_ProcFun">
<node COLOR="#435e98" CREATED="1734191250817" FOLDED="true" ID="ID_1191066600" MODIFIED="1734756014023" TEXT="_ProcFun">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<node CREATED="1734191297683" ID="ID_1345489513" MODIFIED="1734191301478" TEXT="Interface">
<node CREATED="1734197766903" ID="ID_673979515" MODIFIED="1734197771095" TEXT="Sig">
@ -91629,6 +91607,11 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
<node CREATED="1734197580632" ID="ID_471999378" MODIFIED="1734197586731" TEXT="SLOT_O"/>
<node CREATED="1734756034695" ID="ID_1796473851" MODIFIED="1734756056932" TEXT="ElmsI / ElmsO">
<node COLOR="#571c9a" CREATED="1734197197766" HGAP="25" ID="ID_581137219" MODIFIED="1734756095355" TEXT="ElmTypes&lt;...&gt; - Instanz, aber ohne Pointer" VSHIFT="3">
<font NAME="SansSerif" SIZE="10"/>
</node>
</node>
<node CREATED="1734197463558" ID="ID_1084339659" MODIFIED="1734198442856" TEXT="hasInput() &#x2254; SLOT_I &#x2260; SLOT_O"/>
<node CREATED="1734197436811" ID="ID_218618324" MODIFIED="1734198590894" TEXT="hasParam() &#x2254; 0 &lt; SLOT_I">
<node CREATED="1734198461292" HGAP="22" ID="ID_1230777508" MODIFIED="1734198560559" TEXT="(folgt implizit)" VSHIFT="3">
@ -91869,8 +91852,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
jetzt bin ich bereits so weit gekommen, und hab den gr&#246;&#223;ten Teil der Komplexit&#228;t <i>in die FeedManifold</i>&#160;verlagert....
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
</node>
</node>
@ -91917,14 +91899,13 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
Dieser Trait erbringt keine so hohe Abstraktiosleistung wie _ProcFun; im Grunde k&#246;nnte man auch allen diesen Code direkt in FeedPrototype schieben &#8212; es ist also mehr ein Vekikel zur Code-Organisation, r&#228;umt die low-level-Details weg und macht sie auch leichter testbar
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734133384146" ID="ID_250842155" MODIFIED="1734133516983" TEXT="Typ-Steuerung im Builder &#xfc;berarbeiten">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734133384146" ID="ID_250842155" MODIFIED="1734755876291" TEXT="Typ-Steuerung im Builder &#xfc;berarbeiten">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1734190947370" ID="ID_765080280" MODIFIED="1734725144619" TEXT="FeedManifold umstellen: std::array &#x27fc; tuple">
<icon BUILTIN="button_ok"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1734191532632" FOLDED="true" ID="ID_503276878" MODIFIED="1734661895753" TEXT="damit f&#xe4;llt eine starke strukturelle Einschr&#xe4;nkung weg">
@ -92139,8 +92120,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1734226564932" ID="ID_696691756" MODIFIED="1734226570322" TEXT="Constructor (static)"/>
</node>
<node COLOR="#435e98" CREATED="1734582866744" FOLDED="true" ID="ID_1616386454" MODIFIED="1734661773085" TEXT="nochmal restrukturieren: mu&#xdf; nun Param-Tupel durchreichen">
<linktarget COLOR="#427ec1" DESTINATION="ID_1616386454" ENDARROW="Default" ENDINCLINATION="-1351;60;" ID="Arrow_ID_676623897" SOURCE="ID_1465521206" STARTARROW="None" STARTINCLINATION="-531;27;"/>
<linktarget COLOR="#647c98" DESTINATION="ID_1616386454" ENDARROW="Default" ENDINCLINATION="-1386;65;" ID="Arrow_ID_45405996" SOURCE="ID_845819422" STARTARROW="None" STARTINCLINATION="650;38;"/>
<linktarget COLOR="#427ec1" DESTINATION="ID_1616386454" ENDARROW="Default" ENDINCLINATION="-1351;60;" ID="Arrow_ID_676623897" SOURCE="ID_1465521206" STARTARROW="None" STARTINCLINATION="-531;27;"/>
<icon BUILTIN="yes"/>
<node COLOR="#5b280f" CREATED="1734583035971" ID="ID_662389818" MODIFIED="1734583156432" TEXT="ich m&#xf6;chte nicht das Param-Tupel nachtr&#xe4;glich zuweisen">
<richcontent TYPE="NOTE"><html>
@ -92285,8 +92266,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1734282698342" ID="ID_1166367446" MODIFIED="1734725118891" TEXT="Aufgabe: Konstruktor-Parameter h&#xe4;ngen von der Konfiguration ab">
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1734282698342" ID="ID_1166367446" MODIFIED="1734738888812" TEXT="Aufgabe: Konstruktor-Parameter h&#xe4;ngen von der Konfiguration ab">
<linktarget COLOR="#2143ae" DESTINATION="ID_1166367446" ENDARROW="Default" ENDINCLINATION="-134;6;" ID="Arrow_ID_1369831225" SOURCE="ID_151535815" STARTARROW="None" STARTINCLINATION="-270;14;"/>
<linktarget COLOR="#4546d4" DESTINATION="ID_1166367446" ENDARROW="Default" ENDINCLINATION="-4;229;" ID="Arrow_ID_698609212" SOURCE="ID_764351741" STARTARROW="None" STARTINCLINATION="62;-202;"/>
<icon BUILTIN="clanbomber"/>
<node CREATED="1734563583763" ID="ID_512213705" MODIFIED="1734572339231" TEXT="tats&#xe4;chlicher Nutz-Kontext">
<arrowlink COLOR="#5958a8" DESTINATION="ID_692448245" ENDARROW="Default" ENDINCLINATION="-2;-498;" ID="Arrow_ID_1679356815" STARTARROW="None" STARTINCLINATION="-480;46;"/>
@ -92297,16 +92279,16 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node CREATED="1734563734735" ID="ID_919421103" MODIFIED="1734572326173" TEXT="Nutz-Muster">
<icon BUILTIN="info"/>
<node CREATED="1734563740806" ID="ID_55877940" MODIFIED="1734563744641" TEXT="Test-Setup">
<node CREATED="1734563740806" FOLDED="true" ID="ID_55877940" MODIFIED="1734563744641" TEXT="Test-Setup">
<node CREATED="1734563746497" ID="ID_423769874" MODIFIED="1734563756595" TEXT="erzeuge den Typ direkt von der Processing-Function"/>
<node CREATED="1734563758051" ID="ID_1385547291" MODIFIED="1734563772102" TEXT="instantiiere per &#xdc;bergabe des Processing-Funktors"/>
</node>
<node CREATED="1734563786196" ID="ID_174357445" MODIFIED="1734563791747" TEXT="Einfache Node">
<node CREATED="1734563786196" FOLDED="true" ID="ID_174357445" MODIFIED="1734563791747" TEXT="Einfache Node">
<node CREATED="1734563799990" ID="ID_871977907" MODIFIED="1734563836213" TEXT="im Prototyen wurde der Processing-Funktor gespeichert"/>
<node CREATED="1734563845192" ID="ID_1992702331" MODIFIED="1734563876039" TEXT="Daten liegen im Port und damit fest in der Render-Node-Storage"/>
<node CREATED="1734563901958" ID="ID_556454787" MODIFIED="1734563930868" TEXT="Instantiierung: Builder kopiert Proc-Functor in den ctor der FeedManifold"/>
</node>
<node CREATED="1734564935899" ID="ID_1063511951" MODIFIED="1734564968427" TEXT="Node mit Parametern">
<node CREATED="1734564935899" FOLDED="true" ID="ID_1063511951" MODIFIED="1734564968427" TEXT="Node mit Parametern">
<node CREATED="1734564996507" ID="ID_1354211229" MODIFIED="1734565011772" TEXT="im Prototypen liegt wieder der Processing-Funktor"/>
<node CREATED="1734565028486" ID="ID_900644106" MODIFIED="1734565043608" TEXT="zus&#xe4;tzlich liegt dort auch ein Param-Funktor"/>
<node CREATED="1734565061765" ID="ID_1265541579" MODIFIED="1734565077412" TEXT="zur Invocation wird der Param-Funktor mit TurnoutSystem&amp; aktiviert"/>
@ -92317,7 +92299,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node COLOR="#434598" CREATED="1734565250264" ID="ID_225480799" MODIFIED="1734727623362" TEXT="Typ-Konfiguration">
<node COLOR="#434598" CREATED="1734565250264" ID="ID_225480799" MODIFIED="1734755909324" TEXT="Typ-Konfiguration">
<linktarget COLOR="#3924a1" DESTINATION="ID_225480799" ENDARROW="Default" ENDINCLINATION="42;177;" ID="Arrow_ID_1550271356" SOURCE="ID_1507739045" STARTARROW="None" STARTINCLINATION="202;11;"/>
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="yes"/>
<node CREATED="1734565451406" ID="ID_143803456" MODIFIED="1734565466310">
@ -92448,8 +92431,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
prototype.moveAdapted (paramFun) &#10230; <b>move</b>&#160;in neue FeedPrototype-Instanz
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1734727180486" ID="ID_1641544292" MODIFIED="1734727194441" TEXT="prototype.moveAdapted&lt;PF&gt;()"/>
<node CREATED="1734727235213" ID="ID_48238590" MODIFIED="1734727265548">
@ -92460,8 +92442,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
prototype.clone() &#10230; <b>Kopie</b>&#160;<i>falls</i>&#160;beide Funktoren das erlauben
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1734727270803" ID="ID_1217046343" MODIFIED="1734727299851" TEXT="prototype.assignParamFun(paramFun) &#x27f6; Zuweisung falls Funktor das erlaubt">
<node CREATED="1734727301126" ID="ID_1777992546" MODIFIED="1734727351180" TEXT="std::function">
@ -92480,7 +92461,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1734572424754" ID="ID_1186353623" MODIFIED="1734724974341" TEXT="Typ anlegen mit zwei Funktor-Parametern">
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1734658230227" ID="ID_1351680476" MODIFIED="1734658432581" TEXT="brauche eine &#xbb;Deaktiviert&#xab;-Default-Funktion">
<node COLOR="#435e98" CREATED="1734658230227" FOLDED="true" ID="ID_1351680476" MODIFIED="1734658432581" TEXT="brauche eine &#xbb;Deaktiviert&#xab;-Default-Funktion">
<linktarget COLOR="#a9b4c1" DESTINATION="ID_1351680476" ENDARROW="Default" ENDINCLINATION="105;7;" ID="Arrow_ID_1208887635" SOURCE="ID_534914797" STARTARROW="None" STARTINCLINATION="5;59;"/>
<icon BUILTIN="yes"/>
<node COLOR="#5b280f" CREATED="1734658373113" ID="ID_1386239021" MODIFIED="1734658387775" TEXT="void oder ein Marker-Typ ist ungeschickt">
@ -92707,8 +92688,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<font color="#776767" face="Monospaced" size="2">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&gt;;</font>
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1734724295810" ID="ID_428285059" LINK="#ID_1528000432" MODIFIED="1734724429576" TEXT="dokumentiert in NodeBase_test::verify_FeedPrototype()">
@ -92752,8 +92732,21 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1734642990109" ID="ID_182746911" MODIFIED="1734643009042" TEXT="nicht konfigurierbar, aber generell brauchbar &#x27f9; immer aktiviert"/>
</node>
</node>
<node COLOR="#435e98" CREATED="1734737262744" ID="ID_436769976" MODIFIED="1734737512181" TEXT="Nachtrag: Name bleibt buildFeed()">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...das war der Name im Prototyping-Entwurf, und der ist viel besser!
</p>
</body>
</html>
</richcontent>
<linktarget COLOR="#574bd8" DESTINATION="ID_436769976" ENDARROW="Default" ENDINCLINATION="96;267;" ID="Arrow_ID_1852811022" SOURCE="ID_417738434" STARTARROW="None" STARTINCLINATION="710;0;"/>
<icon BUILTIN="yes"/>
</node>
<node COLOR="#338800" CREATED="1734572530013" ID="ID_765842112" MODIFIED="1734674037652" TEXT="dynamische quer-Builder hinzuf&#xfc;gen">
</node>
<node COLOR="#338800" CREATED="1734572530013" FOLDED="true" ID="ID_765842112" MODIFIED="1734674037652" TEXT="dynamische quer-Builder hinzuf&#xfc;gen">
<icon BUILTIN="button_ok"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1734673756235" ID="ID_1413443497" MODIFIED="1734673778817" TEXT="hier gibt es leider wenig Spielraum">
<icon BUILTIN="smily_bad"/>
@ -92786,6 +92779,26 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1734756146994" HGAP="-24" ID="ID_944942388" MODIFIED="1734756335186" TEXT="Fazit" VSHIFT="15">
<icon BUILTIN="forward"/>
<node BACKGROUND_COLOR="#ded0b2" CREATED="1734756158919" ID="ID_1638598398" MODIFIED="1734756319781" STYLE="fork">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
<b>FeedPrototype</b>&#160;wird zur Gelenkstelle zum WeavingPatternBuilder
</p>
</body>
</html></richcontent>
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
</node>
<node BACKGROUND_COLOR="#ded0b2" CREATED="1734756194958" ID="ID_257953186" MODIFIED="1734756319785" STYLE="fork" TEXT="und damit auch zum eigentlichen Front-Interface f&#xfc;r die Feed-Manifold">
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
</node>
<node BACKGROUND_COLOR="#ded0b2" CREATED="1734756220534" ID="ID_67323325" MODIFIED="1734756319785" STYLE="fork" TEXT="alle f&#xfc;r au&#xdf;en relevante Typ-Steuerung ist hier zusammengefa&#xdf;t">
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1734645843309" ID="ID_860706642" MODIFIED="1734727655759" TEXT="im Test-Setup pr&#xfc;fen">
<linktarget COLOR="#5fa963" DESTINATION="ID_860706642" ENDARROW="Default" ENDINCLINATION="-580;71;" ID="Arrow_ID_581949487" SOURCE="ID_1506431608" STARTARROW="None" STARTINCLINATION="-475;32;"/>
@ -92794,7 +92807,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<linktarget COLOR="#3490d0" DESTINATION="ID_1561585107" ENDARROW="Default" ENDINCLINATION="-19;-46;" ID="Arrow_ID_1276202297" SOURCE="ID_1442022066" STARTARROW="None" STARTINCLINATION="-184;12;"/>
<icon BUILTIN="info"/>
</node>
<node COLOR="#338800" CREATED="1734657891873" ID="ID_691202560" MODIFIED="1734674191310" TEXT="FeedPrototype erstellen">
<node COLOR="#338800" CREATED="1734657891873" FOLDED="true" ID="ID_691202560" MODIFIED="1734674191310" TEXT="FeedPrototype erstellen">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1734657925045" ID="ID_189910811" MODIFIED="1734670798593" STYLE="fork" TEXT="FeedManifold ohne Parameter-Funktor">
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
@ -92841,8 +92854,174 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734739984644" HGAP="-128" ID="ID_366268182" MODIFIED="1734755313572" TEXT="Typ-Anpassungen aus dem Umbau der FeedManifold" VSHIFT="6">
<linktarget COLOR="#fe1573" DESTINATION="ID_366268182" ENDARROW="Default" ENDINCLINATION="-1176;63;" ID="Arrow_ID_39556747" SOURCE="ID_86160844" STARTARROW="None" STARTINCLINATION="-112;6;"/>
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#ecdbc7" CREATED="1734740397311" ID="ID_1507739045" MODIFIED="1734740758439" STYLE="fork">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
<b><font color="#5e1be8">FeedPrototype</font></b>&#160;wird zentraler Konfigurationspunkt
</p>
</body>
</html></richcontent>
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<arrowlink COLOR="#3924a1" DESTINATION="ID_225480799" ENDARROW="Default" ENDINCLINATION="42;177;" ID="Arrow_ID_1550271356" STARTARROW="None" STARTINCLINATION="202;11;"/>
<icon BUILTIN="forward"/>
</node>
<node COLOR="#338800" CREATED="1734196584853" ID="ID_1949228582" MODIFIED="1734725638131" TEXT="Anordnung des Parameters f&#xfc;r den Param-Funktor bedenken">
<node BACKGROUND_COLOR="#ecdbc7" CREATED="1734740425977" ID="ID_1072899311" MODIFIED="1734740534078">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
&#171;<font color="#721f3c"><b>InvocationAdapter</b></font>&#187; ist nun stets die <b><font color="#4a0ddb">FeedManifold</font></b>
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="forward"/>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1734740640102" ID="ID_1102101096" MODIFIED="1734755323681" TEXT="kein direkter Zugriff auf FunSpec / _ProcFun oder sonstige Typ-Logik">
<icon BUILTIN="yes"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1734740686846" ID="ID_1300454170" MODIFIED="1734755332494" TEXT="es gibt keinen einheitlichen Buffer-Typ mehr">
<icon BUILTIN="yes"/>
<node COLOR="#338800" CREATED="1734743815124" ID="ID_712364667" MODIFIED="1734755025852">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
Output-Buffer-Typ-Default
</p>
<p>
mu&#223; <i>von unten</i>&#160;kommen
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="button_ok"/>
<node CREATED="1734743847378" ID="ID_1975400845" LINK="#ID_1418298495" MODIFIED="1734743941822" TEXT="die aktuelle &quot;fillRemaining&quot;-L&#xf6;sung war blo&#xdf;e Verlegenheit">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
hatte im Juli 24 noch keinerlei Durchblick und ging au&#223;erdem davon aus, direkt auf den Ergebnis-Daten in lib::SeveralBuilder zu arbeiten; daher der Ansatz mit<i>&#160;&quot;Einf&#252;llen&quot;</i>
</p>
</body>
</html></richcontent>
</node>
<node BACKGROUND_COLOR="#bfa58b" COLOR="#690f14" CREATED="1734744373494" ID="ID_924117375" MODIFIED="1734754860760" TEXT="auch die Buffer-Typ-Konfiguration war zun&#xe4;chst eine Platzhalter-L&#xf6;sung">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Im Gegensatz zur Konfiguration der Lead-Ports ist diese ganze Buffer-Belegungs-Thematik weitgehend undifferenziert &#8212; es ist nur klar da&#223; wir<i>&#160;von irgendwoher</i>&#160;einen Buffer brauchen, und da&#223; es typisierte BufferDeskcriptoren gibt. Also hatte ich seinerzeit (Juli 24) die Behandlung symmetrisch zur Eingangs-Seite aufgezogen, und erst mal eine default-Konfiguration f&#252;r jeden &#187;Slot&#171; gemacht. Dann, mit dem Umbau der FeedManifold (Dezember 24) ergab sich M&#246;glichkeit (und Notwendigkeit), jeden Ausgabe-Slot individuell zu konfigurieren
</p>
</body>
</html></richcontent>
<linktarget COLOR="#5b7ac1" DESTINATION="ID_924117375" ENDARROW="Default" ENDINCLINATION="1282;53;" ID="Arrow_ID_566375103" SOURCE="ID_957156267" STARTARROW="None" STARTINCLINATION="808;78;"/>
</node>
<node COLOR="#5b280f" CREATED="1734744937049" ID="ID_1909306161" MODIFIED="1734754947123" TEXT="erst mal lediglich den Status-quo flicken">
<icon BUILTIN="yes"/>
<icon BUILTIN="button_cancel"/>
<node CREATED="1734746265743" ID="ID_759984686" MODIFIED="1734747727230" TEXT="Prototype k&#xf6;nnte den Typ per Index liefern"/>
<node COLOR="#5b280f" CREATED="1734747732398" ID="ID_103345690" MODIFIED="1734748739864" TEXT="aua: das ist eine compile-Time-Iteration">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
diese Schachtel m&#246;chte ich nicht nach au&#223;en aufmachen...
</p>
</body>
</html>
</richcontent>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1734747837427" ID="ID_1236798413" MODIFIED="1734748747436" TEXT="dann bietet der Prototyp eben interne Iteration">
<icon BUILTIN="stop-sign"/>
</node>
<node BACKGROUND_COLOR="#ebd9ce" COLOR="#d10115" CREATED="1734748750112" ID="ID_463171953" MODIFIED="1734754826717" TEXT="Hier bricht mir die Abstraktions-Barriere zusammen &#xd83d;&#xddf1;">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Ich m&#246;chte definitiv nicht
</p>
<ul>
<li>
da&#223; auch nur der WeavingBuilder noch direkt mit der Typ-Repr&#228;sentation der FeedManifold herumfummelt
</li>
<li>
ich m&#246;chte aber auch nicht, da&#223; der FeedPrototype nun ma&#223;geschneiderte Daten f&#252;r die Interna eines WeavingBuilders liefert
</li>
</ul>
</body>
</html>
</richcontent>
</node>
<node COLOR="#338800" CREATED="1734748860873" ID="ID_130759425" MODIFIED="1734754850113" TEXT="Descriptor-Tupel instantiieren lassen">
<icon BUILTIN="button_ok"/>
<node CREATED="1734748874360" ID="ID_291699664" MODIFIED="1734748892895" TEXT="die ElmTypes&lt;TUP&gt;::Apply">
<icon BUILTIN="idea"/>
</node>
<node CREATED="1734748894805" ID="ID_122538121" MODIFIED="1734748918382" TEXT="Prototype liefert den Typkonstruktor"/>
<node CREATED="1734750716869" ID="ID_1925782342" MODIFIED="1734750737271" TEXT="Builder Logik &#x27f6; in Descriptor"/>
</node>
<node COLOR="#338800" CREATED="1734753544696" ID="ID_1481310555" MODIFIED="1734754867627" TEXT="mu&#xdf; dann gleich im Konstruktor alle BufferTypes einf&#xfc;llen">
<linktarget COLOR="#593747" DESTINATION="ID_1481310555" ENDARROW="Default" ENDINCLINATION="437;22;" ID="Arrow_ID_815194962" SOURCE="ID_1707049286" STARTARROW="None" STARTINCLINATION="532;34;"/>
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#0e4f6e" CREATED="1734754869884" HGAP="-77" ID="ID_413371366" MODIFIED="1734754928383" STYLE="bubble" TEXT="also gleich die Grundlage f&#xfc;r die endg&#xfc;lige L&#xf6;sung gelegt" VSHIFT="12">
<icon BUILTIN="yes"/>
</node>
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1734754964128" HGAP="58" ID="ID_591842684" MODIFIED="1734755017986" VSHIFT="16">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
<u>L&#246;sung</u>: Iteration &#252;ber ein Buffer-Descriptor-Tupel
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="forward"/>
</node>
<node BACKGROUND_COLOR="#dfc1e7" COLOR="#5c4d6e" CREATED="1734743957986" ID="ID_25025378" MODIFIED="1734743976965" STYLE="fork" TEXT="Sp&#xe4;tere Erweiterungen">
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="bell"/>
<node CREATED="1734743983146" ID="ID_1442904698" LINK="#ID_379831076" MODIFIED="1734744039627" TEXT="Behandlung von In/Out-Buffern...">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Hat noch so einige T&#252;cken, wiewohl es <i>im Prinzip einfach</i>&#160;ist
</p>
</body>
</html></richcontent>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1734744072910" ID="ID_1939738477" MODIFIED="1734744776833" TEXT="Einzel-Konfiguration">
<arrowlink COLOR="#924ccf" DESTINATION="ID_800449027" ENDARROW="Default" ENDINCLINATION="-824;-50;" ID="Arrow_ID_1221055966" STARTARROW="None" STARTINCLINATION="31;237;"/>
<node CREATED="1734744081845" ID="ID_370055573" MODIFIED="1734744085072" TEXT="Cache"/>
<node CREATED="1734744086332" ID="ID_1957562277" MODIFIED="1734744092621" TEXT="Konstruktor-Funktionen"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1721238837562" HGAP="148" ID="ID_1315577261" MODIFIED="1734745206672" STYLE="bubble" TEXT="ungel&#xf6;st: Konfiguration Output-Buffer" VSHIFT="44">
<edge COLOR="#ff5d00" STYLE="sharp_linear"/>
<arrowlink COLOR="#fe512a" DESTINATION="ID_515736718" ENDARROW="Default" ENDINCLINATION="1101;-48;" ID="Arrow_ID_789124503" STARTARROW="None" STARTINCLINATION="-815;60;"/>
<icon BUILTIN="bell"/>
<node CREATED="1721239003353" ID="ID_478046709" MODIFIED="1734745221459" STYLE="fork" TEXT="Was kann hier &#xfc;berhaupt erm&#xf6;glicht werden?">
<font NAME="SansSerif" SIZE="8"/>
</node>
<node CREATED="1721239003353" ID="ID_1586584925" MODIFIED="1734745246318" STYLE="fork" TEXT="Einbinden in das Builder-Schema">
<font NAME="SansSerif" SIZE="8"/>
</node>
</node>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1734196584853" FOLDED="true" ID="ID_1949228582" MODIFIED="1734730305598" TEXT="Anordnung des Parameters f&#xfc;r den Param-Funktor bedenken">
<icon BUILTIN="button_ok"/>
<node CREATED="1734196602500" ID="ID_1286582916" MODIFIED="1734196617685" TEXT="er sollte von der Funktion separierbar sein"/>
<node CREATED="1734196618969" ID="ID_640106632" MODIFIED="1734196896465" TEXT="oder alternativ komplett von der Funktion abgeleitet">
@ -92860,8 +93039,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
die interne Logik ist so aufgebaut, da&#223; sie sich dann durchgehend korrekt verh&#228;lt, ohne da&#223; daf&#252;r viel getan werden m&#252;&#223;te; es mu&#223; lediglich eine Funktion sein, und kein brauchbares Ergebnis liefern
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<icon BUILTIN="idea"/>
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1734282837578" ID="ID_151535815" MODIFIED="1734725749337" TEXT="Problem mit den Konstruktor-Argumenten gel&#xf6;st">
@ -92903,6 +93081,17 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734738688196" ID="ID_1867270027" MODIFIED="1734739657681" TEXT="Port/Weving-Builder mu&#xdf; nun Prototype-cross-Builder unterst&#xfc;tzen">
<linktarget COLOR="#f12245" DESTINATION="ID_1867270027" ENDARROW="Default" ENDINCLINATION="-744;28;" ID="Arrow_ID_569480662" SOURCE="ID_156789117" STARTARROW="None" STARTINCLINATION="-707;32;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1734738803365" ID="ID_764351741" MODIFIED="1734738888811" TEXT="das realisiert dann die Einbindung von Parameter-Funktoren">
<arrowlink COLOR="#4546d4" DESTINATION="ID_1166367446" ENDARROW="Default" ENDINCLINATION="-4;229;" ID="Arrow_ID_698609212" STARTARROW="None" STARTINCLINATION="62;-202;"/>
<icon BUILTIN="info"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734739489040" ID="ID_1376996024" MODIFIED="1734739503822" TEXT="&#xc4;nderung: Prototype halten anstelle der Processing-Function">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#338800" CREATED="1734132967020" ID="ID_1354544776" MODIFIED="1734727643658" TEXT="Param-Tuple in FeedManifold aufnehmen">
<linktarget COLOR="#a06e80" DESTINATION="ID_1354544776" ENDARROW="Default" ENDINCLINATION="-1058;-56;" ID="Arrow_ID_501116604" SOURCE="ID_1350706165" STARTARROW="None" STARTINCLINATION="1136;60;"/>
@ -92924,7 +93113,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="button_ok"/>
</node>
</node>
<node COLOR="#338800" CREATED="1734300380799" ID="ID_782708625" MODIFIED="1734726394522" TEXT="dann die Erweiterung auf strukturierte Typen dazunehmen">
<node COLOR="#338800" CREATED="1734300380799" FOLDED="true" ID="ID_782708625" MODIFIED="1734726394522" TEXT="dann die Erweiterung auf strukturierte Typen dazunehmen">
<icon BUILTIN="button_ok"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1734397892641" ID="ID_23248062" MODIFIED="1734725813775" TEXT="praktisch-technisch m&#xfc;hsam...">
<icon BUILTIN="clanbomber"/>
@ -93143,7 +93332,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1734480964996" ID="ID_806319334" MODIFIED="1734726404832" TEXT="schrittweise auf komplexere Signaturen erweitern">
<node COLOR="#338800" CREATED="1734480964996" FOLDED="true" ID="ID_806319334" MODIFIED="1734726404832" TEXT="schrittweise auf komplexere Signaturen erweitern">
<icon BUILTIN="button_ok"/>
<node BACKGROUND_COLOR="#ecefbc" COLOR="#435e98" CREATED="1734483925269" FOLDED="true" ID="ID_1086476352" MODIFIED="1734726382372" TEXT="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;"/>
@ -93302,7 +93491,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
<node COLOR="#338800" CREATED="1734133400400" ID="ID_1364724277" MODIFIED="1734726554241" TEXT="zus&#xe4;tzlichen Funktor f&#xfc;r die Parameter akzeptieren">
<arrowlink COLOR="#c0023e" DESTINATION="ID_1127056731" ENDARROW="Default" ENDINCLINATION="-1257;-48;" ID="Arrow_ID_1717201620" STARTARROW="None" STARTINCLINATION="-908;50;"/>
<arrowlink COLOR="#0299c0" DESTINATION="ID_1127056731" ENDARROW="Default" ENDINCLINATION="-1257;-48;" ID="Arrow_ID_1717201620" STARTARROW="None" STARTINCLINATION="-908;50;"/>
<icon BUILTIN="button_ok"/>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1734562038955" ID="ID_692448245" MODIFIED="1734726547060" TEXT="Aufruf-Situation bedenken">
<linktarget COLOR="#5958a8" DESTINATION="ID_692448245" ENDARROW="Default" ENDINCLINATION="-2;-498;" ID="Arrow_ID_1679356815" SOURCE="ID_512213705" STARTARROW="None" STARTINCLINATION="-480;46;"/>
@ -93448,6 +93637,285 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734133474862" ID="ID_1734639141" MODIFIED="1734133509736" TEXT="MediaWeavingPattern intern anpassen">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734730549338" ID="ID_979346169" MODIFIED="1734755806023" TEXT="Schwenk auf die neue Architektur">
<icon BUILTIN="pencil"/>
<node CREATED="1734730561471" ID="ID_645384678" MODIFIED="1734732327705">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
<u>Strategie</u>: w&#228;hrend des Umbaues den alten downstream-Code compilierbar gehalten
</p>
</body>
</html>
</richcontent>
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
und zwar, indem ich zun&#228;chst die Type-Traits umgestellt habe, und dann den alten Code auf das neue Traits-Inteface portiert. Damit konnte ich die alte Implementierung der FeedManifold (als &quot;FoldManifeed&quot; &#9786;) im Code erhalten &#8212; und alles was darunter h&#228;ngt...
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="info"/>
</node>
<node CREATED="1734730703285" ID="ID_1632513810" MODIFIED="1734732313042" TEXT="Prinzip der Umstellung">
<icon BUILTIN="yes"/>
<node CREATED="1734730723971" ID="ID_1379572885" MODIFIED="1734730743133" TEXT="neuerdings: FeedManifold &#x2259; InvocationAdapter">
<node CREATED="1734730752591" ID="ID_1259576927" MODIFIED="1734730758196" TEXT="SimpleFunctionInvocationAdapter mu&#xdf; wegfallen"/>
<node CREATED="1734730759481" ID="ID_592575953" MODIFIED="1734730770925" TEXT="die damit gegebenen Konfigurationsm&#xf6;glichkeiten zur&#xfc;ckbauen"/>
<node CREATED="1734730780163" ID="ID_1229517207" MODIFIED="1734730827931" TEXT="Einbindungs-Punkt: DirectFunctionInvocation">
<arrowlink DESTINATION="ID_1622390528" ENDARROW="Default" ENDINCLINATION="65;0;" ID="Arrow_ID_861299052" STARTARROW="None" STARTINCLINATION="65;0;"/>
</node>
</node>
<node CREATED="1734730798711" ID="ID_438948851" MODIFIED="1734730809842" TEXT="neuerdings: es gibt einen FeedPrototype">
<node CREATED="1734730812123" ID="ID_1622390528" MODIFIED="1734740250188" TEXT="dieser &#xfc;bernimmt nun die Rolle der DirectFunctionInvocation">
<arrowlink COLOR="#493bce" DESTINATION="ID_1540451" ENDARROW="Default" ENDINCLINATION="-250;-95;" ID="Arrow_ID_1514499146" STARTARROW="None" STARTINCLINATION="-259;12;"/>
<linktarget COLOR="#a9b4c1" DESTINATION="ID_1622390528" ENDARROW="Default" ENDINCLINATION="65;0;" ID="Arrow_ID_861299052" SOURCE="ID_1229517207" STARTARROW="None" STARTINCLINATION="65;0;"/>
</node>
<node CREATED="1734730831628" ID="ID_1789451874" MODIFIED="1734730850270" TEXT="weitere Funktionen dieser (im Besonderen: Konfiguration) ist zur&#xfc;ckzubauen"/>
</node>
</node>
<node CREATED="1734730888436" ID="ID_1972449380" MODIFIED="1734732308938" TEXT="Ansatzpunkt: Verwendungen der DirectFunctionInvocation">
<icon BUILTIN="idea"/>
<node CREATED="1734730932527" ID="ID_722673954" MODIFIED="1734730941697" TEXT="im weaving-pattern-builder.hpp">
<node CREATED="1734730948141" ID="ID_313017216" MODIFIED="1734730970062" TEXT="SimpleDirectInvoke = MediaWeavingPattern&lt;DirectFunctionInvocation&lt;FUN&gt;&gt;"/>
<node CREATED="1734730988511" ID="ID_323672271" MODIFIED="1734731001329" TEXT="nur eine einzige Verwendung wenige Zeilen darunter: im WeavingBuilder"/>
</node>
<node CREATED="1734731013292" ID="ID_1739494059" MODIFIED="1734731049860" TEXT="Konsequenz: DirectFunctionInvocation &#x2261; INVO im MediaWeavingPattern"/>
</node>
<node CREATED="1734731085818" ID="ID_815034881" MODIFIED="1734731091960" TEXT="Schritte">
<node COLOR="#435e98" CREATED="1734731093345" ID="ID_1788687876" MODIFIED="1734738422927" TEXT="Alle Verwendungen von INVO durchgehen">
<icon BUILTIN="full-1"/>
<node CREATED="1734731825070" ID="ID_380614864" MODIFIED="1734738412305" TEXT="INVO::Feed">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1734731832133" ID="ID_1982454907" MODIFIED="1734736979545" TEXT="Typedef bereitgestellt: in FeedPrototype">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#435e98" CREATED="1734731848926" ID="ID_1554312754" MODIFIED="1734737186614" TEXT="&#xbb;Concept&#xab; : _verify_usable_as_InvocationAdapter&lt;Feed&gt;()"/>
</node>
<node CREATED="1734731906835" ID="ID_1165145548" MODIFIED="1734738412304" TEXT="mount() : &#x27f6; INVO::buildFeed()">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1734731940717" ID="ID_417738434" MODIFIED="1734737584928" TEXT="Funktion existiert weiterhin mit erwarteter Semantik">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Haha! Nur ist das jetzt eines der zentralen Gelenkstellen im FeedPrototype geworden &#8212; oh oh oh wenn das alles blo&#223; nicht so spannend w&#228;re, k&#246;nnte man ja glatt anderen Leuten davon erz&#228;hlen
</p>
</body>
</html>
</richcontent>
<arrowlink COLOR="#574bd8" DESTINATION="ID_436769976" ENDARROW="Default" ENDINCLINATION="96;267;" ID="Arrow_ID_1852811022" STARTARROW="None" STARTINCLINATION="710;0;"/>
<icon BUILTIN="ksmiletris"/>
</node>
<node COLOR="#435e98" CREATED="1734732014891" ID="ID_1963549744" MODIFIED="1734737574802" TEXT="braucht jetzt aber ein TurnoutSystem&amp;">
<icon BUILTIN="yes"/>
<node COLOR="#435e98" CREATED="1734732042578" ID="ID_170721207" MODIFIED="1734737588447" TEXT="Anpassung &#xbb;Concept&#xab; WeavingPattern"/>
<node COLOR="#435e98" CREATED="1734732055215" ID="ID_1301577880" MODIFIED="1734737589932" TEXT="Anpassung MediaWeavingPattern"/>
</node>
</node>
<node CREATED="1734732081635" ID="ID_1049404245" MODIFIED="1734738412304" TEXT="Assertion in fix() &#x27f6; MAX_SIZE">
<icon BUILTIN="button_ok"/>
<node CREATED="1734732114943" ID="ID_218241193" MODIFIED="1734732159540" TEXT="rein formal: diese Gr&#xf6;&#xdf;e gibt es nicht mehr">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
ich habe die Einbindung in ein fixed-size-Array der Gr&#246;&#223;e N komplett aufgegeben, zugunsten einer flexiblen, Tuple-basierten Storage
</p>
</body>
</html>
</richcontent>
</node>
<node COLOR="#338800" CREATED="1734732101982" ID="ID_1277186217" MODIFIED="1734738065499" TEXT="die Pr&#xfc;fung k&#xf6;nnte versch&#xe4;frt werden">
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1734732200427" ID="ID_1314236081" MODIFIED="1734738069350" TEXT="dann m&#xfc;&#xdf;te der Prototype die FAN_* - Konstanten durchschleifen"/>
<node COLOR="#435e98" CREATED="1734737840950" ID="ID_745750671" MODIFIED="1734738072559" TEXT="alle Schleifen-Grenzen w&#xe4;ren dann verifizierbar">
<node COLOR="#338800" CREATED="1734738075422" HGAP="18" ID="ID_1254439504" MODIFIED="1734738372777" TEXT="in mount()" VSHIFT="8">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1734738091300" ID="ID_1120002405" MODIFIED="1734738362946" TEXT="alle Schleifen manuell auf Konsistenz durchgesehen">
<linktarget COLOR="#52f243" DESTINATION="ID_1120002405" ENDARROW="Default" ENDINCLINATION="-53;3;" ID="Arrow_ID_228661865" SOURCE="ID_1893152703" STARTARROW="None" STARTINCLINATION="78;-49;"/>
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#5b280f" CREATED="1734738121672" ID="ID_1779526146" MODIFIED="1734738131226" TEXT="izip() ist hier nicht sinnvoll">
<icon BUILTIN="button_cancel"/>
</node>
</node>
</node>
</node>
<node CREATED="1734737728205" ID="ID_346301900" MODIFIED="1734738412304" TEXT="Operationen auf feed">
<icon BUILTIN="button_ok"/>
<node COLOR="#235f81" CREATED="1734737761997" ID="ID_1893152703" MODIFIED="1734738386143" TEXT="Buffer-Array-Operationen">
<arrowlink COLOR="#52f243" DESTINATION="ID_1120002405" ENDARROW="Default" ENDINCLINATION="-53;3;" ID="Arrow_ID_228661865" STARTARROW="None" STARTINCLINATION="78;-49;"/>
<node COLOR="#435e98" CREATED="1734738228710" ID="ID_761822447" MODIFIED="1734738261929" TEXT="verwende weiterhin UninitialisedStorage">
<icon BUILTIN="info"/>
</node>
<node COLOR="#338800" CREATED="1734738267205" ID="ID_442236075" MODIFIED="1734738313637" TEXT="Subscript">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1734738272012" ID="ID_1664233259" MODIFIED="1734738313637" TEXT="createAt">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node COLOR="#338800" CREATED="1734753915758" ID="ID_1269209288" MODIFIED="1734753965351" TEXT="hasInput()-Guard f&#xfc;r Zugriffe auf inBuff ">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1734738286914" ID="ID_476400061" MODIFIED="1734738310607" TEXT="connect() : Parameter fallen weg">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1734738297615" ID="ID_1138840069" MODIFIED="1734738310607" TEXT="invoke()">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node CREATED="1734732245013" ID="ID_202344901" MODIFIED="1734739666626" TEXT="INVO-Konstruktur-Delegation">
<arrowlink COLOR="#606872" DESTINATION="ID_533282289" ENDARROW="Default" ENDINCLINATION="-44;2;" ID="Arrow_ID_473003071" STARTARROW="None" STARTINCLINATION="-18;13;"/>
<icon BUILTIN="button_ok"/>
</node>
</node>
<node COLOR="#435e98" CREATED="1734731121493" ID="ID_620770826" MODIFIED="1734754350499" TEXT="Konstruktor DirectFunctionInvocation &#x27f6; neues Builder-API">
<icon BUILTIN="full-2"/>
<node BACKGROUND_COLOR="#ddd0b6" CREATED="1734731288131" HGAP="24" ID="ID_533282289" MODIFIED="1734739666626" TEXT="das ist ein Argument Pass-through im MediaWeavingPattern" VSHIFT="1">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
alle Argumente ab dem 4.Argument gehen pauschal durch an INVO
</p>
</body>
</html>
</richcontent>
<linktarget COLOR="#606872" DESTINATION="ID_533282289" ENDARROW="Default" ENDINCLINATION="-44;2;" ID="Arrow_ID_473003071" SOURCE="ID_202344901" STARTARROW="None" STARTINCLINATION="-18;13;"/>
<icon BUILTIN="idea"/>
</node>
<node CREATED="1734731328588" ID="ID_1968031099" MODIFIED="1734731355183" TEXT="&#x27f9; Aufrufe des MediaWeavingPattern-ctors aufsuchen">
<node COLOR="#435e98" CREATED="1734738537192" ID="ID_1339234784" MODIFIED="1734738652038" TEXT="Schritt-1 : nichts zu tun">
<icon BUILTIN="yes"/>
<node CREATED="1734738579444" ID="ID_240230421" MODIFIED="1734738640094" TEXT="es wird lediglich der Processing-Functor per RValue &#xfc;bergeben">
<icon BUILTIN="info"/>
</node>
<node COLOR="#435e98" CREATED="1734738594328" ID="ID_960161975" MODIFIED="1734738644498" TEXT="das &#xfc;bersetzt sich 1:1 auf das neue API">
<icon BUILTIN="idea"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734738550502" ID="ID_156789117" MODIFIED="1734739657681" TEXT="Schritt-2 : cross-Builder-API in de Weaving-Builder hineinnehmen">
<arrowlink COLOR="#f12245" DESTINATION="ID_1867270027" ENDARROW="Default" ENDINCLINATION="-744;28;" ID="Arrow_ID_569480662" STARTARROW="None" STARTINCLINATION="-707;32;"/>
<icon BUILTIN="yes"/>
</node>
</node>
</node>
<node COLOR="#435e98" CREATED="1734754367664" ID="ID_62712804" MODIFIED="1734755554512" TEXT="Typ-Zugriffe im WeavingPatternBuilder vorl&#xe4;ufig schwenken">
<arrowlink COLOR="#46476c" DESTINATION="ID_86160844" ENDARROW="Default" ENDINCLINATION="-72;-50;" ID="Arrow_ID_245251166" STARTARROW="None" STARTINCLINATION="-128;6;"/>
<icon BUILTIN="full-3"/>
<node CREATED="1734754525235" ID="ID_247981581" MODIFIED="1734754613970" TEXT="Port- und WeavingPattern-Typ neu aufbauen">
<arrowlink COLOR="#4765ac" DESTINATION="ID_1540451" ENDARROW="Default" ENDINCLINATION="91;0;" ID="Arrow_ID_48125158" STARTARROW="None" STARTINCLINATION="124;8;"/>
</node>
<node CREATED="1734754549736" ID="ID_195598062" MODIFIED="1734754677451" TEXT="Direkt-Zugriffe via FunSpec &#x27f6; _FunSpec&lt;FUN&gt; stillegen">
<arrowlink COLOR="#853658" DESTINATION="ID_1707049286" ENDARROW="Default" ENDINCLINATION="-171;10;" ID="Arrow_ID_1775048050" STARTARROW="None" STARTINCLINATION="-4;72;"/>
</node>
</node>
<node COLOR="#435e98" CREATED="1734731190526" ID="ID_136921376" MODIFIED="1734755557544" TEXT="NodeLinkage_test wieder zum Laufen bekommen">
<icon BUILTIN="full-4"/>
<node BACKGROUND_COLOR="#dee8ae" COLOR="#116b3a" CREATED="1734755559673" HGAP="37" ID="ID_1731960603" MODIFIED="1734755679627" TEXT="L&#xe4;uft AUF ANHIEB!!!!" VSHIFT="23">
<font NAME="SansSerif" SIZE="16"/>
<icon BUILTIN="ksmiletris"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734731202514" ID="ID_302715819" MODIFIED="1734754497522" TEXT="obsoleten Code wegr&#xe4;umen">
<icon BUILTIN="full-5"/>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734739954996" ID="ID_86160844" MODIFIED="1734755367231" TEXT="Typ-Anpassungen in den Weaving-Builder &#xfc;bernehmen">
<arrowlink COLOR="#fe1573" DESTINATION="ID_366268182" ENDARROW="Default" ENDINCLINATION="-1176;63;" ID="Arrow_ID_39556747" STARTARROW="None" STARTINCLINATION="-112;6;"/>
<linktarget COLOR="#46476c" DESTINATION="ID_86160844" ENDARROW="Default" ENDINCLINATION="-72;-50;" ID="Arrow_ID_245251166" SOURCE="ID_62712804" STARTARROW="None" STARTINCLINATION="-128;6;"/>
<icon BUILTIN="pencil"/>
<node CREATED="1734740175883" ID="ID_1540451" MODIFIED="1734754608354" TEXT="FeedPrototype explizit als Einstiegspunkt in das WeavingPattern">
<linktarget COLOR="#493bce" DESTINATION="ID_1540451" ENDARROW="Default" ENDINCLINATION="-250;-95;" ID="Arrow_ID_1514499146" SOURCE="ID_1622390528" STARTARROW="None" STARTINCLINATION="-259;12;"/>
<linktarget COLOR="#4765ac" DESTINATION="ID_1540451" ENDARROW="Default" ENDINCLINATION="91;0;" ID="Arrow_ID_48125158" SOURCE="ID_247981581" STARTARROW="None" STARTINCLINATION="124;8;"/>
</node>
<node CREATED="1734740131793" ID="ID_1426590563" MODIFIED="1734754683387" TEXT="einheitlicher Buffer-Typ f&#xe4;llt weg">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1734741263982" ID="ID_1209777361" MODIFIED="1734741275195" TEXT="bisher in fillRemainingBufferTypes">
<node CREATED="1734741312434" ID="ID_1820203884" MODIFIED="1734741318921" TEXT="wird vom NodeBuilder aktiviert"/>
<node CREATED="1734741320201" ID="ID_1346909971" MODIFIED="1734741333075" TEXT="im Terminal-Builder f&#xfc;r einen Port"/>
<node COLOR="#5b280f" CREATED="1734754641427" ID="ID_1707049286" MODIFIED="1734754745501" TEXT="das kann so nicht aufrechterhalten werden">
<arrowlink COLOR="#593747" DESTINATION="ID_1481310555" ENDARROW="Default" ENDINCLINATION="437;22;" ID="Arrow_ID_815194962" STARTARROW="None" STARTINCLINATION="532;34;"/>
<linktarget COLOR="#853658" DESTINATION="ID_1707049286" ENDARROW="Default" ENDINCLINATION="-171;10;" ID="Arrow_ID_1775048050" SOURCE="ID_195598062" STARTARROW="None" STARTINCLINATION="-4;72;"/>
<icon BUILTIN="button_cancel"/>
<node COLOR="#338800" CREATED="1734755381532" HGAP="36" ID="ID_530597463" MODIFIED="1734755543554" TEXT="Draft f&#xfc;r zuk&#xfc;nftige L&#xf6;sung" VSHIFT="18">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<ul>
<li>
der Prototype kann uns einen Tupel-Typ der Output-Buffer-Typen konstruieren
</li>
<li>
zus&#228;tzlich k&#246;nnen wir ElmTypes&lt;TUP&gt;::Apply verwenden
</li>
<li>
damit kann man lokal im WeavingPatternBuilder ein &#187;Handler-Template&#171; f&#252;r jeden Buffer-Typ instantiieren
</li>
<li>
in dieses k&#246;nen wir die lokale Builder-Logik einbauen
</li>
<li>
und darauf auch laufzeit-indiziert zugreifen
</li>
<li>
oder statisch iterieren
</li>
</ul>
</body>
</html></richcontent>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f44" CREATED="1734741417311" ID="ID_1418298495" MODIFIED="1734741448586" TEXT="Verdacht: das ist ein Rest der &#xbb;flexiblen Verdrahtung&#xab;">
<icon BUILTIN="broken-line"/>
<node CREATED="1734741453255" ID="ID_146334026" MODIFIED="1734741484253" TEXT="anfangs habe ich auf allen Ebenen komplette Flexibilit&#xe4;t angenommen"/>
<node CREATED="1734741487282" ID="ID_1358822496" MODIFIED="1734741507140" TEXT="das lie&#xdf; sich nicht durchf&#xfc;hren &#x27f9; Prototyp der default-1:1-Logik"/>
<node CREATED="1734741522110" ID="ID_374880863" MODIFIED="1734741566172" TEXT="zumindest Leads kann man weiterhin frei verkn&#xfc;pfen">
<icon BUILTIN="info"/>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1734741540818" ID="ID_225980611" MODIFIED="1734743180721" TEXT="das Thema in-Place-Processing (In/Out-Buffer) ist noch offen">
<linktarget COLOR="#fdead7" DESTINATION="ID_225980611" ENDARROW="Default" ENDINCLINATION="104;5;" ID="Arrow_ID_1123991300" SOURCE="ID_944567202" STARTARROW="None" STARTINCLINATION="8;-38;"/>
<icon BUILTIN="messagebox_warning"/>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1734741575767" ID="ID_200987217" MODIFIED="1734741594366" TEXT="wer legt denn aktuell &#xfc;berhaupt OutputBufer fest?">
<icon BUILTIN="help"/>
<node CREATED="1734741630300" ID="ID_1248093898" MODIFIED="1734741688785" TEXT="Verwendungen von WeavingBuilder::appendBufferTypes&lt;BU&gt;()">
<icon BUILTIN="idea"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1734741694015" ID="ID_1961490039" MODIFIED="1734741713018" TEXT="nur fillRemainingBufferTypes">
<icon BUILTIN="broken-line"/>
</node>
<node BACKGROUND_COLOR="#b4b7a6" COLOR="#1d6386" CREATED="1734741716148" ID="ID_87569359" LINK="#ID_1009592243" MODIFIED="1734743395514" TEXT="&#xd83d;&#xddf2; da ist mir wohl ein Thema vom Radar gefallen &#xd83d;&#xddf2;">
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="smiley-oh"/>
</node>
</node>
<node CREATED="1734742962876" ID="ID_944567202" MODIFIED="1734743189232" TEXT="In der Tat: das war eine Verlegenheits-L&#xf6;sung (15.Juli.24)">
<arrowlink COLOR="#f6dafe" DESTINATION="ID_1804383886" ENDARROW="Default" ENDINCLINATION="-566;-28;" ID="Arrow_ID_296461814" STARTARROW="None" STARTINCLINATION="-558;27;"/>
<arrowlink COLOR="#fdead7" DESTINATION="ID_225980611" ENDARROW="Default" ENDINCLINATION="104;5;" ID="Arrow_ID_1123991300" STARTARROW="None" STARTINCLINATION="8;-38;"/>
<icon BUILTIN="info"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1734743423398" ID="ID_632643203" MODIFIED="1734744187281" TEXT="man kann die Belegungs-Logik umkehren">
<arrowlink COLOR="#b26ae5" DESTINATION="ID_1153816518" ENDARROW="Default" ENDINCLINATION="-490;-485;" ID="Arrow_ID_1589251641" STARTARROW="None" STARTINCLINATION="-110;49;"/>
<icon BUILTIN="hourglass"/>
<node CREATED="1734743441120" ID="ID_206990539" MODIFIED="1734743457213" TEXT="da wir nun ohnehin im PortBuilder nur tempor&#xe4;re Daten (auf dem Heap) sammeln"/>
<node CREATED="1734743458657" ID="ID_697469321" MODIFIED="1734743472283" TEXT="...k&#xf6;nnen wir auch mit einem Default beginnen"/>
<node CREATED="1734743473607" ID="ID_1444235431" MODIFIED="1734743486801" TEXT="und Spezialisierungen dr&#xfc;ber schreiben"/>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734755784065" ID="ID_305162421" MODIFIED="1734755800119" TEXT="R&#xfc;ckbau und Dokumentation">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734133492043" ID="ID_901061219" MODIFIED="1734133509737" TEXT="ParamWeavingPattern hinzubauen">
<icon BUILTIN="flag-yellow"/>
@ -93709,7 +94177,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1721841712750" ID="ID_931617773" MODIFIED="1721841728142" TEXT="vorerst zur&#xfc;ckstellen &#x2014; aber im Blick behalten">
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1721841712750" ID="ID_931617773" MODIFIED="1734744450605" TEXT="vorerst zur&#xfc;ckstellen &#x2014; aber im Blick behalten">
<arrowlink COLOR="#673462" DESTINATION="ID_1197159760" ENDARROW="Default" ENDINCLINATION="304;-23;" ID="Arrow_ID_90127588" STARTARROW="None" STARTINCLINATION="-430;26;"/>
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/>
</node>
@ -93735,6 +94204,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
<node COLOR="#435e98" CREATED="1721842271062" ID="ID_957156267" MODIFIED="1728653995190" TEXT="zweite L&#xf6;sung gem&#xe4;&#xdf; YAGNI">
<arrowlink COLOR="#5b7ac1" DESTINATION="ID_924117375" ENDARROW="Default" ENDINCLINATION="1282;53;" ID="Arrow_ID_566375103" STARTARROW="None" STARTINCLINATION="808;78;"/>
<icon BUILTIN="yes"/>
</node>
</node>
@ -94831,6 +95301,43 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1721003681836" ID="ID_536010685" MODIFIED="1721061587708" TEXT="erst mal: Bulk-Konfig f&#xfc;r alle">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#5b280f" CREATED="1734742891965" ID="ID_1804383886" MODIFIED="1734743139622" TEXT="f&#xfc;r den ersten Prototyp: sinvolle Buffer-Descriptoren einf&#xfc;llen">
<linktarget COLOR="#f6dafe" DESTINATION="ID_1804383886" ENDARROW="Default" ENDINCLINATION="-566;-28;" ID="Arrow_ID_296461814" SOURCE="ID_944567202" STARTARROW="None" STARTINCLINATION="-558;27;"/>
<icon BUILTIN="button_cancel"/>
</node>
<node BACKGROUND_COLOR="#dfc1e7" COLOR="#5c4d6e" CREATED="1734743593695" ID="ID_1153816518" MODIFIED="1734744187281" TEXT="OutputBuffer / Typ - Konfiguration">
<linktarget COLOR="#b26ae5" DESTINATION="ID_1153816518" ENDARROW="Default" ENDINCLINATION="-490;-485;" ID="Arrow_ID_1589251641" SOURCE="ID_632643203" STARTARROW="None" STARTINCLINATION="-110;49;"/>
<icon BUILTIN="bell"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734743613671" ID="ID_1767689265" MODIFIED="1734743682641" TEXT="sollte zu Beginn gleich eingef&#xfc;llt werden">
<icon BUILTIN="yes"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734743627506" ID="ID_800449027" MODIFIED="1734744776833" TEXT="kann dann explizit &#xfc;berschrieben werden">
<linktarget COLOR="#924ccf" DESTINATION="ID_800449027" ENDARROW="Default" ENDINCLINATION="-824;-50;" ID="Arrow_ID_1221055966" SOURCE="ID_1939738477" STARTARROW="None" STARTINCLINATION="31;237;"/>
<icon BUILTIN="idea"/>
<node CREATED="1734743638683" ID="ID_1515860365" MODIFIED="1734743787868" TEXT="es sind Buffer-Builder-Functions">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
im <u>WeavingBuilder</u>:
</p>
<p>
<font color="#632d2d" face="Monospaced">using TypeMarker = std::function&lt;BuffDescr(BufferProvider&amp;)&gt;;</font>
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1734743650775" ID="ID_57586281" MODIFIED="1734743667773" TEXT="diese bekommen im Terminal_Builder dann den BufferProvider als Argument"/>
<node CREATED="1734744202981" ID="ID_1273136867" MODIFIED="1734744211178" TEXT="denkbare F&#xe4;lle:">
<icon BUILTIN="info"/>
<node CREATED="1734744213243" ID="ID_900293880" MODIFIED="1734744227813" TEXT="Caching // &#xe4;ndert vor allem den BufferProvider"/>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1734744229326" ID="ID_1197159760" MODIFIED="1734744450605" TEXT="Buffer-Konstruktor-Funktionen">
<linktarget COLOR="#673462" DESTINATION="ID_1197159760" ENDARROW="Default" ENDINCLINATION="304;-23;" ID="Arrow_ID_90127588" SOURCE="ID_931617773" STARTARROW="None" STARTINCLINATION="-430;26;"/>
<icon BUILTIN="hourglass"/>
</node>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1721061573297" ID="ID_1009592243" MODIFIED="1721061586060" TEXT="Variante: einzelne Buffer speziell konfigurieren">
<icon BUILTIN="hourglass"/>
@ -96216,7 +96723,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734141168279" ID="ID_1127056731" MODIFIED="1734141875620" TEXT="Pram-Funktor in den Builder einf&#xfc;hren">
<arrowlink COLOR="#d90755" DESTINATION="ID_284201304" ENDARROW="Default" ENDINCLINATION="428;-33;" ID="Arrow_ID_1685749535" STARTARROW="None" STARTINCLINATION="-2201;158;"/>
<linktarget COLOR="#c0023e" DESTINATION="ID_1127056731" ENDARROW="Default" ENDINCLINATION="-1257;-48;" ID="Arrow_ID_1717201620" SOURCE="ID_1364724277" STARTARROW="None" STARTINCLINATION="-908;50;"/>
<linktarget COLOR="#0299c0" DESTINATION="ID_1127056731" ENDARROW="Default" ENDINCLINATION="-1257;-48;" ID="Arrow_ID_1717201620" SOURCE="ID_1364724277" STARTARROW="None" STARTINCLINATION="-908;50;"/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
@ -99166,6 +99673,10 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#e2caa2" COLOR="#990000" CREATED="1729956600896" ID="ID_1648467568" MODIFIED="1729956915005" STYLE="fork" TEXT="Ergebnis">
<edge COLOR="#b14253" STYLE="sharp_linear"/>
<icon BUILTIN="edit"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1721238814245" ID="ID_515736718" MODIFIED="1734745206672" TEXT="Aufgabe: Port-Detail-Konfiguration">
<linktarget COLOR="#fe512a" DESTINATION="ID_515736718" ENDARROW="Default" ENDINCLINATION="1101;-48;" ID="Arrow_ID_789124503" SOURCE="ID_1315577261" STARTARROW="None" STARTINCLINATION="-815;60;"/>
<icon BUILTIN="bell"/>
</node>
</node>
<node BACKGROUND_COLOR="#c8b6c1" CREATED="1729963571896" HGAP="-82" ID="ID_780325179" MODIFIED="1729963839764" TEXT="Schablone" VSHIFT="23">
<edge COLOR="#be05a9"/>
@ -144581,8 +145092,7 @@ std::cout &lt;&lt; tmpl.render({&quot;what&quot;, &quot;World&quot;}) &lt;&lt; s
entscheiden
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<node CREATED="1734709157862" ID="ID_419823534" MODIFIED="1734709180745" TEXT="D1: Zieltyp ist konstruierbar aus Quelltyp"/>
<node CREATED="1734709181615" ID="ID_784490424" MODIFIED="1734709197025" TEXT="D2: Zieltyp ist per static_cast aus Quelltyp erzeugbar"/>
</node>
@ -144610,8 +145120,7 @@ std::cout &lt;&lt; tmpl.render({&quot;what&quot;, &quot;World&quot;}) &lt;&lt; s
Das bedeutet: ein Funktionspointer mit passender Signatur kann von einem &#955; initialisiert werden und kann dann die dahinter stehende Funktion aufrufen. <i>Vermutlich</i>&#160;als Kompatibilit&#228;t zu C-Callbacks gedacht....
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1734671154295" ID="ID_1953698300" LINK="https://stackoverflow.com/a/41721337/444796" MODIFIED="1734711708781" TEXT="das ist standardkonform: &#xa7;5.1.2">
<icon BUILTIN="idea"/>