Invocation: reshape scheme for data-access for Param-Weaving-Pattern
As it turns out, we need to embed the Param-Functor tuple, but only for a single use from a »builder« component. On the other hand, the nested »Slot« classes are deemed dangerous, since they just seem to invite being bound into some functor, which would create a dangling reference once the `ParamBuildSpec` is gone. Thus it's better to do away with this reference and make those accessors basically static, because this way they ''can'' be embedded into param-access functors (and I'd expect precisely that to happen in real use)
This commit is contained in:
parent
93bb64d6a2
commit
2468f6d0ee
3 changed files with 184 additions and 94 deletions
|
|
@ -62,6 +62,7 @@ namespace engine {
|
|||
|
||||
using std::move;
|
||||
using std::forward;
|
||||
using std::function;
|
||||
using std::make_tuple;
|
||||
using std::tuple;
|
||||
using lib::Several;////TODO RLY?
|
||||
|
|
@ -96,6 +97,15 @@ namespace engine {
|
|||
return addSlot ([paramVal](TurnoutSystem&){ return paramVal; });
|
||||
}
|
||||
|
||||
|
||||
/** intended for unit-testing: invoke one of the embedded param-functors */
|
||||
template<size_t slot>
|
||||
auto
|
||||
invokeParamFun (TurnoutSystem& turnoutSys)
|
||||
{
|
||||
return std::get<slot> (functors_) (turnoutSys);
|
||||
}
|
||||
|
||||
/** @internal the _chain constructor type_ is a type rebinding meta function (nested struct),
|
||||
* which extends the HeteroData chain given by \a ANK with the sequence of types derived from
|
||||
* the result-values of all functors stored in the ParamBuildSpec, i.e. the resulting param tuple.
|
||||
|
|
@ -104,63 +114,74 @@ namespace engine {
|
|||
*/
|
||||
using ChainCons = typename lib::meta::RebindVariadic<ANK::template Chain, ParamTup>::Type;
|
||||
|
||||
/** invoke all parameter-functors and _drop off_ the result into a »chain-block« (non-copyable) */
|
||||
typename ChainCons::NewFrame
|
||||
buildParamDataBlock (TurnoutSystem& turnoutSys)
|
||||
{
|
||||
return std::apply ([&](auto&&... paramFun)
|
||||
{ // invoke parameter-functors and build NewFrame from results
|
||||
return ChainCons::build (paramFun (turnoutSys) ...);
|
||||
}
|
||||
,functors_);
|
||||
}
|
||||
|
||||
/** invoke all parameter-functors and package all results by placement-new into a »chain-block« */
|
||||
void
|
||||
emplaceParamDataBlock (void* storage, TurnoutSystem& turnoutSys)
|
||||
{
|
||||
std::apply ([&](auto&&... paramFun)
|
||||
{ // invoke parameter-functors and build NewFrame from results
|
||||
ChainCons::emplace (storage, paramFun (turnoutSys) ...);
|
||||
}
|
||||
,functors_);
|
||||
}
|
||||
|
||||
|
||||
/** a (static) getter functor able to work on the full extended HeteroData-Chain
|
||||
* @remark the front-end of this chain resides in TurnoutSystem */
|
||||
template<size_t slot>
|
||||
class Slot
|
||||
struct Accessor
|
||||
: util::MoveOnly
|
||||
{
|
||||
ParamBuildSpec& spec_;
|
||||
|
||||
Slot (ParamBuildSpec& spec)
|
||||
: spec_{spec}
|
||||
{ }
|
||||
friend class ParamBuildSpec;
|
||||
|
||||
public:
|
||||
auto
|
||||
invokeParamFun (TurnoutSystem& turnoutSys)
|
||||
{
|
||||
return std::get<slot> (spec_.functors_) (turnoutSys);
|
||||
}
|
||||
|
||||
/** a getter functor able to work on the full extended HeteroData-Chain
|
||||
* @remark the front-end of this chain resides in TurnoutSystem */
|
||||
using Accessor = typename ChainCons::template Accessor<slot>;
|
||||
static auto makeAccessor() { return Accessor{}; }
|
||||
|
||||
static auto&
|
||||
getParamVal (TurnoutSystem& turnoutSys)
|
||||
{
|
||||
return turnoutSys.get (makeAccessor());
|
||||
using StorageAccessor = typename ChainCons::template Accessor<slot>;
|
||||
return turnoutSys.get (StorageAccessor());
|
||||
}
|
||||
};
|
||||
|
||||
template<size_t idx>
|
||||
Slot<idx>
|
||||
slot()
|
||||
{ return *this; }
|
||||
Accessor<idx>
|
||||
makeAccessor()
|
||||
{
|
||||
return Accessor<idx>{};
|
||||
}
|
||||
|
||||
class BlockBuilder
|
||||
: util::MoveOnly
|
||||
{
|
||||
Functors functors_;
|
||||
|
||||
public:
|
||||
/** invoke all parameter-functors and _drop off_ the result into a »chain-block« (non-copyable) */
|
||||
typename ChainCons::NewFrame
|
||||
buildParamDataBlock (TurnoutSystem& turnoutSys)
|
||||
{
|
||||
return std::apply ([&](auto&&... paramFun)
|
||||
{ // invoke parameter-functors and build NewFrame from results
|
||||
return ChainCons::build (paramFun (turnoutSys) ...);
|
||||
}
|
||||
,functors_);
|
||||
}
|
||||
|
||||
/** invoke all parameter-functors and package all results by placement-new into a »chain-block« */
|
||||
void
|
||||
emplaceParamDataBlock (void* storage, TurnoutSystem& turnoutSys)
|
||||
{
|
||||
std::apply ([&](auto&&... paramFun)
|
||||
{ // invoke parameter-functors and build NewFrame from results
|
||||
ChainCons::emplace (storage, paramFun (turnoutSys) ...);
|
||||
}
|
||||
,functors_);
|
||||
}
|
||||
|
||||
private:
|
||||
BlockBuilder (Functors&& funz)
|
||||
: functors_{move (funz)}
|
||||
{ }
|
||||
|
||||
friend class ParamBuildSpec;
|
||||
};
|
||||
|
||||
/**
|
||||
* Terminal Builder: (destructively) transform this ParamBuildSpec
|
||||
* into a BlockBuilder, which can then be used to create a Parameter data block,
|
||||
* thereby invoking the embedded functors and drop-off the results into storage.
|
||||
*/
|
||||
BlockBuilder
|
||||
makeBlockBuilder()
|
||||
{
|
||||
return BlockBuilder (move (functors_));
|
||||
}
|
||||
};
|
||||
|
||||
auto
|
||||
|
|
@ -179,20 +200,30 @@ namespace engine {
|
|||
{
|
||||
using Functors = typename SPEC::Functors;
|
||||
using DataBlock = typename SPEC::ChainCons::NewFrame;
|
||||
using BlockBuilder = typename SPEC::BlockBuilder;
|
||||
|
||||
Functors paramFunctors;
|
||||
BlockBuilder blockBuilder_;
|
||||
|
||||
function<void(TurnoutSystem&)> postProcess_;
|
||||
|
||||
struct Feed
|
||||
: util::NonCopyable
|
||||
{
|
||||
lib::UninitialisedStorage<DataBlock> buffer;
|
||||
|
||||
DataBlock& block() { return buffer[0]; }
|
||||
|
||||
void
|
||||
emplaceParamDataBlock (BlockBuilder& builder, TurnoutSystem& turnoutSys)
|
||||
{
|
||||
builder.emplaceParamDataBlock (&block(), turnoutSys);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/** forwarding-ctor to provide the detailed input/output connections */
|
||||
template<typename...ARGS>
|
||||
ParamWeavingPattern (Functors funTup)
|
||||
: paramFunctors{move (funTup)}
|
||||
ParamWeavingPattern (BlockBuilder builder)
|
||||
: blockBuilder_{move (builder)}
|
||||
{ }
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -142,21 +142,25 @@ namespace test {
|
|||
CHECK (showType<ParamTup>() == "tuple<uint, long>"_expect);
|
||||
|
||||
// can now store accessor-functors for later use....
|
||||
auto acc0 = spec.slot<0>().makeAccessor();
|
||||
auto acc1 = spec.slot<1>().makeAccessor();
|
||||
auto acc0 = spec.makeAccessor<0>();
|
||||
auto acc1 = spec.makeAccessor<1>();
|
||||
|
||||
// drive test with a random »nominal Time« <10s with ms granularity
|
||||
Time nomTime{rani(10'000),0};
|
||||
TurnoutSystem turnoutSys{nomTime};
|
||||
// can now immediately invoke the embedded parameter-functors
|
||||
auto v0 = spec.slot<0>().invokeParamFun (turnoutSys);
|
||||
auto v1 = spec.slot<1>().invokeParamFun (turnoutSys);
|
||||
auto v0 = spec.invokeParamFun<0> (turnoutSys);
|
||||
auto v1 = spec.invokeParamFun<1> (turnoutSys);
|
||||
CHECK (v0 == LIFE_AND_UNIVERSE_4EVER); // ◁————————— the first paramFun yields the configured fixed value
|
||||
CHECK (v1 == FrameNr::quant (nomTime, "grid_sec")); // ◁————————— the second paramFun accesses the time in TurnoutSystem
|
||||
|
||||
// after all setup of further accessor functors is done
|
||||
// finally transform the ParamSpec into a storage-block-builder:
|
||||
auto blockBuilder = spec.makeBlockBuilder();
|
||||
|
||||
{ // Now build an actual storage block in local scope,
|
||||
// thereby invoking the embedded parameter-functors...
|
||||
auto paramBlock = spec.buildParamDataBlock (turnoutSys);
|
||||
auto paramBlock = blockBuilder.buildParamDataBlock (turnoutSys);
|
||||
// Values are now materialised into paramBlock
|
||||
CHECK (v0 == paramBlock.get<0>());
|
||||
CHECK (v1 == paramBlock.get<1>());
|
||||
|
|
@ -165,11 +169,9 @@ namespace test {
|
|||
turnoutSys.attachChainBlock(paramBlock);
|
||||
|
||||
// can now access the parameter values through the TurnoutSystem as front-End
|
||||
CHECK (v0 == spec.slot<0>().getParamVal (turnoutSys));
|
||||
CHECK (v1 == spec.slot<1>().getParamVal (turnoutSys));
|
||||
// and can also use the accessor-functors stored above
|
||||
CHECK (v0 == turnoutSys.get(acc0));
|
||||
CHECK (v1 == turnoutSys.get(acc1));
|
||||
// using the pre-configured accessor-functors stored above
|
||||
CHECK (v0 == acc0.getParamVal (turnoutSys));
|
||||
CHECK (v1 == acc1.getParamVal (turnoutSys));
|
||||
|
||||
// should detach extension block before leaving scope
|
||||
turnoutSys.detachChainBlock(paramBlock);
|
||||
|
|
@ -180,7 +182,7 @@ namespace test {
|
|||
using Feed = WaPa::Feed;
|
||||
|
||||
Feed feed;
|
||||
spec.emplaceParamDataBlock (& feed.buffer[0], turnoutSys);
|
||||
feed.emplaceParamDataBlock (blockBuilder, turnoutSys);
|
||||
SHOW_EXPR(feed.buffer[0].get<0>())
|
||||
SHOW_EXPR(feed.buffer[0].get<1>())
|
||||
TODO ("implement a simple Builder for ParamAgent-Node");
|
||||
|
|
|
|||
|
|
@ -82339,9 +82339,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1735353970175" ID="ID_542964897" MODIFIED="1735519560792" TEXT="und ist ein HeteroData-Accessor"/>
|
||||
<node CREATED="1735519565352" ID="ID_646241396" MODIFIED="1735519667848" TEXT="mit dem TurnoutSystem als Front-Block">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Das heißt, hier haben wir immer einen festen Satz an Parametern, die stets im TurnoutSystem eingebettet vorliegen; diese können aber als HeteroData-Chain erweitert werden um die Blöcke, die wir über eine (oder eine Kette von) ParamBuildSpec erzeugen
|
||||
|
|
@ -94373,15 +94371,14 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1735607847586" ID="ID_326138637" MODIFIED="1735698010312" TEXT="Weaving-Pattern passend anlegen">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node CREATED="1735606520452" ID="ID_1370206629" MODIFIED="1735607879217" TEXT="Knackpunkt hier: Chain-Block ist non-copyable">
|
||||
<arrowlink COLOR="#71475a" DESTINATION="ID_410550585" ENDARROW="Default" ENDINCLINATION="-194;-5;" ID="Arrow_ID_1355764856" STARTARROW="None" STARTINCLINATION="58;229;"/>
|
||||
<node CREATED="1735606533963" ID="ID_232275034" MODIFIED="1735606547772" TEXT="das geht sehr wohl: FeedManifold ist ebenfalls non-copyable"/>
|
||||
<node CREATED="1735607046676" ID="ID_1197786320" MODIFIED="1735607106657" TEXT="Konsequenz wäre, anschließend noch explizit ans Turnout-System »andocken« zu müssen"/>
|
||||
<node CREATED="1735607701692" ID="ID_1665864698" MODIFIED="1735607715223" TEXT="oder — — RAII">
|
||||
<node CREATED="1735607772387" ID="ID_1329533749" MODIFIED="1735607838831" TEXT="geht das überhaupt?"/>
|
||||
<node CREATED="1735607884541" ID="ID_809521085" MODIFIED="1735607928616" TEXT="nur wenn man erbt">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
denn ich kann nicht ein non-copyable-Member fertig per Konstruktor bekommen....
|
||||
|
|
@ -94393,9 +94390,10 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1735607937133" ID="ID_328206928" MODIFIED="1735607951086" TEXT="oder wenn man den Funktor bekommt und selber aufruft"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1735608975638" ID="ID_1109142296" MODIFIED="1735609812282" TEXT="zweite Frage: wann?">
|
||||
<node COLOR="#435e98" CREATED="1735608975638" ID="ID_1109142296" MODIFIED="1735783209314" TEXT="zweite Frage: wann?">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1735608988000" ID="ID_895559050" MODIFIED="1735693559907" TEXT="echtes RAII ⟹ dann sofort">
|
||||
<node COLOR="#5b280f" CREATED="1735608988000" ID="ID_895559050" MODIFIED="1735783201716" TEXT="echtes RAII ⟹ dann sofort">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1735609004510" ID="ID_1911256331" MODIFIED="1735609026839" TEXT="würde bedeuten: praktisch alles passiert im mount(TurnoutSystem&)"/>
|
||||
<node CREATED="1735609090986" ID="ID_951840714" MODIFIED="1735609113027" TEXT="für die (optionale) Nachverarbeitung bleibt noch Design-Spielraum"/>
|
||||
<node CREATED="1735609138368" ID="ID_1518007270" MODIFIED="1735609168204" TEXT="man würde dann aber wohl auch schon in pull() an die Delegate-Node weitergeben"/>
|
||||
|
|
@ -94404,9 +94402,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1735609299238" ID="ID_665339625" MODIFIED="1735609315400" TEXT="der rekursive Call hatte keinen zur Verfügung"/>
|
||||
<node CREATED="1735609349100" ID="ID_396734688" MODIFIED="1735609491766" TEXT="als müßte man hier dann das BuffHandle „umleiten“">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
heißt, man müßte entweder explizit umkopieren, oder es bräuchte eine Konvention, wie man das (optional) gegebene BuffHandle dann eben doch frei gibt; letztlich wird ja ein BuffHandle zurückgegeben, und das wäre dann dasjenige, daß vom rekursiven Call belegt wurde. Könnte sogar klappen, ist aber<i> als Trickserei</i> zu werten.
|
||||
|
|
@ -94419,9 +94415,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1735609494932" ID="ID_1864279920" MODIFIED="1735609503487" TEXT="der weft()-Aufruf wäre komplett NOP">
|
||||
<node CREATED="1735609505407" ID="ID_1526678544" MODIFIED="1735609651872" TEXT="warum auch nicht....">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Die Aufteilung in diese fünf Schritte dient vor allem der Gliederung der Abläufe; es ist aber nur bedingt ein »Protokoll«, in dem in bestimmten Schritten etwas Festgelegtes <i>passieren muß...</i>
|
||||
|
|
@ -94432,9 +94426,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node CREATED="1735609517769" ID="ID_302975776" MODIFIED="1735609561229" TEXT="trotzdem ein Hinweis, daß mit dem Design etwas nicht stimmt">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Wenn man Strukturen biegen, leer machen oder umdeuten muß...
|
||||
|
|
@ -94448,7 +94440,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="smiley-angry"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1735609684093" ID="ID_1602209150" MODIFIED="1735609699782" TEXT="oder: einen UninitialisedStorage-Block vorsehen">
|
||||
<node CREATED="1735609684093" ID="ID_1602209150" MODIFIED="1735783205922" TEXT="oder: einen UninitialisedStorage-Block vorsehen">
|
||||
<icon BUILTIN="forward"/>
|
||||
<node CREATED="1735609703440" ID="ID_1428111001" MODIFIED="1735609715570" TEXT="die Größe ist ja im Voraus bekannt"/>
|
||||
<node CREATED="1735609732772" ID="ID_1616902380" MODIFIED="1735609783730" TEXT="Schön ist das nicht....">
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
|
||||
|
|
@ -94463,8 +94456,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1735693540805" ID="ID_647246098" MODIFIED="1735693549403" TEXT="Typ-Parametrisierung">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1735693540805" ID="ID_647246098" MODIFIED="1735783194787" TEXT="Typ-Parametrisierung">
|
||||
<icon BUILTIN="info"/>
|
||||
<node CREATED="1735693996066" ID="ID_40351970" MODIFIED="1735694009501" TEXT="auch hier eine Art Prototype...."/>
|
||||
<node CREATED="1735694010801" ID="ID_914830627" MODIFIED="1735694086013" TEXT="das heißt: das Weaving-Pattern muß das Funktoren-Tupel enthalten"/>
|
||||
<node CREATED="1735694092810" ID="ID_1337845365" MODIFIED="1735694220094" TEXT="⟹ die ParamBuildSpec ist der natürliche Typ-Parameter">
|
||||
|
|
@ -94472,20 +94465,33 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1735694246354" ID="ID_1680447149" MODIFIED="1735694265234" TEXT="enthält aber auch die Zustatz-Info über die Chain-Struktur (ANK)"/>
|
||||
</node>
|
||||
<node CREATED="1735694325648" ID="ID_836420159" MODIFIED="1735694338272" TEXT="(wäre dann move-only wie alle Funktoren hier)"/>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1735697993386" ID="ID_797613352" MODIFIED="1735698002027" TEXT="+ weitere Parametrisierung">
|
||||
<icon BUILTIN="flag-pink"/>
|
||||
<node COLOR="#5b280f" CREATED="1735697993386" ID="ID_797613352" MODIFIED="1735783180590" TEXT="+ weitere Parametrisierung">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node COLOR="#5b280f" CREATED="1735775051227" ID="ID_150070527" MODIFIED="1735775076604" TEXT="keine weiteren Typ-Parameter notwendig">
|
||||
<icon BUILTIN="stop-sign"/>
|
||||
</node>
|
||||
<node CREATED="1735775078805" ID="ID_773290103" LINK="#ID_499331038" MODIFIED="1735775549052" TEXT="ergibt sich nämlich alles bereits aus der Spec">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1735775093091" ID="ID_1477113659" MODIFIED="1735775124239" TEXT="aber Laufzeit-Parameter sind natürlich notwendig">
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1735775126615" ID="ID_861839311" MODIFIED="1735775141609" TEXT="(optionaler) Postprocessing-Funktor"/>
|
||||
<node CREATED="1735775143004" ID="ID_684578183" MODIFIED="1735775147851" TEXT="die delegate-Node">
|
||||
<node CREATED="1735775198229" ID="ID_437087940" MODIFIED="1735775203920" TEXT="tatsächlich ist es ein Port"/>
|
||||
<node CREATED="1735775217736" ID="ID_932887443" MODIFIED="1735775229474" TEXT="sonst müssen wir weiter nichts wissen"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1735696073802" ID="ID_1789382943" MODIFIED="1735696136906" TEXT="ParamBlock erstellen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1735696138642" ID="ID_410550585" MODIFIED="1735696170853" TEXT="erneut das Problem: der Chain-Block soll non-copyable sein">
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1735696073802" ID="ID_1789382943" MODIFIED="1735783163617" TEXT="ParamBlock erstellen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1735696138642" ID="ID_410550585" MODIFIED="1735783236775" TEXT="erneut das Problem: der Chain-Block soll non-copyable sein">
|
||||
<linktarget COLOR="#71475a" DESTINATION="ID_410550585" ENDARROW="Default" ENDINCLINATION="-194;-5;" ID="Arrow_ID_1355764856" SOURCE="ID_1370206629" STARTARROW="None" STARTINCLINATION="58;229;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1735696214236" ID="ID_1168622804" MODIFIED="1735697968996" TEXT="brauche folglich eine placement-new-Variante des Builders">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...da gibt es definitiv keinen anderen Ausweg, und eigentlich wird ja dadurch auch erst die Builder-Notation wirklich sinnvoll; daß man ein non-copyable-Objekt aus einer Funktion „abwerfen“ kann ist sowiso grenzwertig....
|
||||
|
|
@ -94493,14 +94499,12 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<node BACKGROUND_COLOR="#c8cbaf" CREATED="1735697219515" ID="ID_1960332816" MODIFIED="1735697251917" TEXT="warum ärgere ich mich jetz darüber so?">
|
||||
<node BACKGROUND_COLOR="#c8cbaf" CREATED="1735697219515" ID="ID_1960332816" MODIFIED="1735777474732" TEXT="warum ärgere ich mich jetz so drüber?">
|
||||
<icon BUILTIN="smiley-angry"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1735697259608" ID="ID_1882455580" MODIFIED="1735697659702" TEXT="deshalb macht man doch Prototyping....">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...damit man sieht, wie man's tatsächlich braucht;
|
||||
|
|
@ -94524,12 +94528,65 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1735783168387" ID="ID_997169063" MODIFIED="1735783174191" TEXT="funktioniert im Test">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1735777939763" ID="ID_654818284" MODIFIED="1735783309728" TEXT="Setup-Parameter im Weaving-Pattern">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#5b280f" CREATED="1735777972926" ID="ID_1471110800" MODIFIED="1735783080965" TEXT="das Funktoren-Tupel">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1735778000411" ID="ID_605093508" MODIFIED="1735778009822" TEXT="eigentlich brauchen wir nur einen Block-Builder"/>
|
||||
<node CREATED="1735778011170" ID="ID_1721187835" MODIFIED="1735778025451" TEXT="aber in dem müßte das Tupel drinnen stecken"/>
|
||||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1735778026895" ID="ID_876564472" MODIFIED="1735778038315" TEXT="Überlapp mit der Spec im aktuellen Design">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1735778040638" ID="ID_325760853" MODIFIED="1735778053152" TEXT="wir könnten die Spec speichern"/>
|
||||
<node CREATED="1735778055468" ID="ID_652295544" MODIFIED="1735778070117" TEXT="aber deren ganzer Builder-Part ist eigentlich redundant"/>
|
||||
<node CREATED="1735778077929" ID="ID_671471594" MODIFIED="1735778083788" TEXT="Problem Lebensdauer">
|
||||
<node CREATED="1735778085728" ID="ID_976549195" MODIFIED="1735778105690" TEXT="die Spec liegt vmtl. in einem lokalen Kontext auf einem höheren Builder-Level"/>
|
||||
<node CREATED="1735778107174" ID="ID_1002340864" MODIFIED="1735778123062" TEXT="⟹ muß dafür sorgen, die Funktoren zu kopieren"/>
|
||||
<node COLOR="#5b280f" CREATED="1735778139784" ID="ID_1567643331" MODIFIED="1735778168511" TEXT="Vorsicht: der »Slot« in der Spec ist im Moment so ein typisches hexagonales Feature">
|
||||
<icon BUILTIN="clanbomber"/>
|
||||
<node CREATED="1735778171108" ID="ID_1152708895" MODIFIED="1735778180183" TEXT="sooo schön zum Tests schreiben"/>
|
||||
<node CREATED="1735778181967" ID="ID_1583052091" MODIFIED="1735778195421" TEXT="gefährlich irreführend für jeden anderen Gebrauch"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1735780756823" ID="ID_1015981716" MODIFIED="1735780763078" TEXT="Umbau!">
|
||||
<icon BUILTIN="flag-pink"/>
|
||||
<node CREATED="1735780764829" ID="ID_819223004" MODIFIED="1735780789925" TEXT="den »Slot« in einen statischen Accessor umschreiben">
|
||||
<node CREATED="1735783005113" ID="ID_686667351" MODIFIED="1735783018619" TEXT="hier wäre der Back-Link auf die Spec gradezu gemeingefährlich"/>
|
||||
<node CREATED="1735783020065" ID="ID_1376680768" MODIFIED="1735783041921" TEXT="im Grunde braucht man hier nur den Typ, den man in andere Accessor-Funktoren einbettet">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1735780792553" ID="ID_598255406" MODIFIED="1735781123512" TEXT="dafür eine makeBlockBuilder()-Funktion (destruktiv)">
|
||||
<node CREATED="1735780814414" ID="ID_971841806" MODIFIED="1735780821795" TEXT="schiebt das Funktoren-Tupel dorthin"/>
|
||||
<node CREATED="1735780823097" ID="ID_363538159" MODIFIED="1735780849748" TEXT="die sonstige Spec sollte keinen direkten Bezug auf die Funktoren mehr haben"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1735783048795" ID="ID_1635709601" MODIFIED="1735783108281" TEXT="der BlockBuilder wandert dann in das WeavingPattern">
|
||||
<arrowlink COLOR="#3538b8" DESTINATION="ID_487478594" ENDARROW="Default" ENDINCLINATION="16;-84;" ID="Arrow_ID_602775247" STARTARROW="None" STARTINCLINATION="-450;23;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1735783082614" ID="ID_487478594" MODIFIED="1735783101705" TEXT="BlockBuilder">
|
||||
<linktarget COLOR="#3538b8" DESTINATION="ID_487478594" ENDARROW="Default" ENDINCLINATION="16;-84;" ID="Arrow_ID_602775247" SOURCE="ID_1635709601" STARTARROW="None" STARTINCLINATION="-450;23;"/>
|
||||
<node COLOR="#435e98" CREATED="1735783113618" ID="ID_853147988" MODIFIED="1735783152469" TEXT="ist der Terminal-Build-Schritt aus einer Spec">
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node CREATED="1735783127128" ID="ID_1710125600" MODIFIED="1735783147008" TEXT="man könnte aber (falls notwendig und möglich) die Spec vorher kopieren">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1735354094901" ID="ID_357401280" LINK="#ID_1484484879" MODIFIED="1735416065935" TEXT="Grundstruktur / Schrittfolge">
|
||||
<node CREATED="1735354099466" ID="ID_1086019960" MODIFIED="1735354156573" TEXT="mount : Feed-Frame erzeugen"/>
|
||||
<node CREATED="1735354158273" ID="ID_1400465949" MODIFIED="1735354198247" TEXT="pull : Param-Funktor aufrufen und Tupel erstellen"/>
|
||||
<node CREATED="1735354209348" ID="ID_1189493104" MODIFIED="1735354256129" TEXT="shed : Chain-Block erstellen und nachverarbeiten"/>
|
||||
<node CREATED="1735354209348" ID="ID_1189493104" MODIFIED="1735354256129" TEXT="shed : Chain-Block erstellen und nachverarbeiten">
|
||||
<node CREATED="1735775241705" ID="ID_324071186" MODIFIED="1735775250821" TEXT="Link in das Turnout-System"/>
|
||||
</node>
|
||||
<node CREATED="1735354287727" ID="ID_348185915" MODIFIED="1735354316106" TEXT="weft : Target-Node aufrufen"/>
|
||||
<node CREATED="1735354360652" ID="ID_128985053" MODIFIED="1735354376078" TEXT="fix : Chain-Block abhängen und Output-Buffer zurückggeben"/>
|
||||
</node>
|
||||
|
|
|
|||
Loading…
Reference in a new issue