Invocation: now able to pass parameter tuples
This basically completes the reworked implementation of the `FeedManifold` An important aspect however is now separated out and still remains to be solved: ''how to configure and invoke a Parameter-Functor?''
This commit is contained in:
parent
3a3b7e4dd7
commit
07410e14f1
3 changed files with 286 additions and 95 deletions
|
|
@ -25,7 +25,7 @@
|
||||||
** the aforementioned »network of Render Nodes.« At this point, external functionality must actually
|
** the aforementioned »network of Render Nodes.« At this point, external functionality must actually
|
||||||
** be connected to internal structures: this purpose is served by the FeedManifold.
|
** be connected to internal structures: this purpose is served by the FeedManifold.
|
||||||
**
|
**
|
||||||
** This amounts to an tow-stage adaptation process. Firstly, the plug-in for an external library
|
** This amounts to an two-stage adaptation process. Firstly, the plug-in for an external library
|
||||||
** has to wrap-up and package the library functions into an _invocation functor_ — which thereby
|
** has to wrap-up and package the library functions into an _invocation functor_ — which thereby
|
||||||
** creates a _low-level Specification_ of the functionality to invoke. This functor is picked up
|
** creates a _low-level Specification_ of the functionality to invoke. This functor is picked up
|
||||||
** and stored as a prototype within the associated render node. More specifically, each node can
|
** and stored as a prototype within the associated render node. More specifically, each node can
|
||||||
|
|
@ -46,7 +46,7 @@
|
||||||
** might have to create a wrapper type in cases where the external library requires to use a
|
** might have to create a wrapper type in cases where the external library requires to use a
|
||||||
** specific constructor function for buffers (if this requirement turns out as problematic,
|
** specific constructor function for buffers (if this requirement turns out as problematic,
|
||||||
** there is leeway to pass constructor arguments to such a wrapper — yet Lumiera will insist
|
** there is leeway to pass constructor arguments to such a wrapper — yet Lumiera will insist
|
||||||
** on managing the memory, so frameworks insisting on their own memory management will have
|
** on managing the memory, so frameworks enforcing their own memory management will have
|
||||||
** to be broken up and side-stepped, in order to be usable with Lumiera).
|
** to be broken up and side-stepped, in order to be usable with Lumiera).
|
||||||
** - when several and even mixed types of a kind must be given, e.g. several buffers or
|
** - when several and even mixed types of a kind must be given, e.g. several buffers or
|
||||||
** several parameters, then the processing functor should be written such as to
|
** several parameters, then the processing functor should be written such as to
|
||||||
|
|
@ -56,12 +56,12 @@
|
||||||
** A suitable storage layout is chosen at compile type, based on the given functor type.
|
** A suitable storage layout is chosen at compile type, based on the given functor type.
|
||||||
** - essentially, FeedManifold is structured storage with some default-wiring.
|
** - essentially, FeedManifold is structured storage with some default-wiring.
|
||||||
** - the trait functions #hasInput() and #hasParam() should be used by downstream code
|
** - the trait functions #hasInput() and #hasParam() should be used by downstream code
|
||||||
** to find out if some part of the storage is present and branch accordingly
|
** to find out if some part of the storage is present and branch accordingly...
|
||||||
** @todo 12/2024 figure out how constructor-arguments can be passed flexibly
|
** @todo 12/2024 figure out how constructor-arguments can be passed flexibly
|
||||||
** @remark in the first draft version of the Render Engine from 2009/2012, there was an entity
|
** @remark in the first draft version of the Render Engine from 2009/2012, there was an entity
|
||||||
** called `BuffTable`, which however provided additional buffer-management functionality.
|
** called `BuffTable`, which however provided additional buffer-management capabilities.
|
||||||
** This name describes well the basic functionality, which can be hard to see with all
|
** This name describes well the basic functionality, which can be hard to see with all
|
||||||
** this additional meta-programming related to the flexible functor signature. When it
|
** the additional meta-programming related to the flexible functor signature. When it
|
||||||
** comes to actual invocation, we collect input buffers from predecessor nodes and
|
** comes to actual invocation, we collect input buffers from predecessor nodes and
|
||||||
** we prepare output buffers, and then we pass both to a processing function.
|
** we prepare output buffers, and then we pass both to a processing function.
|
||||||
**
|
**
|
||||||
|
|
@ -70,6 +70,7 @@
|
||||||
** We have still to reach the point were the engine becomes operational!!!
|
** We have still to reach the point were the engine becomes operational!!!
|
||||||
** @see NodeBase_test
|
** @see NodeBase_test
|
||||||
** @see weaving-pattern-builder.hpp
|
** @see weaving-pattern-builder.hpp
|
||||||
|
** @see lib::meta::ElmTypes in variadic-helper.hpp : uniform processing of »tuple-like« data
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -158,6 +159,7 @@ namespace engine {
|
||||||
* which all may be simple types, tuples or arrays.
|
* which all may be simple types, tuples or arrays.
|
||||||
* @note »Buffers« are always accepted by pointer, which allows
|
* @note »Buffers« are always accepted by pointer, which allows
|
||||||
* to distinguish parameter and data «slots«
|
* to distinguish parameter and data «slots«
|
||||||
|
* @see VariadicHelper_test::rebuild_variadic()
|
||||||
*/
|
*/
|
||||||
template<class FUN>
|
template<class FUN>
|
||||||
struct _ProcFun
|
struct _ProcFun
|
||||||
|
|
@ -247,33 +249,46 @@ namespace engine {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configuration context for a FeedManifold.
|
||||||
|
* This type-rebinding helper provides a storage configuration
|
||||||
|
* specifically tailored to serve the invocation of \a FUN
|
||||||
|
* @note storage segments for input and parameters are only present
|
||||||
|
* when the given function is classified by _ProcFun<FUN>
|
||||||
|
* as handling input and / or parameters.
|
||||||
|
* @remark since BuffHandle is not default-constructible, but must be
|
||||||
|
* retrieved from a BufferProvider rather, a chunk of uninitialised
|
||||||
|
* storage is used to accept the `BuffHandle`s allocated and populated
|
||||||
|
* with results from preceding Nodes.
|
||||||
|
*/
|
||||||
template<class FUN>
|
template<class FUN>
|
||||||
struct _StorageSetup
|
struct _StorageSetup
|
||||||
{
|
{
|
||||||
using _Trait = _ProcFun<FUN>;
|
using _Trait = _ProcFun<FUN>;
|
||||||
enum{ FAN_I = _Trait::FAN_I
|
|
||||||
, FAN_O = _Trait::FAN_O
|
|
||||||
};
|
|
||||||
|
|
||||||
static constexpr bool hasInput() { return _Trait::hasInput(); }
|
static constexpr bool hasInput() { return _Trait::hasInput(); }
|
||||||
static constexpr bool hasParam() { return _Trait::hasParam(); }
|
static constexpr bool hasParam() { return _Trait::hasParam(); }
|
||||||
|
|
||||||
using ParSig = typename _Trait::SigP;
|
enum{ FAN_P = hasParam()? _Trait::FAN_P : 0
|
||||||
|
, FAN_I = hasInput()? _Trait::FAN_I : 0
|
||||||
|
, FAN_O = _Trait::FAN_O
|
||||||
|
};
|
||||||
|
|
||||||
template<size_t fan>
|
template<size_t fan>
|
||||||
using BuffS = lib::UninitialisedStorage<BuffHandle, fan>;
|
using BuffS = lib::UninitialisedStorage<BuffHandle, fan>;
|
||||||
|
// ^^^ can not be default-constructed
|
||||||
using BuffI = BuffS<FAN_I>;
|
using BuffI = BuffS<FAN_I>;
|
||||||
using BuffO = BuffS<FAN_O>;
|
using BuffO = BuffS<FAN_O>;
|
||||||
|
|
||||||
using ArgI = typename _Trait::SigI;
|
using Param = std::conditional_t<hasParam(), typename _Trait::SigP, std::tuple<>>;
|
||||||
|
using ArgI = std::conditional_t<hasInput(), typename _Trait::SigI, std::tuple<>>;
|
||||||
using ArgO = typename _Trait::SigO;
|
using ArgO = typename _Trait::SigO;
|
||||||
|
|
||||||
|
|
||||||
/** FeedManifold building block: hold parameter data */
|
/** FeedManifold building block: hold parameter data */
|
||||||
struct ParamStorage
|
struct ParamStorage
|
||||||
{
|
{
|
||||||
ParSig param;
|
Param param;
|
||||||
|
|
||||||
ParamStorage() = default;
|
ParamStorage() = default;
|
||||||
|
|
||||||
|
|
@ -283,12 +298,14 @@ namespace engine {
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** FeedManifold building block: hold input buffer pointers */
|
||||||
struct BufferSlot_Input
|
struct BufferSlot_Input
|
||||||
{
|
{
|
||||||
BuffI inBuff;
|
BuffI inBuff;
|
||||||
ArgI inArgs{};
|
ArgI inArgs{};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** FeedManifold building block: hold output buffer pointers */
|
||||||
struct BufferSlot_Output
|
struct BufferSlot_Output
|
||||||
{
|
{
|
||||||
BuffO outBuff;
|
BuffO outBuff;
|
||||||
|
|
@ -296,7 +313,7 @@ namespace engine {
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename F>
|
template<typename F>
|
||||||
using enable_if_hasParam = typename lib::meta::enable_if_c<_ProcFun<std::decay_t<F>>::hasParam()>::Type;
|
using enable_if_hasParam = typename lib::meta::enable_if_c<_ProcFun<F>::hasParam()>::type;
|
||||||
|
|
||||||
template<class X>
|
template<class X>
|
||||||
using NotProvided = Tagged<lib::meta::NullType, X>;
|
using NotProvided = Tagged<lib::meta::NullType, X>;
|
||||||
|
|
@ -304,13 +321,14 @@ namespace engine {
|
||||||
template<bool yes, class B>
|
template<bool yes, class B>
|
||||||
using Provide_if = std::conditional_t<yes, B, NotProvided<B>>;
|
using Provide_if = std::conditional_t<yes, B, NotProvided<B>>;
|
||||||
|
|
||||||
using FeedOutput = BufferSlot_Output;
|
using FeedOutput = BufferSlot_Output;
|
||||||
using FeedInput = Provide_if<hasInput(), BufferSlot_Input>;
|
using FeedInput = Provide_if<hasInput(), BufferSlot_Input>;
|
||||||
using FeedParam = Provide_if<hasParam(), ParamStorage>;
|
using FeedParam = Provide_if<hasParam(), ParamStorage>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Data Storage block for the FeedManifold
|
* Data Storage block for the FeedManifold
|
||||||
* Flexibly configured based on the processing function.
|
* Flexibly configured based on the processing function.
|
||||||
|
* @remark mixed-in as base-class
|
||||||
*/
|
*/
|
||||||
struct Storage
|
struct Storage
|
||||||
: util::NonCopyable
|
: util::NonCopyable
|
||||||
|
|
@ -325,10 +343,9 @@ namespace engine {
|
||||||
: process{forward<F> (fun)}
|
: process{forward<F> (fun)}
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
template<typename F, typename...INIT, typename =disable_if_self<Storage,F>
|
template<typename F, typename =enable_if_hasParam<F>>
|
||||||
, typename =enable_if_hasParam<F>>
|
Storage (Param p, F&& fun)
|
||||||
Storage (F&& fun, INIT&& ...paramInit)
|
: FeedParam{move (p)}
|
||||||
: FeedParam{forward<INIT> (paramInit)...}
|
|
||||||
, process{forward<F> (fun)}
|
, process{forward<F> (fun)}
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
@ -339,10 +356,33 @@ namespace engine {
|
||||||
* Adapter to connect input/output buffers to a processing functor backed by an external library.
|
* Adapter to connect input/output buffers to a processing functor backed by an external library.
|
||||||
* Essentially, this is structured storage tailored specifically to a given functor signature.
|
* Essentially, this is structured storage tailored specifically to a given functor signature.
|
||||||
* Tables of buffer handles are provided for the downstream code to store results received from
|
* Tables of buffer handles are provided for the downstream code to store results received from
|
||||||
* preceding odes or to pick up calculated data after the invocation. From these BuffHandle entries,
|
* preceding nodes or to pick up calculated data after invocation. From these BuffHandle entries,
|
||||||
* buffer pointers are retrieved and packaged suitably for use by the wrapped invocation functor.
|
* buffer pointers are retrieved and packaged suitably for use by the wrapped invocation functor.
|
||||||
* This setup is used by a »weaving pattern« within the invocation of a processing node for the
|
* This setup is intended for use by a »weaving pattern« within the invocation of a processing node
|
||||||
* purpose of media processing or data calculation.
|
* for the purpose of media processing or data calculation.
|
||||||
|
*
|
||||||
|
* # Interface exposed to down-stream code
|
||||||
|
* Data fields are typed to suit the given functor \a FUN, and are present only when needed
|
||||||
|
* - `param` holds a parameter value or tuple of values, as passed to the constructor
|
||||||
|
* - `inBuff` and `outBuff` are chunks of \ref UninitialisedStorage with suitable dimension
|
||||||
|
* to hold an array of \ref BuffHandle to organise input- and output-buffers
|
||||||
|
* - the constants `FAN_P`, `FAN_I` and `FAN_O` reflect the number of individual elements
|
||||||
|
* connected for parameters, inputs and outputs respectively.
|
||||||
|
* - `inBuff.array()` and `outBuff.array()` expose the storage for handles as std::array,
|
||||||
|
* with suitable dimension, subscript-operator and iteration. Note however that the
|
||||||
|
* storage itself is _uninitialised_ and existing handles must be _emplaced_ by
|
||||||
|
* invoking copy-construction e.g. `outBuff.createAt (idx, givenHandle)`
|
||||||
|
* - after completely populating all BuffHandle slots this way, FeedManifold::connect()
|
||||||
|
* will pick up buffer pointers and transfer them into the associated locations in
|
||||||
|
* the input and output arguments `inArgs` and `outArgs`
|
||||||
|
* - finally, FeedManifold::invoke() will trigger the stored processing functor,
|
||||||
|
* passing `param`, `inArgs` and `outArgs` as appropriate.
|
||||||
|
* The `constexpr` functions #hasInput() and #hasParam() can be used to find out
|
||||||
|
* if the functor was classified to take inputs and / or parameters.
|
||||||
|
* @note destructors of parameter values will be invoked, but nothing will be done
|
||||||
|
* for the BuffHandle elements; the caller is responsible to perform the
|
||||||
|
* buffer management protocol, i.e. invoke BuffHandle::emit()
|
||||||
|
* and BuffHandle::release()
|
||||||
*
|
*
|
||||||
* @todo WIP-WIP 12/24 now adding support for arbitrary parameters /////////////////////////////////////TICKET #1386
|
* @todo WIP-WIP 12/24 now adding support for arbitrary parameters /////////////////////////////////////TICKET #1386
|
||||||
*/
|
*/
|
||||||
|
|
@ -369,8 +409,10 @@ namespace engine {
|
||||||
|
|
||||||
using ArgI = typename _S::ArgI;
|
using ArgI = typename _S::ArgI;
|
||||||
using ArgO = typename _S::ArgO;
|
using ArgO = typename _S::ArgO;
|
||||||
|
using Param = typename _S::Param;
|
||||||
enum{ FAN_I = _S::FAN_I
|
enum{ FAN_I = _S::FAN_I
|
||||||
, FAN_O = _S::FAN_O
|
, FAN_O = _S::FAN_O
|
||||||
|
, FAN_P = _S::FAN_P
|
||||||
};
|
};
|
||||||
|
|
||||||
static constexpr bool hasInput() { return _S::hasInput(); }
|
static constexpr bool hasInput() { return _S::hasInput(); }
|
||||||
|
|
@ -415,10 +457,16 @@ namespace engine {
|
||||||
void
|
void
|
||||||
invoke()
|
invoke()
|
||||||
{
|
{
|
||||||
if constexpr (hasInput())
|
if constexpr (hasParam())
|
||||||
_F::process (_F::inArgs, _F::outArgs);
|
if constexpr (hasInput())
|
||||||
|
_F::process (_F::param, _F::inArgs, _F::outArgs);
|
||||||
|
else
|
||||||
|
_F::process (_F::param, _F::outArgs);
|
||||||
else
|
else
|
||||||
_F::process (_F::outArgs);
|
if constexpr (hasInput())
|
||||||
|
_F::process (_F::inArgs, _F::outArgs);
|
||||||
|
else
|
||||||
|
_F::process (_F::outArgs);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,7 @@ using std::tuple;
|
||||||
using std::array;
|
using std::array;
|
||||||
using util::isSameAdr;
|
using util::isSameAdr;
|
||||||
using lib::test::showType;
|
using lib::test::showType;
|
||||||
|
using lib::izip;
|
||||||
|
|
||||||
|
|
||||||
namespace steam {
|
namespace steam {
|
||||||
|
|
@ -75,6 +76,23 @@ namespace test {
|
||||||
|
|
||||||
|
|
||||||
/** @test the FeedManifold as adapter between Engine and processing library
|
/** @test the FeedManifold as adapter between Engine and processing library
|
||||||
|
* - bind local λ with various admissible signatures
|
||||||
|
* - construct specifically tailored FeedManifold types
|
||||||
|
* - use the DiagnosticBufferProvider for test buffers
|
||||||
|
* - create FeedManifold instance, passing the λ and additional parameters
|
||||||
|
* - connect BuffHandle for these buffers into the FeedManifold instance
|
||||||
|
* - trigger invocation of the function
|
||||||
|
* - look into the buffers and verify effect
|
||||||
|
* @remark within each Render Node, a FeedManifold is used as junction
|
||||||
|
* to tap into processing functionality provided by external libraries.
|
||||||
|
* Those will be adapted by a Plug-in, to be loaded by the Lumiera core
|
||||||
|
* application. The _signature of a functor_ linked to the FeedManifold
|
||||||
|
* is used as kind of a _low-level-specification_ how to invoke external
|
||||||
|
* processing functions. Obviously this must be complemented by a more
|
||||||
|
* high-level descriptor, which is interpreted by the Builder to connect
|
||||||
|
* a suitable structure of Render Nodes.
|
||||||
|
* @see feed-manifold.h
|
||||||
|
* @see NodeLinkage_test
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
verify_FeedManifold()
|
verify_FeedManifold()
|
||||||
|
|
@ -84,11 +102,15 @@ namespace test {
|
||||||
using Buffer = long;
|
using Buffer = long;
|
||||||
|
|
||||||
|
|
||||||
|
//______________________________________________________________
|
||||||
// Example-1: a FeedManifold to adapt a simple generator function
|
// Example-1: a FeedManifold to adapt a simple generator function
|
||||||
auto fun_singleOut = [&](Buffer* buff) { *buff = r1; };
|
auto fun_singleOut = [&](Buffer* buff) { *buff = r1; };
|
||||||
using M1 = FeedManifold<decltype(fun_singleOut)>;
|
using M1 = FeedManifold<decltype(fun_singleOut)>;
|
||||||
CHECK (not M1::hasInput());
|
CHECK (not M1::hasInput());
|
||||||
CHECK (not M1::hasParam());
|
CHECK (not M1::hasParam());
|
||||||
|
CHECK (0 == M1::FAN_P);
|
||||||
|
CHECK (0 == M1::FAN_I);
|
||||||
|
CHECK (1 == M1::FAN_O);
|
||||||
// instantiate...
|
// instantiate...
|
||||||
M1 m1{fun_singleOut};
|
M1 m1{fun_singleOut};
|
||||||
CHECK (1 == m1.outBuff.array().size());
|
CHECK (1 == m1.outBuff.array().size());
|
||||||
|
|
@ -113,6 +135,7 @@ namespace test {
|
||||||
CHECK (buff.accessAs<long>() == r1); // result: the random number r1 was written into the buffer.
|
CHECK (buff.accessAs<long>() == r1); // result: the random number r1 was written into the buffer.
|
||||||
|
|
||||||
|
|
||||||
|
//_____________________________________________________________
|
||||||
// Example-2: adapt a function to process input -> output buffer
|
// Example-2: adapt a function to process input -> output buffer
|
||||||
auto fun_singleInOut = [](Buffer* in, Buffer* out) { *out = *in + 1; };
|
auto fun_singleInOut = [](Buffer* in, Buffer* out) { *out = *in + 1; };
|
||||||
using M2 = FeedManifold<decltype(fun_singleInOut)>;
|
using M2 = FeedManifold<decltype(fun_singleInOut)>;
|
||||||
|
|
@ -151,6 +174,7 @@ namespace test {
|
||||||
CHECK (buffOut.accessAs<long>() == r1+1);
|
CHECK (buffOut.accessAs<long>() == r1+1);
|
||||||
|
|
||||||
|
|
||||||
|
//______________________________________
|
||||||
// Example-3: accept complex buffer setup
|
// Example-3: accept complex buffer setup
|
||||||
using Sequence = array<Buffer,3>;
|
using Sequence = array<Buffer,3>;
|
||||||
using Channels = array<Buffer*,3>;
|
using Channels = array<Buffer*,3>;
|
||||||
|
|
@ -158,7 +182,7 @@ namespace test {
|
||||||
auto fun_complexInOut = [](Channels in, Compound out)
|
auto fun_complexInOut = [](Channels in, Compound out)
|
||||||
{
|
{
|
||||||
auto [seq,extra] = out;
|
auto [seq,extra] = out;
|
||||||
for (auto [i,b] : lib::izip(in))
|
for (auto [i,b] : izip(in))
|
||||||
{
|
{
|
||||||
(*seq)[i] = *b + 1;
|
(*seq)[i] = *b + 1;
|
||||||
*extra += *b;
|
*extra += *b;
|
||||||
|
|
@ -216,6 +240,76 @@ namespace test {
|
||||||
CHECK ( o01 == *ia1+1);
|
CHECK ( o01 == *ia1+1);
|
||||||
CHECK ( o02 == *ia2+1);
|
CHECK ( o02 == *ia2+1);
|
||||||
CHECK (*oa1 == -55 + *ia0+*ia1+*ia2); ///////////////////////////////////////////OOO should be -33
|
CHECK (*oa1 == -55 + *ia0+*ia1+*ia2); ///////////////////////////////////////////OOO should be -33
|
||||||
|
|
||||||
|
|
||||||
|
//_________________________________
|
||||||
|
// Example-4: pass a parameter tuple
|
||||||
|
using Params = tuple<short,long>;
|
||||||
|
// Note: demonstrates mix of complex params, an array for input, but just a simple output buffer
|
||||||
|
auto fun_ParamInOut = [](Params param, Channels in, Buffer* out)
|
||||||
|
{
|
||||||
|
auto [s,l] = param;
|
||||||
|
*out = 0;
|
||||||
|
for (Buffer* b : in)
|
||||||
|
*out += (s+l) * (*b);
|
||||||
|
};
|
||||||
|
using M4 = FeedManifold<decltype(fun_ParamInOut)>;
|
||||||
|
CHECK (M4::hasInput());
|
||||||
|
CHECK (M4::hasParam());
|
||||||
|
CHECK (2 == M4::FAN_P);
|
||||||
|
CHECK (3 == M4::FAN_I);
|
||||||
|
CHECK (1 == M4::FAN_O);
|
||||||
|
CHECK (showType<M4::ArgI>() == "array<long*, 3ul>"_expect);
|
||||||
|
CHECK (showType<M4::ArgO>() == "long *"_expect);
|
||||||
|
CHECK (showType<M4::Param>() == "tuple<short, long>"_expect);
|
||||||
|
|
||||||
|
// Note: instantiate passing param values as extra arguments
|
||||||
|
short r2 = 1+rani(10);
|
||||||
|
long r3 = rani(1000);
|
||||||
|
M4 m4{Params{r2,r3}, fun_ParamInOut}; // parameters directly given by-value
|
||||||
|
auto& [p0,p1] = m4.param;
|
||||||
|
CHECK (p0 == r2); // parameter values exposed through manifold
|
||||||
|
CHECK (p1 == r3);
|
||||||
|
|
||||||
|
// wire-in existing buffers for this example
|
||||||
|
m4.inBuff.createAt (0, buffI0);
|
||||||
|
m4.inBuff.createAt (1, buffI1);
|
||||||
|
m4.inBuff.createAt (2, buffI2);
|
||||||
|
m4.outBuff.createAt(0, buffO1);
|
||||||
|
CHECK (*ia0 == r1 ); // existing values in the buffers....
|
||||||
|
CHECK (*ia1 == r1+1);
|
||||||
|
CHECK (*ia2 == -55 ); /////////////////////////////////////////////////////OOO should be -22
|
||||||
|
CHECK (*oa1 == -55 + *ia0+*ia1+*ia2); ///////////////////////////////////////////OOO should be -33
|
||||||
|
|
||||||
|
m4.connect();
|
||||||
|
m4.invoke(); // processing combines input buffers with parameters
|
||||||
|
CHECK (*oa1 == (r2+r3) * (r1 + r1+1 -55)); /////////////////////////////////////OOO should be -22
|
||||||
|
|
||||||
|
|
||||||
|
//______________________________________
|
||||||
|
// Example-5: simple parameter and output
|
||||||
|
auto fun_singleParamOut = [&](short param, Buffer* buff) { *buff = param-1; };
|
||||||
|
using M5 = FeedManifold<decltype(fun_singleParamOut)>;
|
||||||
|
CHECK (not M5::hasInput());
|
||||||
|
CHECK ( M5::hasParam());
|
||||||
|
CHECK (1 == M5::FAN_P);
|
||||||
|
CHECK (0 == M5::FAN_I);
|
||||||
|
CHECK (1 == M5::FAN_O);
|
||||||
|
CHECK (showType<M5::ArgI>() == "tuple<>"_expect);
|
||||||
|
CHECK (showType<M5::ArgO>() == "long *"_expect);
|
||||||
|
CHECK (showType<M5::Param>() == "short"_expect);
|
||||||
|
|
||||||
|
// instantiate, directly passing param value
|
||||||
|
M5 m5{r2, fun_singleParamOut};
|
||||||
|
// wire with one output buffer
|
||||||
|
m5.outBuff.createAt(0, buffO1);
|
||||||
|
m5.connect();
|
||||||
|
CHECK (m5.param == r2); // the parameter value passed to the ctor
|
||||||
|
// CHECK (m5.inArgs ); // does not compile because storage field is not provided
|
||||||
|
CHECK (*m5.outArgs == *oa1); // still previous value sitting in the buffer...
|
||||||
|
|
||||||
|
m5.invoke();
|
||||||
|
CHECK (*oa1 == r2 - 1); // processing has placed result based on param into output buffer
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26196,9 +26196,7 @@
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1576757228532" ID="ID_292264284" MODIFIED="1576757344691" TEXT="es ist eine direkte Konsequenz der Abstraktion">
|
<node CREATED="1576757228532" ID="ID_292264284" MODIFIED="1576757344691" TEXT="es ist eine direkte Konsequenz der Abstraktion">
|
||||||
<richcontent TYPE="NOTE"><html>
|
<richcontent TYPE="NOTE"><html>
|
||||||
<head>
|
<head/>
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
<body>
|
||||||
<p>
|
<p>
|
||||||
und zwar, genauer gesagt, eine Konsequenz der Entscheidung, nicht nur einen ViewHook, sondern ein ViewHooked zu machen. Ich hab die Beziehung in's Strukturelle hinen genommen. Damit muß auch die Wurzel diese Struktur unterstützen, und damit wird an dieser Stelle die Abstraktion undicht.
|
und zwar, genauer gesagt, eine Konsequenz der Entscheidung, nicht nur einen ViewHook, sondern ein ViewHooked zu machen. Ich hab die Beziehung in's Strukturelle hinen genommen. Damit muß auch die Wurzel diese Struktur unterstützen, und damit wird an dieser Stelle die Abstraktion undicht.
|
||||||
|
|
@ -26850,9 +26848,7 @@
|
||||||
</body>
|
</body>
|
||||||
</html></richcontent>
|
</html></richcontent>
|
||||||
<richcontent TYPE="NOTE"><html>
|
<richcontent TYPE="NOTE"><html>
|
||||||
<head>
|
<head/>
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
<body>
|
||||||
<p>
|
<p>
|
||||||
Ich habe beim Upgrade auf Debian-Stretch mal nachgemessen: tatsächlich hat mein Display 94dpi. Demnach wäre der andere weithin übliche Wert von 96dpi präziser. Jedoch bin ich nach mehreren Experimenten bei 90dpi geblieben, da für mich so die Schriftarten die „richtige Größe“ haben — das mag auch daran liegen, daß ich leicht kurzsichtig bin und typischeweise etwas näher am Bildschirm sitze.
|
Ich habe beim Upgrade auf Debian-Stretch mal nachgemessen: tatsächlich hat mein Display 94dpi. Demnach wäre der andere weithin übliche Wert von 96dpi präziser. Jedoch bin ich nach mehreren Experimenten bei 90dpi geblieben, da für mich so die Schriftarten die „richtige Größe“ haben — das mag auch daran liegen, daß ich leicht kurzsichtig bin und typischeweise etwas näher am Bildschirm sitze.
|
||||||
|
|
@ -27481,9 +27477,7 @@
|
||||||
<icon BUILTIN="button_ok"/>
|
<icon BUILTIN="button_ok"/>
|
||||||
<node COLOR="#435e98" CREATED="1677718715763" FOLDED="true" ID="ID_354383908" MODIFIED="1677775372224" TEXT="Balken ist unten zu kurz">
|
<node COLOR="#435e98" CREATED="1677718715763" FOLDED="true" ID="ID_354383908" MODIFIED="1677775372224" TEXT="Balken ist unten zu kurz">
|
||||||
<richcontent TYPE="NOTE"><html>
|
<richcontent TYPE="NOTE"><html>
|
||||||
<head>
|
<head/>
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
<body>
|
||||||
<p>
|
<p>
|
||||||
...aber der Code schaut <i>komplett richtig</i> aus; man muß ja die Differenz zwischen oberem und unterem Anker als Höhe ansetzen, und man muß dabei bedenken, daß die Zeichnung des Balkens dann skaliert wird, jedoch <i>nach Skalierung</i> genau bis zum unteren Anker reichen soll (und eben dieses funktioniert nicht)
|
...aber der Code schaut <i>komplett richtig</i> aus; man muß ja die Differenz zwischen oberem und unterem Anker als Höhe ansetzen, und man muß dabei bedenken, daß die Zeichnung des Balkens dann skaliert wird, jedoch <i>nach Skalierung</i> genau bis zum unteren Anker reichen soll (und eben dieses funktioniert nicht)
|
||||||
|
|
@ -28069,9 +28063,7 @@
|
||||||
<node CREATED="1677626560803" ID="ID_1545300397" MODIFIED="1677626590307" TEXT="DPI ⟼ Anzahl Pixel per inch"/>
|
<node CREATED="1677626560803" ID="ID_1545300397" MODIFIED="1677626590307" TEXT="DPI ⟼ Anzahl Pixel per inch"/>
|
||||||
<node CREATED="1677626435688" ID="ID_1985359358" MODIFIED="1677626725417">
|
<node CREATED="1677626435688" ID="ID_1985359358" MODIFIED="1677626725417">
|
||||||
<richcontent TYPE="NODE"><html>
|
<richcontent TYPE="NODE"><html>
|
||||||
<head>
|
<head/>
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
<body>
|
||||||
<p>
|
<p>
|
||||||
daraus absolute Font-Size und weiter wie <font color="#8323d6">[Fall-1]</font>
|
daraus absolute Font-Size und weiter wie <font color="#8323d6">[Fall-1]</font>
|
||||||
|
|
@ -29182,9 +29174,7 @@
|
||||||
<icon BUILTIN="button_ok"/>
|
<icon BUILTIN="button_ok"/>
|
||||||
<node CREATED="1555808300703" ID="ID_621465643" MODIFIED="1576282358063" TEXT="kann/sollte die Lösong mehr integriert sein?">
|
<node CREATED="1555808300703" ID="ID_621465643" MODIFIED="1576282358063" TEXT="kann/sollte die Lösong mehr integriert sein?">
|
||||||
<richcontent TYPE="NOTE"><html>
|
<richcontent TYPE="NOTE"><html>
|
||||||
<head>
|
<head/>
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
<body>
|
||||||
<p>
|
<p>
|
||||||
sollten z.B. die Konstruktor-Funktionen nicht unmittelbar mit definiert werden?
|
sollten z.B. die Konstruktor-Funktionen nicht unmittelbar mit definiert werden?
|
||||||
|
|
@ -30387,9 +30377,7 @@
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1672847699754" ID="ID_921332802" MODIFIED="1672867412724" TEXT="Feststellung: Größe "stößt an" an gesetzter Canvas-Größe">
|
<node CREATED="1672847699754" ID="ID_921332802" MODIFIED="1672867412724" TEXT="Feststellung: Größe "stößt an" an gesetzter Canvas-Größe">
|
||||||
<richcontent TYPE="NOTE"><html>
|
<richcontent TYPE="NOTE"><html>
|
||||||
<head>
|
<head/>
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
<body>
|
||||||
<p>
|
<p>
|
||||||
Beispiel:
|
Beispiel:
|
||||||
|
|
@ -31389,9 +31377,7 @@
|
||||||
<node CREATED="1562854835241" ID="ID_766058517" MODIFIED="1562854840584" TEXT="mit geeignetem Refcounting">
|
<node CREATED="1562854835241" ID="ID_766058517" MODIFIED="1562854840584" TEXT="mit geeignetem Refcounting">
|
||||||
<node CREATED="1562854871923" ID="ID_332819323" MODIFIED="1562854888696" TEXT="~WidgetPath()">
|
<node CREATED="1562854871923" ID="ID_332819323" MODIFIED="1562854888696" TEXT="~WidgetPath()">
|
||||||
<richcontent TYPE="NOTE"><html>
|
<richcontent TYPE="NOTE"><html>
|
||||||
<head>
|
<head/>
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
<body>
|
||||||
<p>
|
<p>
|
||||||
WidgetPath::~WidgetPath() noexcept
|
WidgetPath::~WidgetPath() noexcept
|
||||||
|
|
@ -32585,9 +32571,7 @@
|
||||||
<node CREATED="1564500576627" ID="ID_979278974" MODIFIED="1564500613622" TEXT="weil das Hinzufügen von Klassen eine vorgesehene Operation ist"/>
|
<node CREATED="1564500576627" ID="ID_979278974" MODIFIED="1564500613622" TEXT="weil das Hinzufügen von Klassen eine vorgesehene Operation ist"/>
|
||||||
<node CREATED="1564500614693" ID="ID_178343581" MODIFIED="1564500683747" TEXT="Hinzufügen eines CssProvider ist eine aufwendige Sache">
|
<node CREATED="1564500614693" ID="ID_178343581" MODIFIED="1564500683747" TEXT="Hinzufügen eines CssProvider ist eine aufwendige Sache">
|
||||||
<richcontent TYPE="NOTE"><html>
|
<richcontent TYPE="NOTE"><html>
|
||||||
<head>
|
<head/>
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
<body>
|
||||||
<p>
|
<p>
|
||||||
da wird ggfs eine neue CSS-Kaskade erstellt, oder die bestehende Kaskade erweitert.
|
da wird ggfs eine neue CSS-Kaskade erstellt, oder die bestehende Kaskade erweitert.
|
||||||
|
|
@ -34027,9 +34011,7 @@
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1584202974665" ID="ID_920397941" MODIFIED="1584203052619" TEXT="eigentlich ehr vom Anzeigestil abhängig">
|
<node CREATED="1584202974665" ID="ID_920397941" MODIFIED="1584203052619" TEXT="eigentlich ehr vom Anzeigestil abhängig">
|
||||||
<richcontent TYPE="NOTE"><html>
|
<richcontent TYPE="NOTE"><html>
|
||||||
<head>
|
<head/>
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
<body>
|
||||||
<p>
|
<p>
|
||||||
oder umgekeht....
|
oder umgekeht....
|
||||||
|
|
@ -34939,9 +34921,7 @@
|
||||||
<node CREATED="1666451404745" ID="ID_1685238185" MODIFIED="1666451415979" TEXT="Clip muß seine eigene Ausdehnung festsetzen können"/>
|
<node CREATED="1666451404745" ID="ID_1685238185" MODIFIED="1666451415979" TEXT="Clip muß seine eigene Ausdehnung festsetzen können"/>
|
||||||
<node CREATED="1666451422758" ID="ID_1448482248" MODIFIED="1666451488041">
|
<node CREATED="1666451422758" ID="ID_1448482248" MODIFIED="1666451488041">
|
||||||
<richcontent TYPE="NODE"><html>
|
<richcontent TYPE="NODE"><html>
|
||||||
<head>
|
<head/>
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
<body>
|
||||||
<p>
|
<p>
|
||||||
<u>Lösung</u>: Interface <font face="Monospaced"><b>DisplayMetric</b></font> im <font face="Monospaced" color="#1e128f">CanvasHook</font>
|
<u>Lösung</u>: Interface <font face="Monospaced"><b>DisplayMetric</b></font> im <font face="Monospaced" color="#1e128f">CanvasHook</font>
|
||||||
|
|
@ -35300,9 +35280,7 @@
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1675384884653" ID="ID_1042919827" MODIFIED="1675385087573" TEXT="Lifecycle für Content-Renderer potentiell problematisch">
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1675384884653" ID="ID_1042919827" MODIFIED="1675385087573" TEXT="Lifecycle für Content-Renderer potentiell problematisch">
|
||||||
<richcontent TYPE="NOTE"><html>
|
<richcontent TYPE="NOTE"><html>
|
||||||
<head>
|
<head/>
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
<body>
|
||||||
<p>
|
<p>
|
||||||
...da das ElementBoxWidget nicht die ownership für sein Kind-Widget (den ContentRenderer) übernimmt; daher muß das Kind länger leben als das ElementBoxWidget, aber genau das ist <b>nicht gewährleistet</b>, wenn das Clip-Delegate von ElementBoxWidget <b>erbt</b>.
|
...da das ElementBoxWidget nicht die ownership für sein Kind-Widget (den ContentRenderer) übernimmt; daher muß das Kind länger leben als das ElementBoxWidget, aber genau das ist <b>nicht gewährleistet</b>, wenn das Clip-Delegate von ElementBoxWidget <b>erbt</b>.
|
||||||
|
|
@ -36009,9 +35987,7 @@
|
||||||
<icon BUILTIN="button_ok"/>
|
<icon BUILTIN="button_ok"/>
|
||||||
<node COLOR="#435e98" CREATED="1532788681197" FOLDED="true" HGAP="336" ID="ID_32192034" MODIFIED="1576282358033" TEXT="bei GTK selber abschauen" VSHIFT="-52">
|
<node COLOR="#435e98" CREATED="1532788681197" FOLDED="true" HGAP="336" ID="ID_32192034" MODIFIED="1576282358033" TEXT="bei GTK selber abschauen" VSHIFT="-52">
|
||||||
<richcontent TYPE="NOTE"><html>
|
<richcontent TYPE="NOTE"><html>
|
||||||
<head>
|
<head/>
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
<body>
|
||||||
<p>
|
<p>
|
||||||
erinnere mich, diverse Mechanismen gesehen zu haben,
|
erinnere mich, diverse Mechanismen gesehen zu haben,
|
||||||
|
|
@ -88412,10 +88388,10 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734310118603" ID="ID_1954508996" MODIFIED="1734310510263" TEXT="Feed-Manifold: Eigenschaften demonstrieren">
|
<node COLOR="#338800" CREATED="1734310118603" ID="ID_1954508996" MODIFIED="1734631398113" TEXT="Feed-Manifold: Eigenschaften demonstrieren">
|
||||||
<linktarget COLOR="#406cd3" DESTINATION="ID_1954508996" ENDARROW="Default" ENDINCLINATION="-484;30;" ID="Arrow_ID_640616380" SOURCE="ID_1710382999" STARTARROW="None" STARTINCLINATION="-2974;268;"/>
|
<linktarget COLOR="#406cd3" DESTINATION="ID_1954508996" ENDARROW="Default" ENDINCLINATION="-484;30;" ID="Arrow_ID_640616380" SOURCE="ID_1710382999" STARTARROW="None" STARTINCLINATION="-2974;268;"/>
|
||||||
<icon BUILTIN="pencil"/>
|
<icon BUILTIN="button_ok"/>
|
||||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734310213994" ID="ID_691754137" MODIFIED="1734556323351" TEXT="mehrere Varianten von Funktions-Signaturen vorstellen">
|
<node COLOR="#338800" CREATED="1734310213994" ID="ID_691754137" MODIFIED="1734631391185" TEXT="mehrere Varianten von Funktions-Signaturen vorstellen">
|
||||||
<icon BUILTIN="yes"/>
|
<icon BUILTIN="yes"/>
|
||||||
<node COLOR="#338800" CREATED="1734310245306" ID="ID_1881940952" MODIFIED="1734535951144" TEXT="reiner Output mit einem Buffer">
|
<node COLOR="#338800" CREATED="1734310245306" ID="ID_1881940952" MODIFIED="1734535951144" TEXT="reiner Output mit einem Buffer">
|
||||||
<icon BUILTIN="button_ok"/>
|
<icon BUILTIN="button_ok"/>
|
||||||
|
|
@ -88428,8 +88404,12 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
||||||
<node COLOR="#338800" CREATED="1734552381857" ID="ID_1059351113" LINK="#ID_1910303400" MODIFIED="1734556282597" TEXT="Input ⟼ Output mit komplexen Typen">
|
<node COLOR="#338800" CREATED="1734552381857" ID="ID_1059351113" LINK="#ID_1910303400" MODIFIED="1734556282597" TEXT="Input ⟼ Output mit komplexen Typen">
|
||||||
<icon BUILTIN="button_ok"/>
|
<icon BUILTIN="button_ok"/>
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734310306689" ID="ID_246862993" MODIFIED="1734310327544" TEXT="Input ⟼ Output mit einem Buffer mit einem Parameter">
|
<node COLOR="#338800" CREATED="1734625697475" ID="ID_215671450" MODIFIED="1734631607257" TEXT="Input ⟼ Output mit komplexem Mix + Parameter-Tupel">
|
||||||
<icon BUILTIN="flag-yellow"/>
|
<linktarget COLOR="#4dcd43" DESTINATION="ID_215671450" ENDARROW="Default" ENDINCLINATION="747;40;" ID="Arrow_ID_869346495" SOURCE="ID_641534673" STARTARROW="None" STARTINCLINATION="-627;30;"/>
|
||||||
|
<icon BUILTIN="button_ok"/>
|
||||||
|
</node>
|
||||||
|
<node COLOR="#338800" CREATED="1734310306689" ID="ID_246862993" MODIFIED="1734631358343" TEXT="einfacher Output mit einem Buffer mit einem Parameter-Wert">
|
||||||
|
<icon BUILTIN="button_ok"/>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node COLOR="#338800" CREATED="1734310333302" ID="ID_1944960168" MODIFIED="1734391162068" TEXT="jeweils eine Manifold erstellen">
|
<node COLOR="#338800" CREATED="1734310333302" ID="ID_1944960168" MODIFIED="1734391162068" TEXT="jeweils eine Manifold erstellen">
|
||||||
|
|
@ -88796,6 +88776,10 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
||||||
<icon BUILTIN="button_ok"/>
|
<icon BUILTIN="button_ok"/>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
|
<node COLOR="#338800" CREATED="1734631471232" ID="ID_1048829589" MODIFIED="1734631527235" TEXT="Feed-Prototype: Parameter-Behandlung zeigen">
|
||||||
|
<linktarget DESTINATION="ID_1048829589" ENDARROW="Default" ID="Arrow_ID_58841322" SOURCE="ID_1416331336" STARTARROW="None" STARTINCLINATION="-90;-5;" COLOR="#406cd3" ENDINCLINATION="-484;30;"/>
|
||||||
|
<icon BUILTIN="button_ok"/>
|
||||||
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1733525831136" ID="ID_1553180375" MODIFIED="1733527489987" TEXT="NodeBuilder_test">
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1733525831136" ID="ID_1553180375" MODIFIED="1733527489987" TEXT="NodeBuilder_test">
|
||||||
<icon BUILTIN="flag-yellow"/>
|
<icon BUILTIN="flag-yellow"/>
|
||||||
|
|
@ -92097,16 +92081,16 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
||||||
...und die neueren Compiler können sich auch nicht beschweren, daß wir anonyme Typen in die Storage binden, und obendrein sind so die ganzen Meta-Definitionen wirklich downstream nicht mehr sichtbar
|
...und die neueren Compiler können sich auch nicht beschweren, daß wir anonyme Typen in die Storage binden, und obendrein sind so die ganzen Meta-Definitionen wirklich downstream nicht mehr sichtbar
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1734583328473" ID="ID_1649151484" MODIFIED="1734583342689" TEXT="dann gibt man den Basis-Storage-Modulen explizit Namen"/>
|
<node CREATED="1734583328473" ID="ID_1649151484" MODIFIED="1734583342689" TEXT="dann gibt man den Basis-Storage-Modulen explizit Namen"/>
|
||||||
<node CREATED="1734583343988" ID="ID_430940225" MODIFIED="1734583360386" TEXT="und definiert dann erst die nested struct Storage"/>
|
<node CREATED="1734583343988" ID="ID_430940225" MODIFIED="1734583360386" TEXT="und definiert dann erst die nested struct Storage"/>
|
||||||
<node CREATED="1734583361711" ID="ID_568129151" MODIFIED="1734583372909" TEXT="FeedManifold erbt dann von dieser"/>
|
<node CREATED="1734583361711" ID="ID_568129151" MODIFIED="1734583372909" TEXT="FeedManifold erbt dann von dieser"/>
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734583395510" ID="ID_1700565848" MODIFIED="1734583633132" TEXT="muß dann einen weiteren Ctor auf dieser Basisklasse conditional sichtbar machen">
|
<node COLOR="#338800" CREATED="1734583395510" ID="ID_1700565848" MODIFIED="1734625568156" TEXT="muß dann einen weiteren Ctor auf dieser Basisklasse conditional sichtbar machen">
|
||||||
<icon BUILTIN="flag-yellow"/>
|
<icon BUILTIN="button_ok"/>
|
||||||
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1734583422523" ID="ID_907955668" MODIFIED="1734583446849" TEXT="puh .... FEHLER FEHLER FEHLER FEHLER">
|
<node BACKGROUND_COLOR="#e8d88a" COLOR="#d5017d" CREATED="1734583422523" ID="ID_907955668" MODIFIED="1734625367025" TEXT="puh .... FEHLER FEHLER FEHLER FEHLER">
|
||||||
|
<arrowlink COLOR="#fee7c1" DESTINATION="ID_1031755621" ENDARROW="Default" ENDINCLINATION="367;-22;" ID="Arrow_ID_988126033" STARTARROW="None" STARTINCLINATION="377;26;"/>
|
||||||
<icon BUILTIN="broken-line"/>
|
<icon BUILTIN="broken-line"/>
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1734583449376" ID="ID_1289337298" MODIFIED="1734583476552" TEXT="der Compiler prüft Copy-Konstruktoren"/>
|
<node CREATED="1734583449376" ID="ID_1289337298" MODIFIED="1734583476552" TEXT="der Compiler prüft Copy-Konstruktoren"/>
|
||||||
|
|
@ -92121,10 +92105,64 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
||||||
</html></richcontent>
|
</html></richcontent>
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1734583588029" ID="ID_442569333" MODIFIED="1734583600327" TEXT="muß disable_if_self<Storage,F> vorschalten"/>
|
<node CREATED="1734583588029" ID="ID_442569333" MODIFIED="1734583600327" TEXT="muß disable_if_self<Storage,F> vorschalten"/>
|
||||||
</node>
|
<node COLOR="#338800" CREATED="1734583606218" ID="ID_1419317245" MODIFIED="1734623582486" TEXT="compiliert wieder und bestehende Tests laufen....">
|
||||||
<node COLOR="#338800" CREATED="1734583606218" ID="ID_1419317245" MODIFIED="1734583618846" TEXT="compiliert wieder und bestehende Tests laufen....">
|
|
||||||
<icon BUILTIN="button_ok"/>
|
<icon BUILTIN="button_ok"/>
|
||||||
</node>
|
</node>
|
||||||
|
<node COLOR="#435e98" CREATED="1734623550923" ID="ID_1042555078" MODIFIED="1734625141081" TEXT="funktioniert aber noch nicht">
|
||||||
|
<icon BUILTIN="broken-line"/>
|
||||||
|
<node COLOR="#c9018d" CREATED="1734624810569" ID="ID_725229821" MODIFIED="1734625028735" TEXT="�� �� Panik...">
|
||||||
|
<icon BUILTIN="smiley-angry"/>
|
||||||
|
</node>
|
||||||
|
<node COLOR="#435e98" CREATED="1734624864987" ID="ID_817704364" MODIFIED="1734625134765" TEXT="Analyse...">
|
||||||
|
<icon BUILTIN="yes"/>
|
||||||
|
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1734624903372" ID="ID_951655525" MODIFIED="1734624977374">
|
||||||
|
<richcontent TYPE="NODE"><html>
|
||||||
|
<head/>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
enable_if_hasParam : verwendet statt <font face="Monospaced" color="#ac0909">Type</font> statt <font face="Monospaced" color="#ac0909">type</font>
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</richcontent>
|
||||||
|
<icon BUILTIN="broken-line"/>
|
||||||
|
</node>
|
||||||
|
<node COLOR="#ff00ca" CREATED="1734624978674" ID="ID_514782434" MODIFIED="1734625013697" TEXT="ja dann KANNs ja gar nicht funktionieren...">
|
||||||
|
<icon BUILTIN="ksmiletris"/>
|
||||||
|
</node>
|
||||||
|
<node BACKGROUND_COLOR="#db96af" COLOR="#fa002a" CREATED="1734625072838" ID="ID_1031755621" MODIFIED="1734625330133" TEXT="die Lösung ist gefährlich komplex">
|
||||||
|
<linktarget COLOR="#fee7c1" DESTINATION="ID_1031755621" ENDARROW="Default" ENDINCLINATION="367;-22;" ID="Arrow_ID_988126033" SOURCE="ID_907955668" STARTARROW="None" STARTINCLINATION="377;26;"/>
|
||||||
|
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
|
||||||
|
<icon BUILTIN="clanbomber"/>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1734625145459" ID="ID_1322521981" MODIFIED="1734625173692" TEXT="bessere Lösung: klare Argument-Ordnung">
|
||||||
|
<icon BUILTIN="idea"/>
|
||||||
|
<node CREATED="1734625178200" ID="ID_1065935269" MODIFIED="1734625203129" TEXT="kann davon ausgehen daß ohnehin das Parameter-Tuple als Wert vorliegt">
|
||||||
|
<icon BUILTIN="yes"/>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1734625205276" ID="ID_518154967" MODIFIED="1734625259337" TEXT="setzte dies an 1.Stelle ⟹ schließt dann auch copy-ctor aus">
|
||||||
|
<icon BUILTIN="idea"/>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1734625269435" ID="ID_1585355729" MODIFIED="1734625307890" TEXT="sollte trotzdem die enable_if_hasParam beibehalten ⟶ bessere Fehlermeldung"/>
|
||||||
|
</node>
|
||||||
|
<node COLOR="#338800" CREATED="1734625381943" ID="ID_755107673" MODIFIED="1734625507411" TEXT="im Test bestätigt: funktioniert">
|
||||||
|
<icon BUILTIN="button_ok"/>
|
||||||
|
</node>
|
||||||
|
<node COLOR="#436e98" CREATED="1734625522105" ID="ID_777408007" MODIFIED="1734625555155" TEXT="pfffffft........">
|
||||||
|
<font ITALIC="true" NAME="SansSerif" SIZE="10"/>
|
||||||
|
<icon BUILTIN="smiley-neutral"/>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
<node COLOR="#338800" CREATED="1734625584442" ID="ID_641534673" MODIFIED="1734631614375" TEXT="komplexer gemischter Aufruf im Unit-Test durchgespielt....">
|
||||||
|
<arrowlink COLOR="#4dcd43" DESTINATION="ID_215671450" ENDARROW="Default" ENDINCLINATION="747;40;" ID="Arrow_ID_869346495" STARTARROW="None" STARTINCLINATION="-627;30;"/>
|
||||||
|
<icon BUILTIN="button_ok"/>
|
||||||
|
<node COLOR="#435e98" CREATED="1734631621660" ID="ID_893434622" MODIFIED="1734631703465" TEXT="verwende ein Tupel von Parameter-Werten"/>
|
||||||
|
<node COLOR="#435e98" CREATED="1734631632906" ID="ID_1352652969" MODIFIED="1734631703467" TEXT="verwende ein Array für Eingabe-Puffer"/>
|
||||||
|
<node COLOR="#435e98" CREATED="1734631646081" ID="ID_1254772125" MODIFIED="1734631703467" TEXT="verwende aber direkten Pointer zur Ausgabe"/>
|
||||||
|
<node COLOR="#435e98" CREATED="1734631663263" ID="ID_1915555663" MODIFIED="1734631703467" TEXT="demonstriere auch reinen Output mit Parameter"/>
|
||||||
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1734226618888" ID="ID_758716189" MODIFIED="1734226624083" TEXT="Operationen">
|
<node CREATED="1734226618888" ID="ID_758716189" MODIFIED="1734226624083" TEXT="Operationen">
|
||||||
<node CREATED="1734226624933" ID="ID_1270095402" MODIFIED="1734282238319" TEXT="buildFeed(TurnoutSystem&) — statisch"/>
|
<node CREATED="1734226624933" ID="ID_1270095402" MODIFIED="1734282238319" TEXT="buildFeed(TurnoutSystem&) — statisch"/>
|
||||||
|
|
@ -92187,8 +92225,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
||||||
<i>beide Funktoren</i> müssen in den Typ eingehen
|
<i>beide Funktoren</i> müssen in den Typ eingehen
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1734565258271" ID="ID_963615663" MODIFIED="1734565519358" TEXT="das Weaving-Pattern ist tatsächlich mit dem Prototyp parametrisiert">
|
<node CREATED="1734565258271" ID="ID_963615663" MODIFIED="1734565519358" TEXT="das Weaving-Pattern ist tatsächlich mit dem Prototyp parametrisiert">
|
||||||
<linktarget COLOR="#fdf5ca" DESTINATION="ID_963615663" ENDARROW="Default" ENDINCLINATION="-108;-6;" ID="Arrow_ID_47883929" SOURCE="ID_681345521" STARTARROW="None" STARTINCLINATION="-48;3;"/>
|
<linktarget COLOR="#fdf5ca" DESTINATION="ID_963615663" ENDARROW="Default" ENDINCLINATION="-108;-6;" ID="Arrow_ID_47883929" SOURCE="ID_681345521" STARTARROW="None" STARTINCLINATION="-48;3;"/>
|
||||||
|
|
@ -92212,8 +92249,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
||||||
wenngleich auch lediglich indirekt, denn der sichtbare Parameter ist FUN, der Typ der Processing-Function
|
wenngleich auch lediglich indirekt, denn der sichtbare Parameter ist FUN, der Typ der Processing-Function
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1734569012990" ID="ID_1162717655" MODIFIED="1734569034684" TEXT="benötigt wird er allerdings erst im terminalen WeavingBuilder::build()"/>
|
<node CREATED="1734569012990" ID="ID_1162717655" MODIFIED="1734569034684" TEXT="benötigt wird er allerdings erst im terminalen WeavingBuilder::build()"/>
|
||||||
<node CREATED="1734569036235" ID="ID_356055578" MODIFIED="1734569057978" TEXT="eine Quer-Bewegung zu einem anders parametrisierten WeavingBuilder ist denkbar">
|
<node CREATED="1734569036235" ID="ID_356055578" MODIFIED="1734569057978" TEXT="eine Quer-Bewegung zu einem anders parametrisierten WeavingBuilder ist denkbar">
|
||||||
|
|
@ -92229,8 +92265,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
||||||
neuer Name: <b>FeedPrototype</b>
|
neuer Name: <b>FeedPrototype</b>
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1734569182079" ID="ID_716530363" MODIFIED="1734572949166" TEXT="Konfiguration des Parameter-Funktors ⟹ Anpassung des FeedPrototype">
|
<node CREATED="1734569182079" ID="ID_716530363" MODIFIED="1734572949166" TEXT="Konfiguration des Parameter-Funktors ⟹ Anpassung des FeedPrototype">
|
||||||
<linktarget COLOR="#7389a1" DESTINATION="ID_716530363" ENDARROW="Default" ENDINCLINATION="203;250;" ID="Arrow_ID_1856006217" SOURCE="ID_1285997694" STARTARROW="None" STARTINCLINATION="611;31;"/>
|
<linktarget COLOR="#7389a1" DESTINATION="ID_716530363" ENDARROW="Default" ENDINCLINATION="203;250;" ID="Arrow_ID_1856006217" SOURCE="ID_1285997694" STARTARROW="None" STARTINCLINATION="611;31;"/>
|
||||||
|
|
@ -92245,8 +92280,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
||||||
Wenn es also ein Param-Tupel gibt, entscheidet es sich im Aufruf-Kontext, ob dafür ein Init-Wert geliefert wird. Wenn nicht, dann findet Default-Initialisierung statt. Ganz einfach
|
Wenn es also ein Param-Tupel gibt, entscheidet es sich im Aufruf-Kontext, ob dafür ein Init-Wert geliefert wird. Wenn nicht, dann findet Default-Initialisierung statt. Ganz einfach
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
<linktarget COLOR="#d8e6f7" DESTINATION="ID_1722557648" ENDARROW="Default" ENDINCLINATION="-31;231;" ID="Arrow_ID_1230712950" SOURCE="ID_317086869" STARTARROW="None" STARTINCLINATION="584;41;"/>
|
<linktarget COLOR="#d8e6f7" DESTINATION="ID_1722557648" ENDARROW="Default" ENDINCLINATION="-31;231;" ID="Arrow_ID_1230712950" SOURCE="ID_317086869" STARTARROW="None" STARTINCLINATION="584;41;"/>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
|
|
@ -92352,8 +92386,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
||||||
⟹ geht in eine <u>Builder-Klasse</u> <font color="#392ebf" face="Monospaced"><b>FeedPrototype</b></font><font color="#8a7979" face="Monospaced"><</font><font color="#ab020a" face="Monospaced">FUN</font><font color="#8a7979" face="Monospaced">,</font><font color="#ba3b76" face="Monospaced">PAM</font><font color="#8a7979" face="Monospaced">></font>
|
⟹ geht in eine <u>Builder-Klasse</u> <font color="#392ebf" face="Monospaced"><b>FeedPrototype</b></font><font color="#8a7979" face="Monospaced"><</font><font color="#ab020a" face="Monospaced">FUN</font><font color="#8a7979" face="Monospaced">,</font><font color="#ba3b76" face="Monospaced">PAM</font><font color="#8a7979" face="Monospaced">></font>
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
<arrowlink COLOR="#7389a1" DESTINATION="ID_716530363" ENDARROW="Default" ENDINCLINATION="203;250;" ID="Arrow_ID_1856006217" STARTARROW="None" STARTINCLINATION="611;31;"/>
|
<arrowlink COLOR="#7389a1" DESTINATION="ID_716530363" ENDARROW="Default" ENDINCLINATION="203;250;" ID="Arrow_ID_1856006217" STARTARROW="None" STARTINCLINATION="611;31;"/>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
|
|
@ -92722,8 +92755,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
||||||
in den Turnout wird ein <b>Prototyp</b> der FeedManifold eingebettet
|
in den Turnout wird ein <b>Prototyp</b> der FeedManifold eingebettet
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
<node CREATED="1734562117362" ID="ID_462941923" MODIFIED="1734562132362" TEXT="die gebundene Adapter/Processing-Function steckt hier"/>
|
<node CREATED="1734562117362" ID="ID_462941923" MODIFIED="1734562132362" TEXT="die gebundene Adapter/Processing-Function steckt hier"/>
|
||||||
<node CREATED="1734562133675" ID="ID_332757580" MODIFIED="1734562147837" TEXT="das kann auch versteckte Binding-Daten mit beinhalten"/>
|
<node CREATED="1734562133675" ID="ID_332757580" MODIFIED="1734562147837" TEXT="das kann auch versteckte Binding-Daten mit beinhalten"/>
|
||||||
</node>
|
</node>
|
||||||
|
|
@ -92737,8 +92769,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
||||||
das heißt, idealerweise ist dieses ganze komplexe Konfigurations-Thema optional und transparent
|
das heißt, idealerweise ist dieses ganze komplexe Konfigurations-Thema optional und transparent
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1734388801494" ID="ID_1469272212" MODIFIED="1734389073266" TEXT="Hier könnte ein Buffer-Typ-Konstruktor mit eingebunden werden">
|
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1734388801494" ID="ID_1469272212" MODIFIED="1734389073266" TEXT="Hier könnte ein Buffer-Typ-Konstruktor mit eingebunden werden">
|
||||||
|
|
@ -92794,8 +92825,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
||||||
<icon BUILTIN="button_ok"/>
|
<icon BUILTIN="button_ok"/>
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734573119398" ID="ID_112390056" MODIFIED="1734573353430" TEXT="wird erst zur Laufzeit von einem FeedPrototype(Builder) erzeugt">
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734573119398" ID="ID_112390056" MODIFIED="1734573353430" TEXT="wird erst zur Laufzeit von einem FeedPrototype(Builder) erzeugt">
|
||||||
<arrowlink COLOR="#35a1d3" DESTINATION="ID_1416331336" ENDARROW="Default" ENDINCLINATION="420;24;" ID="Arrow_ID_1552949599" STARTARROW="None" STARTINCLINATION="245;11;"/>
|
|
||||||
<arrowlink COLOR="#d35582" DESTINATION="ID_955026014" ENDARROW="Default" ENDINCLINATION="-620;38;" ID="Arrow_ID_278216824" STARTARROW="None" STARTINCLINATION="1203;53;"/>
|
<arrowlink COLOR="#d35582" DESTINATION="ID_955026014" ENDARROW="Default" ENDINCLINATION="-620;38;" ID="Arrow_ID_278216824" STARTARROW="None" STARTINCLINATION="1203;53;"/>
|
||||||
|
<arrowlink COLOR="#35a1d3" DESTINATION="ID_1416331336" ENDARROW="Default" ENDINCLINATION="420;24;" ID="Arrow_ID_1552949599" STARTARROW="None" STARTINCLINATION="245;11;"/>
|
||||||
<icon BUILTIN="flag-yellow"/>
|
<icon BUILTIN="flag-yellow"/>
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1734573135923" ID="ID_1817637241" LINK="#ID_1722557648" MODIFIED="1734573174846">
|
<node CREATED="1734573135923" ID="ID_1817637241" LINK="#ID_1722557648" MODIFIED="1734573174846">
|
||||||
|
|
@ -92806,8 +92837,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
||||||
bekommt ggfs. ein zusätzliches Parameter-Tupel <i>als ctor-Wert</i>
|
bekommt ggfs. ein zusätzliches Parameter-Tupel <i>als ctor-Wert</i>
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734582923838" ID="ID_1465521206" MODIFIED="1734583016228" TEXT="muß dafür nochmal Definitions-Struktur umkrempeln">
|
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734582923838" ID="ID_1465521206" MODIFIED="1734583016228" TEXT="muß dafür nochmal Definitions-Struktur umkrempeln">
|
||||||
<arrowlink COLOR="#c1428c" DESTINATION="ID_1616386454" ENDARROW="Default" ENDINCLINATION="-1351;60;" ID="Arrow_ID_676623897" STARTARROW="None" STARTINCLINATION="-527;29;"/>
|
<arrowlink COLOR="#c1428c" DESTINATION="ID_1616386454" ENDARROW="Default" ENDINCLINATION="-1351;60;" ID="Arrow_ID_676623897" STARTARROW="None" STARTINCLINATION="-527;29;"/>
|
||||||
|
|
@ -92827,16 +92857,30 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
||||||
</html></richcontent>
|
</html></richcontent>
|
||||||
<icon BUILTIN="button_cancel"/>
|
<icon BUILTIN="button_cancel"/>
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1734309990069" ID="ID_1710382999" MODIFIED="1734310510263" TEXT="angesiedelt in NodeBase_test">
|
<node CREATED="1734309990069" ID="ID_1710382999" MODIFIED="1734633414037" TEXT="angesiedelt in NodeBase_test">
|
||||||
<arrowlink COLOR="#406cd3" DESTINATION="ID_1954508996" ENDARROW="Default" ENDINCLINATION="-484;30;" ID="Arrow_ID_640616380" STARTARROW="None" STARTINCLINATION="-2974;268;"/>
|
<arrowlink COLOR="#406cd3" DESTINATION="ID_1954508996" ENDARROW="Default" ENDINCLINATION="-484;30;" ID="Arrow_ID_640616380" STARTARROW="None" STARTINCLINATION="-2974;268;"/>
|
||||||
<linktarget COLOR="#16a2aa" DESTINATION="ID_1710382999" ENDARROW="Default" ENDINCLINATION="539;-32;" ID="Arrow_ID_129574515" SOURCE="ID_1348489291" STARTARROW="None" STARTINCLINATION="183;11;"/>
|
<linktarget COLOR="#16a2aa" DESTINATION="ID_1710382999" ENDARROW="Default" ENDINCLINATION="539;-32;" ID="Arrow_ID_129574515" SOURCE="ID_1348489291" STARTARROW="None" STARTINCLINATION="183;11;"/>
|
||||||
|
<linktarget COLOR="#467fbe" DESTINATION="ID_1710382999" ENDARROW="Default" ENDINCLINATION="73;6;" ID="Arrow_ID_1026737432" SOURCE="ID_1795683894" STARTARROW="None" STARTINCLINATION="97;6;"/>
|
||||||
<icon BUILTIN="info"/>
|
<icon BUILTIN="info"/>
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734573209952" ID="ID_1416331336" MODIFIED="1734573261692" TEXT="FeedPrototype in separatem Testfall abhandeln">
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734573209952" ID="ID_1416331336" MODIFIED="1734631527235" TEXT="FeedPrototype in separatem Testfall abhandeln">
|
||||||
|
<arrowlink DESTINATION="ID_1048829589" ENDARROW="Default" ID="Arrow_ID_58841322" STARTARROW="None" STARTINCLINATION="-90;-5;" COLOR="#406cd3" ENDINCLINATION="-484;30;"/>
|
||||||
<linktarget COLOR="#35a1d3" DESTINATION="ID_1416331336" ENDARROW="Default" ENDINCLINATION="420;24;" ID="Arrow_ID_1552949599" SOURCE="ID_112390056" STARTARROW="None" STARTINCLINATION="245;11;"/>
|
<linktarget COLOR="#35a1d3" DESTINATION="ID_1416331336" ENDARROW="Default" ENDINCLINATION="420;24;" ID="Arrow_ID_1552949599" SOURCE="ID_112390056" STARTARROW="None" STARTINCLINATION="245;11;"/>
|
||||||
<icon BUILTIN="flag-yellow"/>
|
<icon BUILTIN="flag-yellow"/>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
|
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734633240020" ID="ID_1833389965" MODIFIED="1734633492466" TEXT="Dokumentation FeedManifold">
|
||||||
|
<linktarget COLOR="#82878e" DESTINATION="ID_1833389965" ENDARROW="Default" ENDINCLINATION="-1293;117;" ID="Arrow_ID_1228391309" SOURCE="ID_1954201095" STARTARROW="None" STARTINCLINATION="1447;0;"/>
|
||||||
|
<icon BUILTIN="pencil"/>
|
||||||
|
<node COLOR="#435e98" CREATED="1734633366137" ID="ID_1795683894" MODIFIED="1734633419361" TEXT="beispielhafte Demonstration im NodeBase_test">
|
||||||
|
<arrowlink COLOR="#467fbe" DESTINATION="ID_1710382999" ENDARROW="Default" ENDINCLINATION="73;6;" ID="Arrow_ID_1026737432" STARTARROW="None" STARTINCLINATION="97;6;"/>
|
||||||
|
</node>
|
||||||
|
<node COLOR="#435e98" CREATED="1734633423725" ID="ID_1203638933" MODIFIED="1734633440575" TEXT="feed-manifold.hpp : Konzept erläutert"/>
|
||||||
|
<node COLOR="#435e98" CREATED="1734633464974" ID="ID_1798872805" MODIFIED="1734633498599" TEXT="struct FeedManifold : Interface für downstream-Code"/>
|
||||||
|
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1734633505472" ID="ID_1970366380" MODIFIED="1734633532457" TEXT="Fehlt noch: Gesamt-Ablauf im TiddlyWiki">
|
||||||
|
<icon BUILTIN="bell"/>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734133441531" ID="ID_109108903" MODIFIED="1734133509736" TEXT="Turnout-System mit Storage implementieren">
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734133441531" ID="ID_109108903" MODIFIED="1734133509736" TEXT="Turnout-System mit Storage implementieren">
|
||||||
<icon BUILTIN="flag-yellow"/>
|
<icon BUILTIN="flag-yellow"/>
|
||||||
|
|
@ -137811,7 +137855,12 @@ std::cout << tmpl.render({"what", "World"}) << s
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1702415671495" ID="ID_690521198" MODIFIED="1702416445460" TEXT="Doxygen">
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1702415671495" ID="ID_690521198" MODIFIED="1702416445460" TEXT="Doxygen">
|
||||||
<icon BUILTIN="prepare"/>
|
<icon BUILTIN="prepare"/>
|
||||||
<node CREATED="1702416632230" ID="ID_842762054" MODIFIED="1702416637945" TEXT="zentrale Technologien"/>
|
<node CREATED="1702416632230" ID="ID_842762054" MODIFIED="1702416637945" TEXT="zentrale Technologien">
|
||||||
|
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734633109131" ID="ID_1954201095" MODIFIED="1734633492466" TEXT="FeedManifold">
|
||||||
|
<arrowlink COLOR="#82878e" DESTINATION="ID_1833389965" ENDARROW="Default" ENDINCLINATION="-1293;117;" ID="Arrow_ID_1228391309" STARTARROW="None" STARTINCLINATION="1447;0;"/>
|
||||||
|
<icon BUILTIN="pencil"/>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
<node CREATED="1702416647540" ID="ID_1689012176" MODIFIED="1702416651071" TEXT="Übersichts-Seiten"/>
|
<node CREATED="1702416647540" ID="ID_1689012176" MODIFIED="1702416651071" TEXT="Übersichts-Seiten"/>
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1702417147449" ID="ID_127149039" MODIFIED="1702417598605" TEXT="Tickets">
|
<node CREATED="1702417147449" ID="ID_127149039" MODIFIED="1702417598605" TEXT="Tickets">
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue