Invocation: consider what is required to setup a FeedManifold

...and this line of analysis brings us deep into the ''Buffer Provider''
concept developed in 2012 — which appears to be very well to the point
and stands the test of time.

Adding some ''variadic arguments'' at the right place surprisingly leads
to an ''extension point'' — which in turn directly taps into the
still quite uncharted territory interfacing to a **Domain Ontology**;
the latter is assumed to define how to deal with entities and relationships
defined by some media handling library like e.g. FFmpeg.
So what we're set to do here is actually ''ontology mapping....''
This commit is contained in:
Fischlurch 2024-06-29 04:23:55 +02:00
parent 717af81986
commit 8c536fc637
12 changed files with 571 additions and 377 deletions

View file

@ -50,6 +50,7 @@
#include "steam/engine/buffer-local-key.hpp"
#include "lib/nocopy.hpp"
#include <utility>
#include <memory>
@ -58,6 +59,7 @@ namespace engine {
using lib::Literal;
using std::unique_ptr;
using std::forward;
class BufferMetadata;
@ -105,8 +107,8 @@ namespace engine {
void emitBuffer (BuffHandle const&);
void releaseBuffer (BuffHandle const&);
template<typename BU>
BuffHandle lockBufferFor ();
template<typename BU, typename...ARGS>
BuffHandle lockBufferFor (ARGS ...args);
/** allow for attaching and owing an object within an already created buffer */
void attachTypeHandler (BuffHandle const& target, BufferDescriptor const& reference);
@ -118,8 +120,8 @@ namespace engine {
BufferDescriptor getDescriptorFor(size_t storageSize=0);
BufferDescriptor getDescriptorFor(size_t storageSize, TypeHandler specialTreatment);
template<typename BU>
BufferDescriptor getDescriptor();
template<typename BU, typename...ARGS>
BufferDescriptor getDescriptor (ARGS ...args);
@ -146,11 +148,11 @@ namespace engine {
* buffer descriptor. The corresponding buffer
* has been allocated and marked for exclusive use
*/
template<typename BU>
template<typename BU, typename...ARGS>
BuffHandle
BufferProvider::lockBufferFor()
BufferProvider::lockBufferFor (ARGS ...args)
{
BufferDescriptor attach_object_automatically = getDescriptor<BU>();
BufferDescriptor attach_object_automatically = getDescriptor<BU> (forward<ARGS> (args)...);
return lockBuffer (attach_object_automatically);
}
@ -159,11 +161,11 @@ namespace engine {
* an instance of the template type embedded into the buffer
* and destroying that embedded object when releasing the buffer.
*/
template<typename BU>
template<typename BU, typename...ARGS>
BufferDescriptor
BufferProvider::getDescriptor()
BufferProvider::getDescriptor (ARGS ...args)
{
return getDescriptorFor (sizeof(BU), TypeHandler::create<BU>());
return getDescriptorFor (sizeof(BU), TypeHandler::create<BU> (forward<ARGS> (args)...));
}

View file

@ -52,7 +52,6 @@
#include "steam/mobject/parameter.hpp"
#include "steam/engine/state-closure-obsolete.hpp" /////////////////////////////////////////////////////////TICKET #1367 : Rebuild the Node Invocation
#include "steam/engine/channel-descriptor.hpp"
#include "steam/engine/turnout-system.hpp"
#include "lib/frameid.hpp"
#include "lib/ref-array.hpp"
@ -71,13 +70,6 @@ namespace engine {
typedef ProcNode* PNode;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1367 : Rebuild the Node Invocation
class Port
{
public:
virtual ~Port(); ///< this is an interface
virtual TurnoutSystem enactTurnout() =0;
};
/**
* Interface: Description of the input and output ports,

View file

@ -35,11 +35,10 @@
#include "lib/error.hpp"
#include "lib/nocopy.hpp"
#include "steam/engine/channel-descriptor.hpp"
#include "steam/engine/proc-node.hpp"
#include "lib/several.hpp"
#include <vector>
#include <utility>
//#include <utility>
////////////////////////////////TICKET #826 will be reworked alltogether
@ -61,134 +60,12 @@ namespace engine {
* thus the array of real buffer pointers can be fed directly to the
* processing function of the respective node.
*
* @todo this whole design is a first attempt and rather clumsy. It should be reworked
* to use a single contiguous memory area and just layer the object structure on top
* (by using placement new). Yet the idea of an stack-like organisation should be retained
* @todo WIP-WIP-WIP 7/24 now reworking the old design in the light of actual render engine requirements...
*/
struct FeedManifold
{
typedef BuffHandle * PHa;
typedef BuffHandle::PBuff * PBu;
typedef pair<PHa const,PBu const> Chunk;
PHa outHandle;
PHa inHandle;
PBu outBuff;
PBu inBuff;
};
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1367 : presumably obsolete
class BufferDescriptor;
/** Obsolete, to be rewritten /////TICKET #826 */
class BuffTableStorage
{
/////////////////////////////////////////////////////////////////////////TICKET #826 need to be reworked entirely
/** just a placeholder to decouple the existing code
* from the reworked BuffHandle logic. The existing
* code in turn will be reworked rather fundamentally
*/
struct BuffHaXXXX
: BuffHandle
{
BuffHaXXXX() : BuffHandle(just_satisfy_the_compiler()) { /* wont work ever */ }
static BufferDescriptor const&
just_satisfy_the_compiler() { }
};
////////////////////////////////////TICKET #825 should be backed by mpool and integrated with node invocation
vector<BuffHaXXXX> hTab_;
vector<BuffHandle::PBuff> pTab_;
size_t level_;
public:
BuffTableStorage (const size_t maxSiz)
: hTab_(maxSiz),
pTab_(maxSiz),
level_(0)
{ }
~BuffTableStorage() { ASSERT (0==level_, "buffer management logic broken."); }
protected:
friend class BuffTableChunk;
/** allocate the given number of slots
* starting at current level to be used
* by the newly created BuffTableChunk
*/
FeedManifold::Chunk
claim (uint slots)
{
ASSERT (pTab_.size() == hTab_.size());
REQUIRE (level_+slots <= hTab_.size());
size_t prev_level (level_);
level_ += slots;
return std::make_pair (&hTab_[prev_level],
&pTab_[prev_level]);
}
void
release (uint slots)
{
ASSERT (slots <= level_);
REQUIRE (level_ <= hTab_.size());
REQUIRE (level_ <= pTab_.size());
level_ -= slots;
}
bool
level_check (FeedManifold::Chunk& prev_level)
{
return prev_level.first == &hTab_[level_]
&& prev_level.second == &pTab_[level_];
}
};
/** Obsolete, to be rewritten /////TICKET #826
* to be allocated on the stack while evaluating a ProcNode#pull() call.
* The "current" State (StateProxy) maintains a BuffTableStorage (=pool),
* which can be used to crate such chunks. The claiming and releasing of
* slots in the BuffTableStorage is automatically tied to BuffTableChunk
* object's lifecycle.
*/
class BuffTableChunk
: public FeedManifold,
util::NonCopyable
{
const uint siz_;
FeedManifold::Chunk tab_;
BuffTableStorage& sto_;
public:
BuffTableChunk (Connectivity const& wd, BuffTableStorage& storage)
: siz_(wd.nrI + wd.nrO),
tab_(storage.claim (siz_)),
sto_(storage)
{
const uint nrO(wd.nrO);
// Setup the publicly visible table locations
this->outHandle = &tab_.first[ 0 ];
this->inHandle = &tab_.first[nrO];
this->outBuff = &tab_.second[ 0 ];
this->inBuff = &tab_.second[nrO];
}
~BuffTableChunk ()
{
sto_.release (siz_);
ASSERT ( sto_.level_check (tab_),
"buffer management logic broken.");
}
};
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1367 : (End)presumably obsolete
}} // namespace steam::engine

View file

@ -42,10 +42,7 @@
#define ENGINE_NODE_WIRING_BUILDER_H
//#include "steam/engine/proc-node.hpp" //////////////////////////////////////////////////////////////////TICKET #1367 : switch to new Node Invocation scheme
#include "steam/engine/connectivity-obsolete.hpp"
#include "lib/ref-array.hpp"
#include "lib/util-foreach.hpp"
#include "steam/engine/proc-node.hpp"
#include "lib/nocopy.hpp"
@ -53,137 +50,6 @@
namespace steam {
namespace engine {
using lib::RefArray;
/**
* Finding out about a concrete way of wiring up a
* ProcNode about to be built. Such a (temporary) setup object
* is used while building the low-level model. It is loaded with
* information concerning the intended connections to be made
* and then used to initialise the wiring descriptor, which
* in turn allows us to setup the ProcNode.
*
* \par intended usage pattern
* The goal is to describe the constellation of a new node to be built.
* Thus, we start with one or several existing nodes, specifying which
* output should go to which input pin of the yet-to-be created new node.
* When intending to create a source node, a default WiringSituation
* should be used, without adding any connection information.
*
* @deprecated WIP-WIP-WIP 2024 Node-Invocation is reworked from ground up for the »Playback Vertical Slice«
*/
class WiringSituation
: util::NonCopyable
{
long flags_;
asset::Proc::ProcFunc* function_;
public: /* === API for querying collected data === */
RefArray<ChannelDescriptor>&
makeOutDescriptor() const
{
UNIMPLEMENTED ("build new output descriptors for the node under construction"); //////////TODO: where to get the information about the output channels???
}
RefArray<InChanDescriptor>&
makeInDescriptor() const
{
UNIMPLEMENTED ("build new input descriptors for the node under construction");
}
Connectivity::ProcFunc*
resolveProcessingFunction() const
{
REQUIRE (function_);
return function_;
}
lumiera::NodeID const&
createNodeID() const
{
UNIMPLEMENTED ("initiate generation of a new unique node-ID"); // see rendergraph.cpp
}
public: /* === API for specifying the desired wiring === */
/** A default WiringSituation doesn't specify any connections.
* It can be used as-is for building a source node, or augmented
* with connection information later on.
*/
WiringSituation()
: flags_(0)
, function_(0)
{
UNIMPLEMENTED ("representation of the intended wiring");
}
/** Continue the wiring by hooking directly into the output
* of an existing predecessor node
*/
WiringSituation (PNode predecessor)
: flags_(0)
, function_(0)
{
UNIMPLEMENTED ("wiring representation; hook up connections 1:1");
REQUIRE (predecessor);
//////////////////////////TODO: see Ticket 254
// for_each (predecessor->outputs(), ..... see also Ticket 183 (invoking member fun in for_each)
}
/** set up a connection leading to a specific input pin of the new node */
WiringSituation&
defineInput (uint inPin, PNode pred, uint outPin)
{
UNIMPLEMENTED ("wiring representation; define new connection");
return *this;
}
/** set up the next input connection,
* originating at a specific output pin of the predecessor */
WiringSituation&
defineInput (PNode pred, uint outPin)
{
UNIMPLEMENTED ("wiring representation; define new connection");
return *this;
}
/** set up the next input connection to a specific input pin,
* originating at a the next/sole output pin of the predecessor */
WiringSituation&
defineInput (uint inPin, PNode pred)
{
UNIMPLEMENTED ("wiring representation; define new connection");
return *this;
}
/** set detail flags regarding the desired node operation mode */
WiringSituation&
setFlag (long code)
{
flags_ |= code;
return *this;
}
long getFlags () const { return flags_; }
/** trigger resolving of the actual processing function */
WiringSituation&
resolveProcessor (asset::Proc const& procAsset)
{
function_ = procAsset.resolveProcessor();
ENSURE (function_);
}
};
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1367 : Rebuild the Node Invocation
class NodeWiringBuilder
@ -194,8 +60,7 @@ namespace engine {
/****************************************************//**
* Terminal: complete the Connectivity defined thus far.
*/
// Connectivity
void* /////////////////////////////////////////////////OOO Connectivity no longer needs to be abstract
Connectivity
build()
{
UNIMPLEMENTED("Node-Connectivity Setup");
@ -211,6 +76,7 @@ namespace engine {
buildPatternFor()
{
UNIMPLEMENTED("instantiate Domain Ontology Facade and outfit the NodeWiringBuilder");
return NodeWiringBuilder{};
}

View file

@ -33,9 +33,7 @@
#define ENGINE_NODEWIRING_OBSOLETE_H
//#include "steam/engine/proc-node.hpp" ///////////////////////////////TODO clarify if required further on
#include "steam/engine/connectivity-obsolete.hpp"
#include "steam/engine/node-wiring-builder.hpp"
#include "lib/allocation-cluster.hpp"
#include "lib/ref-array.hpp"
#include "lib/util-foreach.hpp"
@ -53,9 +51,141 @@ namespace engine {
namespace config { class WiringFactoryImpl; }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1367 : inlined here and then dropped in node-wiring-builder.hpp
using lib::RefArray;
/**
* Finding out about a concrete way of wiring up a
* ProcNode about to be built. Such a (temporary) setup object
* is used while building the low-level model. It is loaded with
* information concerning the intended connections to be made
* and then used to initialise the wiring descriptor, which
* in turn allows us to setup the ProcNode.
*
* \par intended usage pattern
* The goal is to describe the constellation of a new node to be built.
* Thus, we start with one or several existing nodes, specifying which
* output should go to which input pin of the yet-to-be created new node.
* When intending to create a source node, a default WiringSituation
* should be used, without adding any connection information.
*
* @deprecated WIP-WIP-WIP 2024 Node-Invocation is reworked from ground up for the »Playback Vertical Slice«
*/
class WiringSituation
: util::NonCopyable
{
long flags_;
asset::Proc::ProcFunc* function_;
public: /* === API for querying collected data === */
RefArray<ChannelDescriptor>&
makeOutDescriptor() const
{
UNIMPLEMENTED ("build new output descriptors for the node under construction"); //////////TODO: where to get the information about the output channels???
}
RefArray<InChanDescriptor>&
makeInDescriptor() const
{
UNIMPLEMENTED ("build new input descriptors for the node under construction");
}
Connectivity::ProcFunc*
resolveProcessingFunction() const
{
REQUIRE (function_);
return function_;
}
lumiera::NodeID const&
createNodeID() const
{
UNIMPLEMENTED ("initiate generation of a new unique node-ID"); // see rendergraph.cpp
}
public: /* === API for specifying the desired wiring === */
/** A default WiringSituation doesn't specify any connections.
* It can be used as-is for building a source node, or augmented
* with connection information later on.
*/
WiringSituation()
: flags_(0)
, function_(0)
{
UNIMPLEMENTED ("representation of the intended wiring");
}
/** Continue the wiring by hooking directly into the output
* of an existing predecessor node
*/
WiringSituation (PNode predecessor)
: flags_(0)
, function_(0)
{
UNIMPLEMENTED ("wiring representation; hook up connections 1:1");
REQUIRE (predecessor);
//////////////////////////TODO: see Ticket 254
// for_each (predecessor->outputs(), ..... see also Ticket 183 (invoking member fun in for_each)
}
/** set up a connection leading to a specific input pin of the new node */
WiringSituation&
defineInput (uint inPin, PNode pred, uint outPin)
{
UNIMPLEMENTED ("wiring representation; define new connection");
return *this;
}
/** set up the next input connection,
* originating at a specific output pin of the predecessor */
WiringSituation&
defineInput (PNode pred, uint outPin)
{
UNIMPLEMENTED ("wiring representation; define new connection");
return *this;
}
/** set up the next input connection to a specific input pin,
* originating at a the next/sole output pin of the predecessor */
WiringSituation&
defineInput (uint inPin, PNode pred)
{
UNIMPLEMENTED ("wiring representation; define new connection");
return *this;
}
/** set detail flags regarding the desired node operation mode */
WiringSituation&
setFlag (long code)
{
flags_ |= code;
return *this;
}
long getFlags () const { return flags_; }
/** trigger resolving of the actual processing function */
WiringSituation&
resolveProcessor (asset::Proc const& procAsset)
{
function_ = procAsset.resolveProcessor();
ENSURE (function_);
}
};
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1367 : (END)inlined here and then dropped in node-wiring-builder.hpp
/**

View file

@ -51,7 +51,8 @@
#include "steam/engine/channel-descriptor.hpp"
#include "steam/engine/turnout-system.hpp"
#include "lib/frameid.hpp"
#include "lib/ref-array.hpp"
#include "lib/ref-array.hpp" /////////////////////OOO phase out
#include "lib/several.hpp"
#include <vector>

View file

@ -59,11 +59,11 @@
#ifndef STEAM_ENGINE_TURNOUT_H
#define STEAM_ENGINE_TURNOUT_H
#include <steam/engine/state-closure-obsolete.hpp>
#include "steam/common.hpp"
#include "steam/engine/proc-node.hpp"
#include "steam/engine/turnout-system.hpp"
#include "steam/engine/feed-manifold.hpp"
#include "steam/engine/state-closure.hpp"
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1367 : Rebuild the Node Invocation
#include "steam/engine/channel-descriptor.hpp"
//#include "vault/gear/job.h"

View file

@ -45,6 +45,7 @@
#include "lib/error.hpp"
#include "lib/hash-value.h"
#include <utility>
#include <functional>
#include <boost/functional/hash.hpp>
@ -54,6 +55,7 @@ namespace engine {
using lib::HashVal;
using std::bind;
using std::forward;
using std::function;
using std::placeholders::_1;
@ -62,18 +64,11 @@ namespace engine {
namespace { // (optional) helpers to build an object embedded into a buffer...
template<class X>
template<class X, typename...ARGS>
inline void
buildIntoBuffer (void* storageBuffer)
buildIntoBuffer (void* storageBuffer, ARGS&& ...args)
{
new(storageBuffer) X();
}
template<class X, typename A1>
inline void
buildIntoBuffer_A1 (void* storageBuffer, A1 arg1)
{
new(storageBuffer) X(arg1);
new(storageBuffer) X(forward<ARGS> (args)...);
}
template<class X>
@ -145,20 +140,13 @@ namespace engine {
{ }
/** builder function defining a TypeHandler
* to place a default-constructed object
* into the buffer. */
template<class X>
* to place an object into the buffer,
* possibly with given ctor arguments. */
template<class X, typename...ARGS>
static TypeHandler
create ()
create (ARGS&& ...args)
{
return TypeHandler (buildIntoBuffer<X>, destroyInBuffer<X>);
}
template<class X, typename A1>
static TypeHandler
create (A1 a1)
{
return TypeHandler ( bind (buildIntoBuffer_A1<X,A1>, _1, a1)
return TypeHandler ( bind (buildIntoBuffer<X,ARGS...>, _1, forward<ARGS> (args)...)
, destroyInBuffer<X>);
}

View file

@ -135,25 +135,27 @@ namespace test {
*/
class FeedManifold_test : public Test
{
#if false /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #852
using PSto = std::unique_ptr<BuffTableStorage>;
PSto pStorage;
#endif /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #852
ulong counter;
virtual void run(Arg)
{
counter = 0;
#if false /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #852
// allocate storage block to be used chunk wise
pStorage.reset (new BuffTableStorage (TABLE_SIZ));
#if false /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #852
invocation (0, detect_start_level(*pStorage));
#endif /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #852
pStorage.reset(0); // dtor throws assertion error if corrupted
cout << "BuffTable chunks allocated: "<<counter<< "\n";
#endif /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #852
}

View file

@ -26,6 +26,9 @@
#include "lib/test/run.hpp"
#include "steam/engine/proc-node.hpp"
#include "steam/engine/node-wiring-builder.hpp"
#include "steam/engine/test-rand-ontology.hpp"
//#include "lib/util.hpp"
@ -40,14 +43,56 @@ namespace test {
/***************************************************************//**
* @test check render node operation modes and collaboration.
* @test demonstrate and document how [render nodes](\ref proc-node.hpp)
* are connected into a processing network, allowing to _invoke_
* a \ref Port on a node to pull-generate a render result.
* - the foundation layer is formed by the nodes as linked into a network
* - starting from any Port, a TurnoutSystem can be established
* - which in turn allows _turn out_ a render result from this port.
*/
class NodeLinkage_test : public Test
{
virtual void run(Arg)
virtual void
run (Arg)
{
build_connected_nodes();
generate_turnout_system();
trigger_node_port_invocation();
}
/** @test TODO Build render nodes linked into a connectivity network
* @todo WIP 7/24 🔁 define implement
*/
void
build_connected_nodes()
{
auto con = buildPatternFor<TestRandOntology>()
.build();
UNIMPLEMENTED ("build render nodes linked into a connectivity network");
}
/** @test TODO Use existing node connectivity to generate a TurnoutSystem
* @todo WIP 7/24 🔁 define implement
*/
void
generate_turnout_system()
{
UNIMPLEMENTED ("use existing node connectivity to generate a TurnoutSystem");
}
/** @test TODO Invoke some render nodes as linked together
* @todo WIP 7/24 🔁 define implement
*/
void
trigger_node_port_invocation()
{
UNIMPLEMENTED ("operate some render nodes as linked together");
}
}
};

View file

@ -0,0 +1,66 @@
/*
TEST-RAND-ONTOLOGY.hpp - placeholder for a domain-ontology working on dummy data frames
Copyright (C) Lumiera.org
2024, Hermann Vosseler <Ichthyostega@web.de>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/** @file testframe-rand-ontology.hpp
** A faked »media calculation« environment to validate the render node network.
*/
#ifndef STEAM_ENGINE_TEST_RAND_ONTOLOGY_H
#define STEAM_ENGINE_TEST_RAND_ONTOLOGY_H
#include "steam/engine/testframe.hpp"
namespace steam {
namespace engine{
namespace test {
/**
* A fake _Domain Ontology_ to describe mocked »render operations« on
* dummy data frames filled with random numbers.
*
* @see TestFrame_test
* @see NodeDevel_test
* @see NodeLinkage_test
*
*/
class TestRandOntology
{
public:
~TestRandOntology() = default;
TestRandOntology() = default;
private:
};
/** */
}}} // namespace steam::engine::test
#endif

View file

@ -80043,9 +80043,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1719267418558" ID="ID_1746035700" MODIFIED="1719267571677" TEXT="soll hier dem Ergebnis eines echten Builder-Laufes vorgreifen">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...f&#252;r den &#187;Playback Vertical Slice&#171; wird eine Fixture fabriziert, wie sie <i>vermutlich sp&#228;ter mal</i>&#160;vom Builder produziert werden wird (wenn es ihn dann endlich mal gibt) &#8212; tats&#228;chlich sehe ich das als ersten prototypischen Entwurf, den ich hier nebenbei aus einer bottom-up-Bewegung gewinnen kann
@ -80444,16 +80442,13 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1714329007283" ID="ID_1710787321" MODIFIED="1714329013657" TEXT="hat ein RenderDrive"/>
<node CREATED="1714329024327" ID="ID_1073111908" MODIFIED="1719267945559" TEXT="ein Frame-Job liefert einen Datenframe">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
beachte: dieser &#187;eine Frame&#171; kann durchaus noch inh&#228;rent strukturiert sein, beispielsweise mehrere <i>Planes</i>&#160;f&#252;r ein planares Format enthalten oder ein<i>&#160;Interleaved-Zyklus</i>&#160;von Einzelframes f&#252;r zusammengeh&#246;rige Kan&#228;le sein &#8212; entscheidend ist, da&#223; dieses Datenelement jeweils<i>&#160;als EInheit </i>verwendet und zusammen produziert oder konsumiert wird.
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1714329014208" ID="ID_1766738306" MODIFIED="1714329023547" TEXT="dies erzeugt eine Folge von Frame-Jobs"/>
<node CREATED="1719267709323" ID="ID_1324726117" MODIFIED="1719267747754" TEXT="&#xbb;Kanal&#xab; bedeutet hier: gemeinsame Datensequenz"/>
@ -80720,6 +80715,22 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</html></richcontent>
</node>
<node CREATED="1713661237357" ID="ID_5368181" MODIFIED="1713661263421" TEXT="habe anscheinend die &quot;buff handle logic&quot; in 2011 komplett umgekrempelt"/>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1322262595498" ID="ID_530710667" MODIFIED="1719611921052">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p style="text-align: center">
erste Rohentw&#252;rfe
</p>
<p style="text-align: center">
+Basis-Implementation
</p>
</body>
</html></richcontent>
<linktarget COLOR="#797a8d" DESTINATION="ID_530710667" ENDARROW="Default" ENDINCLINATION="206;40;" ID="Arrow_ID_385887777" SOURCE="ID_1560472992" STARTARROW="None" STARTINCLINATION="551;-43;"/>
<linktarget COLOR="#6b5acb" DESTINATION="ID_530710667" ENDARROW="Default" ENDINCLINATION="1768;327;" ID="Arrow_ID_24508834" SOURCE="ID_486247041" STARTARROW="None" STARTINCLINATION="673;-23;"/>
<icon BUILTIN="list"/>
</node>
</node>
<node CREATED="1713794992321" ID="ID_267762321" MODIFIED="1713795160403" TEXT="dieser Test enth&#xe4;lt aber bereits die Quintessenz des neuen Buffer-Protokolls">
<arrowlink COLOR="#3c61b7" DESTINATION="ID_900623108" ENDARROW="Default" ENDINCLINATION="-475;-40;" ID="Arrow_ID_245920004" STARTARROW="None" STARTINCLINATION="-218;8;"/>
@ -81400,22 +81411,17 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1719188209270" ID="ID_207282130" MODIFIED="1719188231525" TEXT="von diesem w&#xe4;re dann der Sinn der aufzubauenden Verdrahtung abzulesen"/>
<node CREATED="1719188232382" ID="ID_246650360" MODIFIED="1719188252195">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
aber erwartungsgem&#228;&#223; hat man das<i>&#160;eben grade nicht</i>
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1719188256485" ID="ID_1054880063" MODIFIED="1719188272666">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
...sondern nur einen <b>lokalen</b>&#160;Kontext
@ -81439,23 +81445,18 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="stop-sign"/>
<node CREATED="1719190839832" ID="ID_1276741051" MODIFIED="1719265986836" TEXT="ich verstehe diese alte Struktur nur ansatzweise">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...und ich kann mich erinnern, da&#223; ich sie auch damals nicht vestanden habe, sondern mich immer nur von Definition zu Definition hangelte...
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<linktarget COLOR="#ff004b" DESTINATION="ID_1276741051" ENDARROW="Default" ENDINCLINATION="460;0;" ID="Arrow_ID_1977387211" SOURCE="ID_295398317" STARTARROW="None" STARTINCLINATION="-52;188;"/>
</node>
<node CREATED="1719190856486" ID="ID_231251746" MODIFIED="1719191208897" TEXT="klar ist: diese Factory ist eine Notl&#xf6;sung, mit der der Code wenistens durch den Compiler geht">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
das ist die gradezu klassische &#187;Top-down&#171;-Falle:
@ -81472,8 +81473,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</li>
</ul>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1719191229476" ID="ID_569548140" MODIFIED="1719191277058" TEXT="die Node-Invocation lief mal in einem synthetischen Test &#x2014; nicht aber die Factory">
<icon BUILTIN="messagebox_warning"/>
@ -81485,13 +81485,15 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node CREATED="1719191778055" ID="ID_1371082096" MODIFIED="1719191794282" TEXT="Anforderungen(Neufassung)">
<icon BUILTIN="info"/>
<node CREATED="1719191797712" ID="ID_1137038578" MODIFIED="1719191804128" TEXT="zu bauen ist...">
<node CREATED="1719191797712" ID="ID_1137038578" MODIFIED="1719621297162" TEXT="zu bauen ist...">
<linktarget COLOR="#785f51" DESTINATION="ID_1137038578" ENDARROW="Default" ENDINCLINATION="-176;1183;" ID="Arrow_ID_361217776" SOURCE="ID_304611084" STARTARROW="Default" STARTINCLINATION="-429;-1581;"/>
<node CREATED="1719191806390" ID="ID_609110451" MODIFIED="1719191818113" TEXT="Several&lt;Lead&gt;">
<node CREATED="1719191846295" ID="ID_1542014602" MODIFIED="1719191855452" TEXT="ein Lead adaptiert den Verweis auf eine Vorg&#xe4;nger-Node"/>
</node>
<node CREATED="1719191882287" ID="ID_566022685" MODIFIED="1719191886228" TEXT="Several&lt;Port&gt;">
<node CREATED="1719191890019" ID="ID_1557787483" MODIFIED="1719191900278" TEXT="jeder Port mu&#xdf; mit einem Turnout hinterlegt werden"/>
<node CREATED="1719191910608" ID="ID_54712734" MODIFIED="1719191933305" TEXT="dieser Turnout seinerseits braucht">
<icon BUILTIN="list"/>
<node CREATED="1719191950473" ID="ID_371186850" MODIFIED="1719191966573" TEXT="statische Parametrisierung &#x27f6; WeavingPattern">
<node CREATED="1719191968961" ID="ID_1514113056" MODIFIED="1719191984290" TEXT="hier steckt die eignetliche Aufruf-Logik"/>
<node CREATED="1719191985094" ID="ID_864150896" MODIFIED="1719192026869" TEXT="generisch formuliert &#x2014; auf die konkrete Media-Lib spezialisiert"/>
@ -81500,18 +81502,22 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1719192180498" ID="ID_1633717544" MODIFIED="1719192201501" TEXT="Several&lt;ref(Port)&gt;"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1719192502501" ID="ID_918766669" MODIFIED="1719192510569" TEXT="Spec f&#xfc;r die Output-Buffer">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1719192516511" ID="ID_258173965" MODIFIED="1719192592768" TEXT="kl&#xe4;ren: wie weden Buffer dargestellt?">
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1719192516511" ID="ID_258173965" MODIFIED="1719610194762" TEXT="kl&#xe4;ren: wie weden Buffer dargestellt?">
<arrowlink COLOR="#df177d" DESTINATION="ID_1096257345" ENDARROW="Default" ENDINCLINATION="158;-1172;" ID="Arrow_ID_1559772795" STARTARROW="Default" STARTINCLINATION="286;142;"/>
<icon BUILTIN="help"/>
<node CREATED="1719266961807" ID="ID_212820838" MODIFIED="1719266966386" TEXT="immer als BuffHandle">
<node CREATED="1719267039599" ID="ID_339850468" MODIFIED="1719267048044" TEXT="ist leichtgewichtig">
<node CREATED="1719267039599" ID="ID_339850468" MODIFIED="1719609922303" TEXT="ist leichtgewichtig">
<icon BUILTIN="info"/>
<node CREATED="1719267049029" ID="ID_1839021586" MODIFIED="1719267055704" TEXT="buff-*"/>
<node CREATED="1719267056285" ID="ID_197481275" MODIFIED="1719267065625" TEXT="eine Metadaten-ID"/>
<node CREATED="1719267070988" ID="ID_1327957867" MODIFIED="1719267075927" TEXT="BufferProvider back-*"/>
</node>
<node CREATED="1719267098792" ID="ID_333227912" MODIFIED="1719267115801" TEXT="verschiedene Provider k&#xf6;nnen so in derselben Manifold gemischt werden"/>
<node CREATED="1719267098792" ID="ID_333227912" MODIFIED="1719610137134" TEXT="verschiedene Provider k&#xf6;nnen so in derselben Manifold gemischt werden">
<arrowlink COLOR="#c25344" DESTINATION="ID_1442911620" ENDARROW="Default" ENDINCLINATION="41;3;" ID="Arrow_ID_507821712" STARTARROW="None" STARTINCLINATION="-46;101;"/>
</node>
<node CREATED="1719266991538" ID="ID_8146946" MODIFIED="1719267010802" TEXT="f&#xfc;r DataSinks wird ein pseudo-BufferProvider dazwischengeschaltet">
</node>
<node CREATED="1719266991538" ID="ID_8146946" MODIFIED="1719609933713" TEXT="f&#xfc;r DataSinks wird ein pseudo-BufferProvider dazwischengeschaltet">
<icon BUILTIN="yes"/>
<node CREATED="1719267208862" ID="ID_1133348458" MODIFIED="1719269150001" TEXT="OutputSlot / DataSink geh&#xf6;rt auf eine h&#xf6;here Abstraktionsebene">
<arrowlink COLOR="#5e0222" DESTINATION="ID_1793577189" ENDARROW="Default" ENDINCLINATION="648;-26;" ID="Arrow_ID_329940341" STARTARROW="None" STARTINCLINATION="-75;593;"/>
<linktarget COLOR="#533f4c" DESTINATION="ID_1133348458" ENDARROW="Default" ENDINCLINATION="107;-878;" ID="Arrow_ID_208652263" SOURCE="ID_1877886821" STARTARROW="None" STARTINCLINATION="1479;81;"/>
@ -81519,8 +81525,179 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1719269177611" ID="ID_761451539" MODIFIED="1719269196253" TEXT="das Output-Slot-Protokoll operiert auf der Ebene des Frame-Job"/>
<node CREATED="1719269206207" ID="ID_846303339" MODIFIED="1719269232359" TEXT="f&#xfc;r die Einzelberechnung ist das lediglich ein Zielpuffer &#x2014; der bereits bereitgestellt ist"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#4b1316" CREATED="1719610088647" ID="ID_1442911620" MODIFIED="1719610302219" TEXT="aber erst f&#xfc;r die eigentliche Invocation">
<arrowlink COLOR="#682e40" DESTINATION="ID_45890522" ENDARROW="Default" ENDINCLINATION="20;-28;" ID="Arrow_ID_274087332" STARTARROW="None" STARTINCLINATION="-98;7;"/>
<linktarget COLOR="#c25344" DESTINATION="ID_1442911620" ENDARROW="Default" ENDINCLINATION="41;3;" ID="Arrow_ID_507821712" SOURCE="ID_333227912" STARTARROW="None" STARTINCLINATION="-46;101;"/>
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
<node CREATED="1719610195679" ID="ID_45890522" MODIFIED="1719610302219" TEXT="Spec &#x27f6; was man vorneweg wissen mu&#xdf;">
<linktarget COLOR="#682e40" DESTINATION="ID_45890522" ENDARROW="Default" ENDINCLINATION="20;-28;" ID="Arrow_ID_274087332" SOURCE="ID_1442911620" STARTARROW="None" STARTINCLINATION="-98;7;"/>
<node CREATED="1719610212651" ID="ID_1146415020" MODIFIED="1719610222111" TEXT="hier wird&apos;s schwierig">
<icon BUILTIN="smiley-oh"/>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1719611885638" ID="ID_1918379255" MODIFIED="1719611906459" TEXT="was ist &#xfc;ber BufferProvider bekannt?">
<icon BUILTIN="help"/>
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1322262595850" ID="ID_1560472992" MODIFIED="1719611921052" TEXT="Implementierungs-Skizze von Nov.2011">
<arrowlink COLOR="#797a8d" DESTINATION="ID_530710667" ENDARROW="Default" ENDINCLINATION="206;40;" ID="Arrow_ID_385887777" STARTARROW="None" STARTINCLINATION="551;-43;"/>
<icon BUILTIN="info"/>
<node COLOR="#435e98" CREATED="1719613411937" ID="ID_891160570" MODIFIED="1719613506789" TEXT="Interface ist komplett opaque">
<font NAME="SansSerif" SIZE="10"/>
</node>
<node COLOR="#435e98" CREATED="1719613428816" ID="ID_1585539351" MODIFIED="1719613506790" TEXT="kann automatisch eine Payload-Instanz platzieren">
<font NAME="SansSerif" SIZE="10"/>
</node>
</node>
<node CREATED="1719613516196" ID="ID_626988531" MODIFIED="1719613533558" TEXT="l&#xe4;&#xdf;t nur wenige Zusatz-Kan&#xe4;le f&#xfc;r Metadaten offen">
<node CREATED="1719613552183" ID="ID_1654830476" MODIFIED="1719613569652" TEXT="Buffer wird f&#xfc;r einen BufferDescriptor announced/locked">
<icon BUILTIN="idea"/>
<node CREATED="1719615852227" ID="ID_947471000" MODIFIED="1719615875444">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
dieser speichert einen <font face="Monospaced" color="#6d0f0f">HashVal subClassification_</font>
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1719615881117" ID="ID_929196373" MODIFIED="1719615903390" TEXT="...welcher rein von der BufferProvider-Implementierung interpretiert wird"/>
</node>
<node CREATED="1719615905690" ID="ID_1973518590" MODIFIED="1719615924957" TEXT="es gibt aber bereits eine Festlegung f&#xfc;r die Default-Impl">
<icon BUILTIN="idea"/>
<node CREATED="1719615995430" ID="ID_129950521" MODIFIED="1719616013612" TEXT="diese stellt vorkonfigurierte BufferDescriptor bereit"/>
<node CREATED="1719616014244" ID="ID_415266367" MODIFIED="1719616026850" TEXT="welche auf ein TypeHandler-System aufsetzen"/>
<node CREATED="1719616030377" ID="ID_1680151847" MODIFIED="1719616046987">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
siehe <font face="Monospaced" color="#5b5b82">type-handler.hpp</font>
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1719616056760" ID="ID_1169211693" MODIFIED="1719616084779">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
dieser zielt darauf ab, Strukturen <i>in den Buffer </i>zu pflanzen
</p>
</body>
</html>
</richcontent>
</node>
</node>
<node CREATED="1719616095807" ID="ID_51201882" MODIFIED="1719616131237" TEXT="das &#xf6;ffnet ganz klassich einen Pfad &#xfc;ber einen Extension-Point">
<icon BUILTIN="yes"/>
<node COLOR="#4a4398" CREATED="1719616131988" ID="ID_1396129090" MODIFIED="1719616169781" TEXT="Ha! hab ich erst gesehen, nachdem ich (routinem&#xe4;&#xdf;ig) auf Variadics umstellte">
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="ksmiletris"/>
</node>
<node CREATED="1719616175753" ID="ID_1889117750" MODIFIED="1719616219067" TEXT="Man kann n&#xe4;mlich einem beliebigen Payload-Typ bestimmte ctor-Argumente &#xbb;zuschieben&#xab;"/>
<node CREATED="1719616219790" ID="ID_429009427" MODIFIED="1719618028429" TEXT="...und diese werden durch BufferProvider::announce | lock(args...) markiert">
<linktarget COLOR="#f5ffc9" DESTINATION="ID_429009427" ENDARROW="Default" ENDINCLINATION="1094;40;" ID="Arrow_ID_229537800" SOURCE="ID_1526687578" STARTARROW="None" STARTINCLINATION="522;-24;"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1719617962418" ID="ID_70122641" MODIFIED="1719617982531" TEXT="&#x27f9; man announced/locked einen speziellen Typ">
<node CREATED="1719617983675" ID="ID_1366774296" MODIFIED="1719617999181" TEXT="setzt Typ-Kontext vorraus"/>
<node CREATED="1719618000335" ID="ID_1227527067" MODIFIED="1719618019817">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
und dieser geh&#246;rt zu einer <b>DomainOntology</b>
</p>
</body>
</html></richcontent>
</node>
<node BACKGROUND_COLOR="#fefc4e" COLOR="#351d75" CREATED="1719618081052" ID="ID_1722203246" LINK="#ID_1431538917" MODIFIED="1719618179422" TEXT="und hier liegt die St&#xe4;rke dieses Designs">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="idea"/>
</node>
</node>
</node>
</node>
<node COLOR="#435e98" CREATED="1719618204579" ID="ID_1438180269" MODIFIED="1719618352814" TEXT="Fazit">
<icon BUILTIN="forward"/>
<node CREATED="1719618208890" ID="ID_553660017" MODIFIED="1719618229172" TEXT="dem BufferProvider-Interface ist das egal"/>
<node CREATED="1719618231064" ID="ID_734757742" MODIFIED="1719618254808" TEXT="aber es gibt eine &#xbb;Hintert&#xfc;r&#xab;">
<node CREATED="1719618273730" ID="ID_1653762248" MODIFIED="1719618305816" TEXT="entweder &#xfc;ber einen sub-classification-Hash"/>
<node CREATED="1719618306381" ID="ID_1369152532" MODIFIED="1719618347084" TEXT="oder via Typ-Kontext &#x27f6; TypeHandler"/>
</node>
<node CREATED="1719618255940" ID="ID_43952927" MODIFIED="1719618908256" TEXT="diese wird erst im Nutz-Kontext aktiviert">
<arrowlink COLOR="#5c39d5" DESTINATION="ID_166011703" ENDARROW="Default" ENDINCLINATION="21;-52;" ID="Arrow_ID_926189811" STARTARROW="None" STARTINCLINATION="-84;6;"/>
</node>
</node>
</node>
<node CREATED="1719618529463" ID="ID_166011703" MODIFIED="1719618895712">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
Konsequenz &#10233; die Spec legt fest <i>was </i>in den Buffer gelegt wird
</p>
</body>
</html>
</richcontent>
<linktarget COLOR="#5c39d5" DESTINATION="ID_166011703" ENDARROW="Default" ENDINCLINATION="21;-52;" ID="Arrow_ID_926189811" SOURCE="ID_43952927" STARTARROW="None" STARTINCLINATION="-84;6;"/>
<node CREATED="1719618582465" ID="ID_517377374" MODIFIED="1719618753285" TEXT="und zwar als Tupel...">
<node CREATED="1719618589495" ID="ID_1639547318" MODIFIED="1719618598224" TEXT="statisch: Payload-Typ"/>
<node CREATED="1719618599520" ID="ID_343758452" MODIFIED="1719618615320" TEXT="dynamisch: ctor-Args"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1719618771950" ID="ID_51857699" MODIFIED="1719618816664">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
<i>leider</i>&#160;setzt das bereits die <b>Domain-Ontology</b>&#160;vorraus
</p>
</body>
</html></richcontent>
<icon BUILTIN="smiley-neutral"/>
<node CREATED="1719618938072" ID="ID_1202426063" MODIFIED="1719618977758" TEXT="leider &#xd83e;&#xdc32; Design f&#xfc;r Henne oder Ei??"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1719618981642" ID="ID_746946876" MODIFIED="1719619104515" TEXT="&#x27f9; brauche ein Bootstrap f&#xfc;r das Design">
<arrowlink COLOR="#412dcd" DESTINATION="ID_420782384" ENDARROW="Default" ENDINCLINATION="108;-360;" ID="Arrow_ID_317368901" STARTARROW="None" STARTINCLINATION="241;1448;"/>
<icon BUILTIN="yes"/>
<node CREATED="1719619114224" ID="ID_1901204514" MODIFIED="1719619130809" TEXT="den Rahmen gegen eine Test-Ontologie aufbauen"/>
<node CREATED="1719619164315" ID="ID_1340857572" MODIFIED="1719619192543" TEXT="diese sch&#xf6;pft allerdings bereits aus Kenntnis des Dom&#xe4;nen-Horizonts"/>
<node CREATED="1719619131805" ID="ID_714584236" MODIFIED="1719619202382" TEXT="dann mit einer ersten, echten Dom&#xe4;nen-Ontologie anwenden (z.B. FFmpeg)"/>
</node>
</node>
</node>
<node CREATED="1719620033718" ID="ID_1520044724" MODIFIED="1719620068860">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
...und zur Laufzeit wird nur noch <i>ein St&#252;ck von diesem &#187;was&#171; angefordert</i>
</p>
</body>
</html>
</richcontent>
</node>
</node>
</node>
</node>
<node CREATED="1719620337833" ID="ID_208065994" MODIFIED="1719620559086" TEXT="ein WeavingPattern f&#xfc;r die Invocation">
<arrowlink COLOR="#ad5890" DESTINATION="ID_8397683" ENDARROW="Default" ENDINCLINATION="-1648;-198;" ID="Arrow_ID_539070296" STARTARROW="None" STARTINCLINATION="-368;1501;"/>
<node CREATED="1719620405448" ID="ID_1945903197" MODIFIED="1719620414667" TEXT="das ist ein Baukasten-System"/>
<node CREATED="1719620415447" ID="ID_1834612862" MODIFIED="1719620431080" TEXT="damit werden die API-Funktionen des Turnout zusammengesetzt"/>
<node CREATED="1719620434396" ID="ID_157008533" MODIFIED="1719620465316" TEXT="&#x27f9; das stellt die konkrete Implementierung eines &#xbb;Turnout&#xab;-Aufrufes bereit"/>
</node>
</node>
</node>
@ -81530,8 +81707,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1719276025136" ID="ID_607906936" MODIFIED="1719276042313" TEXT="buildPatternFor&lt;ONT&gt;()">
<node CREATED="1719277198122" ID="ID_1431538917" MODIFIED="1719277212004" TEXT="ONT ist eine Dom&#xe4;nen-Ontologie">
<node CREATED="1719277214775" ID="ID_1364518400" MODIFIED="1719277219923" TEXT="Beispiel FFmpeg"/>
<node CREATED="1719277220672" ID="ID_973384222" MODIFIED="1719277530648" TEXT="konkret: TestRandOntology">
<arrowlink COLOR="#df3950" DESTINATION="ID_594112005" ENDARROW="Default" ENDINCLINATION="666;-662;" ID="Arrow_ID_801625266" STARTARROW="None" STARTINCLINATION="-521;54;"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1719277220672" ID="ID_973384222" MODIFIED="1719625152303" TEXT="konkret: TestRandOntology">
<arrowlink COLOR="#df3950" DESTINATION="ID_594112005" ENDARROW="Default" ENDINCLINATION="666;-662;" ID="Arrow_ID_801625266" STARTARROW="None" STARTINCLINATION="-529;52;"/>
<icon BUILTIN="pencil"/>
</node>
</node>
</node>
@ -85215,12 +85393,12 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1718926376090" ID="ID_1237866779" MODIFIED="1718931836347" TEXT="die WiringSituation doppelt die Relationen nochmal auf">
<linktarget COLOR="#a05d70" DESTINATION="ID_1237866779" ENDARROW="Default" ENDINCLINATION="-821;-34;" ID="Arrow_ID_1472508814" SOURCE="ID_1034026390" STARTARROW="None" STARTINCLINATION="1345;85;"/>
</node>
<node CREATED="1718926456544" ID="ID_114653821" MODIFIED="1718927260591" TEXT="der tats&#xe4;chlich ausf&#xfc;hrende Code ist praktisch unauffindbar">
<node CREATED="1718926456544" ID="ID_114653821" MODIFIED="1719609866332" TEXT="der tats&#xe4;chlich ausf&#xfc;hrende Code ist praktisch unauffindbar">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
man geht von ProcNode durch Connectivity, dann NodeWiring ... und wenn man Gl&#252;ck hat, f&#228;llt einem der Header nodeoperaton.hpp auf...&#160; <font color="#900025">&#9888; denn sonst ist der tats&#228;chliche Einstiegspunkt mit &#252;blichen Methoden der Code-Suche <b>praktisch nicht zu finden</b></font>: Er steckt in nodewiring.hpp in der konkreten Definition der virtuellen Funktion <font face="Monospaced" color="#3417c7">callDown()</font>&#160; &#8212; und von dort in eine <i>dependent Method </i><font face="Monospaced" color="#7306ce">thisStep.retrieve()</font>, die tats&#228;chlich im Template <font face="Monospaced" color="#7f0da7">ActualInvocationProcess</font>&#160;an <font face="Monospaced" color="#6f022c">STRATEGY::step()</font>&#160; weitergereicht wird &#8212; und vermutlich ist nur mir klar, da&#223; damit die verketteten step()-Methoden in nodeoperation.hpp gemeint sind...
man geht von ProcNode durch Connectivity, dann NodeWiring ... und wenn man Gl&#252;ck hat, f&#228;llt einem der Header <font color="#494d71" face="Monospaced">nodeoperation.hpp</font>&#160; auf...&#160; <font color="#900025">&#9888; denn sonst ist der tats&#228;chliche Einstiegspunkt mit &#252;blichen Methoden der Code-Suche <b>praktisch nicht zu finden</b></font>: Er steckt in nodewiring.hpp in der konkreten Definition der virtuellen Funktion <font color="#3417c7" face="Monospaced">callDown()</font>&#160;&#160;&#8212; und von dort in eine <i>dependent Method </i><font color="#7306ce" face="Monospaced">thisStep.retrieve()</font>, die tats&#228;chlich im Template <font color="#7f0da7" face="Monospaced">ActualInvocationProcess</font>&#160;an <font color="#6f022c" face="Monospaced">STRATEGY::step()</font>&#160;&#160;weitergereicht wird &#8212; und vermutlich ist nur mir klar, da&#223; damit die verketteten <font color="#5e483f" face="Monospaced">step()</font>-Methoden in <font color="#494d71" face="Monospaced">nodeoperation.hpp</font>&#160; gemeint sind...
</p>
</body>
</html></richcontent>
@ -85313,11 +85491,22 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1713821606607" ID="ID_492497884" MODIFIED="1713823536290" TEXT="NodeDevel_test">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1713823362710" ID="ID_66967253" MODIFIED="1719277373397" TEXT="Hilfsmittel zur Entwicklung und zum Aufbau">
<node CREATED="1719277267208" HGAP="29" ID="ID_594112005" MODIFIED="1719277530648" TEXT="brauche eine komplette Test-Ontologie" VSHIFT="7">
<node CREATED="1719277267208" HGAP="29" ID="ID_594112005" MODIFIED="1719625152303" TEXT="brauche eine komplette Test-Ontologie" VSHIFT="7">
<linktarget COLOR="#df3950" DESTINATION="ID_594112005" ENDARROW="Default" ENDINCLINATION="666;-662;" ID="Arrow_ID_801625266" SOURCE="ID_973384222" STARTARROW="None" STARTINCLINATION="-529;52;"/>
<linktarget COLOR="#ff2400" DESTINATION="ID_594112005" ENDARROW="Default" ENDINCLINATION="-136;-44;" ID="Arrow_ID_1657525718" SOURCE="ID_1706482104" STARTARROW="None" STARTINCLINATION="101;9;"/>
<linktarget COLOR="#df3950" DESTINATION="ID_594112005" ENDARROW="Default" ENDINCLINATION="666;-662;" ID="Arrow_ID_801625266" SOURCE="ID_973384222" STARTARROW="None" STARTINCLINATION="-521;54;"/>
<node CREATED="1719277376922" ID="ID_420782384" MODIFIED="1719277398435" TEXT="das ist zugleich ein Pr&#xfc;fstein f&#xfc;r das angestrebte &#xbb;generische Design&#xab;"/>
<node CREATED="1719277401015" ID="ID_1540154009" MODIFIED="1719277423128" TEXT="mu&#xdf; alle Operationen bereitstellen, die f&#xfc;r abstrakte Tests notwendig sind"/>
<node CREATED="1719277376922" ID="ID_420782384" MODIFIED="1719625186382" TEXT="das ist zugleich ein Pr&#xfc;fstein f&#xfc;r das angestrebte &#xbb;generische Design&#xab;">
<linktarget COLOR="#412dcd" DESTINATION="ID_420782384" ENDARROW="Default" ENDINCLINATION="108;-360;" ID="Arrow_ID_317368901" SOURCE="ID_746946876" STARTARROW="None" STARTINCLINATION="241;1448;"/>
<icon BUILTIN="idea"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1719277401015" ID="ID_1540154009" MODIFIED="1719625180422" TEXT="mu&#xdf; alle Operationen bereitstellen, die f&#xfc;r abstrakte Tests notwendig sind">
<icon BUILTIN="yes"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1719625209413" ID="ID_1847666799" MODIFIED="1719625223372" TEXT="per NodeLinkage_test herausfinden...">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1719625243183" ID="ID_1479244509" MODIFIED="1719625248360" TEXT="&#xfc;ber Weiterungen nachdenken">
<icon BUILTIN="hourglass"/>
</node>
</node>
</node>
</node>
</node>
@ -85487,6 +85676,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1719160250921" ID="ID_304611084" MODIFIED="1719160266012" TEXT="Ergebnis: gebraucht wird...">
<arrowlink COLOR="#785f51" DESTINATION="ID_1137038578" ENDARROW="Default" ENDINCLINATION="-176;1183;" ID="Arrow_ID_361217776" STARTARROW="Default" STARTINCLINATION="-429;-1581;"/>
<icon BUILTIN="forward"/>
<node CREATED="1719160274852" ID="ID_1366997301" MODIFIED="1719160281511" TEXT="ein Several&lt;Port&gt;">
<node CREATED="1719160369760" ID="ID_1815539399" MODIFIED="1719160384580" TEXT="hinter jedem Port liegt als Impl. eine Turnout-Instanz"/>
@ -85494,9 +85684,10 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1719161767428" ID="ID_1653052033" MODIFIED="1719161772311" TEXT="Parametrisierung">
<node CREATED="1719161777186" ID="ID_993267470" MODIFIED="1719161778737" TEXT="statisch">
<node CREATED="1719162563481" ID="ID_935830932" MODIFIED="1719162567116" TEXT="WeavingPattern"/>
<node CREATED="1719621427182" ID="ID_219988171" MODIFIED="1719621435122" TEXT="Domain-Bindung der FeedManifold"/>
</node>
<node CREATED="1719161779698" ID="ID_1317524079" MODIFIED="1719161781950" TEXT="dynamisch">
<node CREATED="1719162575783" ID="ID_1992687111" MODIFIED="1719162587249" TEXT="Parameter der FeedManifold"/>
<node CREATED="1719162575783" ID="ID_1992687111" MODIFIED="1719621442511" TEXT="Layout-Spec der FeedManifold"/>
</node>
</node>
<node CREATED="1719161783769" ID="ID_1648158188" MODIFIED="1719161788109" TEXT="Operationen">
@ -85522,9 +85713,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1719271127596" ID="ID_1128397704" MODIFIED="1719271146317" TEXT="ist in jedem Fall komplex und eine t&#xfc;ckische Fehlerquelle"/>
<node CREATED="1719271214216" ID="ID_398640235" MODIFIED="1719271313974" TEXT="der generische Buffer-Provider mu&#xdf; ohnehin ein optimiertes Pooling bieten">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...und zwar mit einer Gruppierung der Buffer nach Gr&#246;&#223;e, und vermutlich auch pro Thread
@ -85543,16 +85732,13 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1719272470222" ID="ID_1647993969" MODIFIED="1719272488848" TEXT="der Job mu&#xdf; davon im Zeitfenster die DataSink(s) allozieren">
<node CREATED="1719272576443" ID="ID_1737558324" MODIFIED="1719272787633" TEXT="es k&#xf6;nnen mehrere DataSinks sein">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
Es kann durchaus sein, da&#223; das jeweilige Output-System einzelne Teil-Kan&#228;le in einem <i>planaren Format </i>haben m&#246;chte, also als einzelne, zusammenh&#228;ngende Datenbl&#246;cke f&#252;r jeden Kanal (Hue, Sat, Lum, bzw. Sound-L/R oder WXYZ...)
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1719272606004" ID="ID_373024645" MODIFIED="1719272632021" TEXT="in diesem Fall mu&#xdf; die top-Level-Node auch mehrere Output-Buffer liefern"/>
<node CREATED="1719272633589" ID="ID_920731702" MODIFIED="1719272647394" TEXT="trotzdem mu&#xdf; das alles zusammen in einem Aufruf passieren"/>
@ -85566,12 +85752,13 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1719274449895" ID="ID_246452729" MODIFIED="1719274464706" TEXT="dieses Thema wurde bisher noch nicht betrachtet">
<icon BUILTIN="messagebox_warning"/>
</node>
<node CREATED="1719274466738" ID="ID_1523555394" MODIFIED="1719274526206" TEXT="es ist aber sicherlich l&#xf6;sbar">
<node CREATED="1719274466738" ID="ID_1523555394" MODIFIED="1719617878538" TEXT="es ist aber sicherlich l&#xf6;sbar">
<arrowlink COLOR="#fefbbd" DESTINATION="ID_1526687578" ENDARROW="Default" ENDINCLINATION="-94;-6;" ID="Arrow_ID_1407692136" STARTARROW="None" STARTINCLINATION="-55;6;"/>
<icon BUILTIN="idea"/>
<node CREATED="1719274477032" ID="ID_1597306488" MODIFIED="1719274490387" TEXT="etweder &#xfc;ber die Metadaten-Infrastruktur im BufferProvider"/>
<node CREATED="1719274491006" ID="ID_708988075" MODIFIED="1719274516673" TEXT="oder indem man noch einen Header in den Buffer f&#xfc;r den Cache-Entry einbaut"/>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1719274528595" ID="ID_1941129738" MODIFIED="1719275284591" TEXT="insofern kann man das Thema derzeit ignorieren">
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1719274528595" ID="ID_1941129738" MODIFIED="1719609535511" TEXT="insofern k&#xf6;nnte man das Thema derzeit ignorieren">
<arrowlink COLOR="#be5682" DESTINATION="ID_296714720" ENDARROW="Default" ENDINCLINATION="8;-27;" ID="Arrow_ID_1041581476" STARTARROW="None" STARTINCLINATION="-86;5;"/>
<icon BUILTIN="hourglass"/>
<node CREATED="1719274608878" ID="ID_870491160" MODIFIED="1719274632551" TEXT="zum Thema &#xbb;Frame Cache&#xab; gibt es noch nichteinmal Tickets"/>
@ -85583,23 +85770,25 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1719275318407" ID="ID_1392911369" MODIFIED="1719275366650" TEXT="das mu&#xdf; vor / jenseits des normalen pull()-Schemas passieren">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
warum? weil es die BufferManager-Abstraktion unterl&#228;uft
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1719275367776" ID="ID_577334967" MODIFIED="1719275640725" TEXT="insofern ist es genau eine Aufgabe f&#xfc;r das Turnout-System">
<arrowlink COLOR="#ac5878" DESTINATION="ID_304657123" ENDARROW="Default" ENDINCLINATION="2911;290;" ID="Arrow_ID_1615410848" STARTARROW="None" STARTINCLINATION="-968;-56;"/>
<icon BUILTIN="yes"/>
</node>
</node>
<node CREATED="1719275655556" ID="ID_676493203" MODIFIED="1719275679282" TEXT="abgesehen davon: der Cache ist als ein weiterer BufferProvider &#x201e;versteckt&#x201c;"/>
<node CREATED="1719275655556" ID="ID_676493203" MODIFIED="1719275679282" TEXT="abgesehen davon: der Cache ist als ein weiterer BufferProvider &#x201e;versteckt&#x201c;">
<node CREATED="1719617749965" ID="ID_1526687578" MODIFIED="1719618028429" TEXT="und somit bekommen wir ein Metadaten-Problem">
<arrowlink COLOR="#f5ffc9" DESTINATION="ID_429009427" ENDARROW="Default" ENDINCLINATION="1094;40;" ID="Arrow_ID_229537800" STARTARROW="None" STARTINCLINATION="522;-24;"/>
<linktarget COLOR="#fefbbd" DESTINATION="ID_1526687578" ENDARROW="Default" ENDINCLINATION="-94;-6;" ID="Arrow_ID_1407692136" SOURCE="ID_1523555394" STARTARROW="None" STARTINCLINATION="-55;6;"/>
</node>
</node>
</node>
</node>
<node CREATED="1719162376624" ID="ID_40367188" MODIFIED="1719162389506" TEXT="output slots"/>
@ -85633,10 +85822,34 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1719161550685" ID="ID_435316171" MODIFIED="1719161848684" TEXT="enactTurnout(coord) &#x27fc; TurnoutSystem">
<arrowlink COLOR="#4a497f" DESTINATION="ID_1464453876" ENDARROW="Default" ENDINCLINATION="-115;13;" ID="Arrow_ID_1411577361" STARTARROW="None" STARTINCLINATION="135;-7;"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1719625383125" ID="ID_1834369403" MODIFIED="1719625429986" TEXT="hier mu&#xdf; die Test-Ontology eingebunden werden">
<linktarget COLOR="#bf3d87" DESTINATION="ID_1834369403" ENDARROW="Default" ENDINCLINATION="-365;21;" ID="Arrow_ID_239565642" SOURCE="ID_831247737" STARTARROW="None" STARTINCLINATION="129;-285;"/>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1719626914799" ID="ID_1823583408" MODIFIED="1719626995786" TEXT="Aufgabe: herausfinden wie man sie verwendet">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Auf der Ebene der Implementierung ist die Domain-Ontology so etwas wie eine Typklasse &#8212; wie bildet man das in C++17 ab &#8212; und wie in C++20 ?
</p>
</body>
</html></richcontent>
<icon BUILTIN="yes"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1719627010609" ID="ID_1087699314" MODIFIED="1719627015478" TEXT="Beispiele durchgehen">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1719627023431" ID="ID_1716372764" MODIFIED="1719627089893" TEXT="ich m&#xf6;chte...">
<icon BUILTIN="list"/>
<node CREATED="1719627040061" ID="ID_1998587021" MODIFIED="1719627050847" TEXT="Daten aus einer Mediendatei bekommen"/>
<node CREATED="1719627051735" ID="ID_1473333794" MODIFIED="1719627068541" TEXT="Auf einen Medienstrom einen Effekt anwenden"/>
<node CREATED="1719627077048" ID="ID_1608140531" MODIFIED="1719627084443" TEXT="einen Ergebnis-Medienstrom beziehen"/>
</node>
</node>
</node>
</node>
<node CREATED="1719161555829" ID="ID_545548870" MODIFIED="1719161561707" TEXT="TurnoutSystem">
<node CREATED="1719161702388" ID="ID_1436893233" MODIFIED="1719161707440" TEXT="Strukturen">
<node CREATED="1719161712243" ID="ID_1205289060" MODIFIED="1719161717030" TEXT="verweis auf einen Turnout"/>
<node CREATED="1719161712243" ID="ID_1205289060" MODIFIED="1719161717030" TEXT="Verweis auf einen Turnout"/>
<node CREATED="1719161717906" ID="ID_1006873280" MODIFIED="1719161724315" TEXT="einen Key-Value-Store"/>
</node>
<node CREATED="1719161694598" ID="ID_1518897680" MODIFIED="1719161696921" TEXT="Operationen">
@ -85659,8 +85872,14 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1718975677753" ID="ID_1527027445" MODIFIED="1718975694581" TEXT="Turnout verwendet eine Kette von WeavingPatterns"/>
</node>
<node CREATED="1718975296253" ID="ID_173252871" MODIFIED="1718975299600" TEXT="TurnoutSystem">
<node CREATED="1718975300492" ID="ID_1007921082" MODIFIED="1718975308959" TEXT="arbeitet auf dem Port-Interface"/>
<node CREATED="1718975309547" ID="ID_154889872" MODIFIED="1718975315360" TEXT="wird vom Turnout erzeugt"/>
<node CREATED="1718975300492" ID="ID_1007921082" MODIFIED="1718975308959" TEXT="arbeitet auf dem Port-Interface">
<node CREATED="1719621489005" ID="ID_637473391" MODIFIED="1719621515534" TEXT="ist mithin nicht generisch parametrisiert"/>
<node CREATED="1719621495271" ID="ID_902765604" MODIFIED="1719621507191" TEXT="sondern Interface-abstrahiert"/>
</node>
<node CREATED="1718975309547" ID="ID_154889872" MODIFIED="1718975315360" TEXT="wird vom Turnout erzeugt">
<node CREATED="1719621545549" ID="ID_1777820850" MODIFIED="1719621574190" TEXT="bedeutet: das Turnout injiziert hier &#x3bb;-Flexibilit&#xe4;t"/>
<node CREATED="1719621584920" ID="ID_640762366" MODIFIED="1719621598995" TEXT="...welche beim Bauen des Node-Network angelegt wurde"/>
</node>
<node CREATED="1718975332631" ID="ID_607210840" MODIFIED="1718975353400" TEXT="ist selber ein Execution-Context-Builder"/>
<node CREATED="1718975646318" ID="ID_173228319" MODIFIED="1718975652841" TEXT="bietet die Schritte">
<node CREATED="1718975653877" ID="ID_710670497" MODIFIED="1718975655896" TEXT="mount"/>
@ -85685,7 +85904,12 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1718975949293" ID="ID_8397683" MODIFIED="1718975957653" TEXT="noch unklar: Weaving-Patterns?">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1719625289258" ID="ID_831247737" MODIFIED="1719625437097" TEXT="brauche test-rand-ontology.hpp als Anker/Treiber">
<arrowlink COLOR="#bf3d87" DESTINATION="ID_1834369403" ENDARROW="Default" ENDINCLINATION="-365;21;" ID="Arrow_ID_239565642" STARTARROW="None" STARTINCLINATION="129;-285;"/>
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1718975949293" ID="ID_8397683" MODIFIED="1719620559086" TEXT="noch unklar: Weaving-Patterns?">
<linktarget COLOR="#ad5890" DESTINATION="ID_8397683" ENDARROW="Default" ENDINCLINATION="-1648;-198;" ID="Arrow_ID_539070296" SOURCE="ID_208065994" STARTARROW="None" STARTINCLINATION="-368;1501;"/>
<icon BUILTIN="help"/>
</node>
<node CREATED="1719163109733" ID="ID_783205503" MODIFIED="1719163114999" TEXT="Translation-Units">
@ -85779,16 +86003,13 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node CREATED="1719176564725" ID="ID_1676094171" MODIFIED="1719176859858" TEXT="man k&#xf6;nnte wohl den gleichen Effekt mit einer expliziteren Dependency-Injection erzielen">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...weiterhin bleibt es dabei, da&#223; der Zugang zum Buffer-Management &#252;ber das Turnout-System (fr&#252;her StateAdapter) l&#228;uft; aber daf&#252;r ist kein klassisches OO-Interface notwendig, sofern das Buffer-Handling seinerseits auf einem Interface aufbaut. Die Aufgabe, an der sich das entscheidet ist, wie der konkrete Turnout eine konkrete FeedManifold bauen kann (und ob er das &#252;berhaupt tut)
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
</node>
</node>
@ -124838,6 +125059,10 @@ std::cout &lt;&lt; tmpl.render({&quot;what&quot;, &quot;World&quot;}) &lt;&lt; s
<node CREATED="1719248991858" ID="ID_1208921811" MODIFIED="1719249009087" TEXT="generische Schnittstelle als Zugang zu abstrahierten Buffern"/>
<node CREATED="1719249009802" ID="ID_1115060096" MODIFIED="1719249028945" TEXT="ein konkreter Buffer-Typ wird vom client als Overlay angegeben"/>
<node CREATED="1719249143713" ID="ID_1884572024" MODIFIED="1719249151447" TEXT="stellt ein BuffHandle bereit"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1322262595888" ID="ID_486247041" MODIFIED="1719248999999" TEXT="in Kl&#xe4;rung">
<arrowlink COLOR="#6b5acb" DESTINATION="ID_530710667" ENDARROW="Default" ENDINCLINATION="1768;327;" ID="Arrow_ID_24508834" STARTARROW="None" STARTINCLINATION="673;-23;"/>
<icon BUILTIN="pencil"/>
</node>
</node>
<node CREATED="1719249067047" ID="ID_860520674" MODIFIED="1719249077469" TEXT="OutputManager">
<node CREATED="1719249078625" ID="ID_1793577189" MODIFIED="1719269049808" TEXT="Definition: ein konkreter Service zur Verwaltung externer Ausgaben">