Invocation: capture idea for sharpened invocation structure

- the starting point is the idea to build a dedicated ''turnout system''
- `StateAdapter`, `BuffTable` ⟶ `FeedManifold` and _Invocation_ will be fused
- actually, the `TurnoutSystem` will be ''pulled'' and orchestrate the invocation
- the structure is assumed to be recursive

The essence of the Node-Invocation, as developed 2009 / 2011 remains intact,
yet it will be organised along a clearer structure
This commit is contained in:
Fischlurch 2024-05-12 17:27:07 +02:00
parent bd9527716a
commit c0d5341b15
8 changed files with 133 additions and 25 deletions

View file

@ -862,6 +862,8 @@ exposed elements within the ``array''. The Lumiera library provides a set
of standard implementations for this +lib::RefArray+ interface, including
a vector based and a directly array based variant.
WARNING: in rework 2024 (Playback Vertical Slice)
Unique Identifiers
~~~~~~~~~~~~~~~~~~

View file

@ -33,6 +33,7 @@
** storage of variant-records, able to hold a mixture of subclasses. (the latter cases
** will be implemented when needed).
**
** @warning in rework 5/2025
** @see ref-array-test.cpp
**
*/

View file

@ -25,6 +25,7 @@
** Abstraction interface: array-like access by subscript
** @todo as of 2016, this concept seems very questionable: do we _really_ want
** to abstract over random access, or do we _actually_ want for-iteration??
** @warning in rework 5/2025
*/
@ -43,6 +44,7 @@ namespace lib {
* and the Implementation wraps some datastructure
* holding subclasses.
* @todo ouch -- a collection that isn't iterable... ///////////////////////TICKET #1040
* @warning in rework 5/2025
*/
template<class T>
class RefArray

View file

@ -29,7 +29,7 @@
#include "steam/engine/render-invocation.hpp"
#include "steam/engine/stateproxy.hpp"
#include "steam/engine/turnout-system.hpp"
namespace steam {

View file

@ -1,5 +1,5 @@
/*
StateProxy - Encapsulation of the state corresponding to a render calculation
TurnoutSystem - Encapsulation of the state corresponding to a render calculation
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
@ -21,13 +21,13 @@
* *****************************************************/
/** @file stateproxy.cpp
** Implementation details of some stateful operations needed from within the render calculation.
/** @file turnout-system.cpp
** Implementation details of some statefull operations needed from within the render calculation.
** @todo unfinished draft from 2009 regarding the render process
*/
#include "steam/engine/stateproxy.hpp"
#include "steam/engine/turnout-system.hpp"
namespace steam {
namespace engine {

View file

@ -1,5 +1,5 @@
/*
STATEPROXY.hpp - Encapsulation of the state corresponding to a render calculation
TURNOUT-SYSTEM.hpp - Encapsulation of the state corresponding to a render calculation
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
@ -21,7 +21,7 @@
*/
/** @file stateproxy.hpp
/** @file turnout-system.hpp
** Access point to the state of a frame rendering evaluation.
** The rendering of frames is triggered from a render job, and recursively
** retrieves the data from predecessor nodes. Some statefull aspects are involved
@ -33,8 +33,8 @@
*/
#ifndef ENGINE_STATEPROXY_H
#define ENGINE_STATEPROXY_H
#ifndef ENGINE_TURNOUT_SYSTEM_H
#define ENGINE_TURNOUT_SYSTEM_H
#include "steam/engine/state-closure.hpp"
@ -70,4 +70,4 @@ namespace engine {
}} // namespace steam::engine
#endif
#endif /*ENGINE_TURNOUT_SYSTEM_H*/

View file

@ -28,7 +28,7 @@
#include "lib/test/run.hpp"
#include "steam/engine/nodefactory.hpp"
#include "steam/engine/nodewiring.hpp"
#include "steam/engine/stateproxy.hpp"
#include "steam/engine/turnout-system.hpp"
#include "steam/engine/channel-descriptor.hpp"
#include "steam/mobject/session/effect.hpp"
#include "lib/allocation-cluster.hpp"

View file

@ -79944,8 +79944,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1714580571895" ID="ID_832191476" MODIFIED="1714580591635" TEXT="Tats&#xe4;chlich k&#xf6;nnen wir uns nur eine Info pro Freiheitsgrad leisten">
<icon BUILTIN="yes"/>
</node>
<node CREATED="1714580592801" ID="ID_1478713442" MODIFIED="1714580830099" TEXT="Freiheitsgrade...">
<node CREATED="1714580592801" ID="ID_1478713442" MODIFIED="1715524362164" TEXT="Freiheitsgrade...">
<arrowlink COLOR="#3e5caa" DESTINATION="ID_206055852" ENDARROW="Default" ENDINCLINATION="-901;1952;" ID="Arrow_ID_1954815494" STARTARROW="None" STARTINCLINATION="-330;-93;"/>
<linktarget COLOR="#618cdf" DESTINATION="ID_1478713442" ENDARROW="Default" ENDINCLINATION="-1475;183;" ID="Arrow_ID_812438746" SOURCE="ID_865895790" STARTARROW="None" STARTINCLINATION="1572;-179;"/>
<icon BUILTIN="info"/>
<node CREATED="1714580615114" ID="ID_1400673889" MODIFIED="1714580620205" TEXT="nominelle Zeit">
<node CREATED="1714580868121" HGAP="31" ID="ID_1305751151" MODIFIED="1714580906874" TEXT="die einzige pro Frame bewegliche Gr&#xf6;&#xdf;e" VSHIFT="3">
@ -80331,10 +80332,16 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<font NAME="SansSerif" SIZE="10"/>
<icon BUILTIN="smiley-oh"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1713716178243" ID="ID_963083918" MODIFIED="1714908421288" TEXT="StateAdapter &#x27fc; StateClosure">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1713716178243" ID="ID_963083918" MODIFIED="1715525599457" TEXT="Interface State &#x27fc; StateClosure">
<linktarget COLOR="#a9b4c1" DESTINATION="ID_963083918" ENDARROW="Default" ENDINCLINATION="423;38;" ID="Arrow_ID_674451029" SOURCE="ID_535326092" STARTARROW="None" STARTINCLINATION="1145;-57;"/>
<icon BUILTIN="yes"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1715525498827" ID="ID_1523105954" MODIFIED="1715525588112" TEXT="StateAdapter &#x27fc; Turnout">
<icon BUILTIN="yes"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1715525608159" ID="ID_646555361" MODIFIED="1715525641420" TEXT="StateProxy &#x27fc; TurnoutSystem">
<icon BUILTIN="yes"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1714909003260" ID="ID_1583145480" MODIFIED="1714909025469" TEXT="WiringCoinfig &#x27fc; Connectivity">
<icon BUILTIN="yes"/>
</node>
@ -80681,6 +80688,17 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1714872110793" ID="ID_535326092" MODIFIED="1714908421288" TEXT="Name &quot;State&quot; : schl&#xfc;ssigeres Benennungs-Schema">
<arrowlink DESTINATION="ID_963083918" ENDARROW="Default" ENDINCLINATION="423;38;" ID="Arrow_ID_674451029" STARTARROW="None" STARTINCLINATION="1145;-57;"/>
</node>
<node CREATED="1715523610870" ID="ID_1129364168" MODIFIED="1715523630439" TEXT="Invocation + StateAdapter + TurnoutSystem fallen zusammen"/>
<node CREATED="1715526750604" ID="ID_208674861" MODIFIED="1715526755607" TEXT="RefArray modernisieren">
<node CREATED="1715526756800" ID="ID_364406773" MODIFIED="1715526765735" TEXT="sollte sich Richtung Concept bewegen"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1715526766314" ID="ID_1523408221" MODIFIED="1715526784381" TEXT="Vorsicht: eine Neben-Verwendung in der Session (ElementTracker)">
<icon BUILTIN="messagebox_warning"/>
</node>
<node BACKGROUND_COLOR="#e0d8b0" COLOR="#772d03" CREATED="1715526829169" ID="ID_1553624646" MODIFIED="1715526929086" TEXT="Idee: neues Basis-Template: Several&lt;TY&gt;">
<arrowlink COLOR="#fbfed6" DESTINATION="ID_576332674" ENDARROW="Default" ENDINCLINATION="-670;-163;" ID="Arrow_ID_18042992" STARTARROW="None" STARTINCLINATION="525;35;"/>
<icon BUILTIN="idea"/>
</node>
</node>
</node>
</node>
</node>
@ -80815,9 +80833,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1715037725903" ID="ID_831972019" MODIFIED="1715037738345" TEXT="Connectivity legt zus&#xe4;tzliche Freiheitsgrade fest">
<node CREATED="1715037739669" ID="ID_254890940" MODIFIED="1715037769327">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
nicht nur <i>welche </i>Vorg&#228;nger, sondern auch <i>wie </i>diese angebunden sind
@ -80842,9 +80858,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1715038164036" ID="ID_1603867276" MODIFIED="1715038172778" TEXT="wird jeweils vom Vorg&#xe4;nger her konstruiert"/>
<node CREATED="1715038236922" ID="ID_1405235739" MODIFIED="1715038254462">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
das &#8222;schreit&#8220; gradezu nach einem <b>Builder</b>
@ -80855,9 +80869,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1715038467369" ID="ID_786662983" MODIFIED="1715038479263" TEXT="m&#xf6;glicherweise habe ich hier zwei Ebenen vermischt"/>
<node CREATED="1715038480514" ID="ID_807793427" MODIFIED="1715038523263" TEXT="die Unterscheidung von Martin Fowler: command-&amp;-control vs. DSL">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...das Buch kannte ich damals noch nicht, und das merkt man
@ -80877,9 +80889,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node CREATED="1715038717490" ID="ID_226214844" MODIFIED="1715038783206" TEXT="und war konkret auch der Grund, warum ich damals steckenblieb">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
denn das high-Level-Model kann man genau deshalb im Kern (noch) nicht definieren, weil der Builder und das low-Level-Model fehlt
@ -80920,9 +80930,54 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node CREATED="1715472577657" ID="ID_302214544" MODIFIED="1715472583381" TEXT="Conststituents">
<node CREATED="1715522273278" ID="ID_1913846736" MODIFIED="1715522278674" TEXT="Connectivity">
<node CREATED="1715522355278" ID="ID_643217286" MODIFIED="1715522359472" TEXT="rein statisch"/>
<node CREATED="1715522383162" ID="ID_254070601" MODIFIED="1715522422352" TEXT="Zugang zu allen Vorraussetzungen"/>
<node CREATED="1715523844431" ID="ID_1377189488" MODIFIED="1715523916103" TEXT="incl Descriptoren und Marker f&#xfc;r TurnoutSystem"/>
</node>
<node CREATED="1715525109342" ID="ID_1198302937" MODIFIED="1715525114482" TEXT="FeedManifold">
<node CREATED="1715525115406" ID="ID_1864118924" MODIFIED="1715525120160" TEXT="transient pro Aufruf"/>
<node CREATED="1715525121189" ID="ID_1124710161" MODIFIED="1715525144454" TEXT="verweist auf alle Eingabe + Ausgabe-Buffer"/>
</node>
<node CREATED="1715526110409" ID="ID_1292489945" MODIFIED="1715526113549" TEXT="Allocator">
<node CREATED="1715526220166" ID="ID_533981284" MODIFIED="1715526235924" TEXT="Zugang via Turnout &#x27f6; TurnoutSystem"/>
<node CREATED="1715526315140" ID="ID_266709880" MODIFIED="1715526343297" TEXT="der feste Anteil (Node-Network) wird alloziert via AllocationCluster"/>
<node CREATED="1715526344106" ID="ID_1391623056" MODIFIED="1715526355632" TEXT="ein dynamischer Anteil delegiert an einen BufferManager"/>
</node>
<node CREATED="1715526114305" ID="ID_576332674" MODIFIED="1715526929087" TEXT="Several">
<linktarget COLOR="#fbfed6" DESTINATION="ID_576332674" ENDARROW="Default" ENDINCLINATION="-670;-163;" ID="Arrow_ID_18042992" SOURCE="ID_1553624646" STARTARROW="None" STARTINCLINATION="525;35;"/>
<node CREATED="1715526375984" ID="ID_466368192" MODIFIED="1715526390634" TEXT="leichtgewichtiges Front-End zu einer Vector-artigen Collection"/>
<node CREATED="1715526412553" ID="ID_1310310561" MODIFIED="1715526457239" TEXT="bietet zus&#xe4;tzlich die F&#xe4;higkeit zur inplace-Allokation"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1713823635758" ID="ID_899523613" MODIFIED="1713823821818" TEXT="Gundelemente des Aufrufs">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1715524107426" ID="ID_1048111807" MODIFIED="1715524113447" TEXT="Job">
<node CREATED="1715524116854" ID="ID_701533734" MODIFIED="1715524124821" TEXT="Aufruf / Funktor"/>
<node CREATED="1715524163676" ID="ID_865895790" MODIFIED="1715524362164" TEXT="Job-Parameter">
<arrowlink COLOR="#618cdf" DESTINATION="ID_1478713442" ENDARROW="Default" ENDINCLINATION="-1475;183;" ID="Arrow_ID_812438746" STARTARROW="None" STARTINCLINATION="1572;-179;"/>
</node>
</node>
<node CREATED="1715524428545" ID="ID_560958356" MODIFIED="1715524433011" TEXT="StateClosure">
<node CREATED="1715524460644" ID="ID_119515941" MODIFIED="1715524465341" TEXT="Interface">
<icon BUILTIN="info"/>
</node>
<node CREATED="1715524479436" ID="ID_112791138" MODIFIED="1715524489199" TEXT="verbrigt die rekursive Struktur"/>
<node CREATED="1715524451030" ID="ID_1345698422" MODIFIED="1715524458849" TEXT="Gesamt-Sicht auf den Invocation-State"/>
</node>
<node CREATED="1715524499336" ID="ID_634802298" MODIFIED="1715524507730" TEXT="Turnout">
<node CREATED="1715524508722" ID="ID_1298600532" MODIFIED="1715524517177" TEXT="Implementiert die StateClosure"/>
<node CREATED="1715524597543" ID="ID_186808652" MODIFIED="1715524607018" TEXT="enth&#xe4;lt zudem die FeedManifold"/>
<node CREATED="1715524564307" ID="ID_1928346681" MODIFIED="1715524570346" TEXT="wird transient auf dem Stack erzeugt"/>
<node CREATED="1715524571366" ID="ID_305059985" MODIFIED="1715524585330" TEXT="bildet den Rahmen f&#xfc;r die Invocation"/>
</node>
<node CREATED="1715524648987" ID="ID_1049448500" MODIFIED="1715524653531" TEXT="TurnoutSystem">
<node CREATED="1715524655061" ID="ID_598019967" MODIFIED="1715524664389" TEXT="die Gesamtheit aller Turnouts"/>
<node CREATED="1715524666137" ID="ID_1671563246" MODIFIED="1715524677988" TEXT="der statische Ansatzpunkt hierf&#xfc;r"/>
<node CREATED="1715524716035" ID="ID_310789149" MODIFIED="1715524727612" TEXT="wird konkret vom Job aufrgerufen"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1713823642113" ID="ID_1687015571" MODIFIED="1713823821818" TEXT="TurnoutSystem als Zentral-Element">
<icon BUILTIN="flag-yellow"/>
@ -80930,9 +80985,57 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1714997721273" ID="ID_495097190" MODIFIED="1714997734831" TEXT="Zweck: was soll gesteuert werden?">
<icon BUILTIN="help"/>
<node CREATED="1715470812928" ID="ID_1502449647" MODIFIED="1715470821975" TEXT="alle verbleibenden variablen Elemente">
<node CREATED="1715473898487" ID="ID_1073194635" MODIFIED="1715473907005" TEXT="Auswertung der Automation"/>
<node CREATED="1715473919127" ID="ID_310274036" MODIFIED="1715473935288" TEXT="setzen von konkreten Node-Parametern als Folge derstelben"/>
<node CREATED="1715473945277" ID="ID_1870854612" MODIFIED="1715473973155" TEXT="Cache hit/miss &#x27f9; Entscheidung &#xfc;ber tieferen pull()"/>
<node CREATED="1715473983317" ID="ID_1250548955" MODIFIED="1715474015166" TEXT="dynamisch gesteuerte Verdrahtungs-Varianten (&#x27f6;Switchboard)"/>
<node CREATED="1715474018074" ID="ID_1546340401" MODIFIED="1715474235411" TEXT="konkrete Quelle f&#xfc;r Vorl&#xe4;ufer-Daten">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
wenn eine pull()-Kette nicht bis zur tats&#228;chlichen Quelle reicht, sondern an irgend einer Stelle bereits Ausgangs-Daten in einem Buffer liegen m&#252;ssen; beispielsweise weil diese Daten von einem IO-Job gelesen wurden, oder von einem Decoder/Demultiplexer aufbereitet wurden &#8212; es gibt dann eine hand-over-Node, und diese braucht ein konkret passendes BuffHandle f&#252;r jeden einzelnen Frame
</p>
</body>
</html></richcontent>
</node>
</node>
<node CREATED="1715471047293" ID="ID_1252850608" MODIFIED="1715471062214" TEXT="alles was au&#xdf;er dem reinen pull()-Trigger sonst noch geschehen mu&#xdf;">
<node CREATED="1715474264796" ID="ID_982312651" MODIFIED="1715474278067" TEXT="flankierende Auswertungen ansto&#xdf;en"/>
<node CREATED="1715474278775" ID="ID_1229355140" MODIFIED="1715474353008" TEXT="den OutputSlot belegen &#x27f6; DataSink"/>
<node CREATED="1715474371980" ID="ID_1664485444" MODIFIED="1715474379837" TEXT="den OutputSlot weiterschalten"/>
</node>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1714997738104" ID="ID_992197022" MODIFIED="1714997781578" TEXT="Ansatz: wie wirkt das TurnoutSystem?">
<icon BUILTIN="help"/>
<node CREATED="1715472388218" ID="ID_68717565" MODIFIED="1715472398744" TEXT="es ist f&#xfc;r das gesamte Segment einheitlich vorbereitet"/>
<node CREATED="1715472399775" ID="ID_1454531060" MODIFIED="1715472433927">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
es bekommt zus&#228;tzlch <i>nur </i>die Job-Parameter
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1715472442363" ID="ID_1480789204" MODIFIED="1715472459879" TEXT="es arbeitet eine vorkonfigurierte Template-Method ab"/>
<node CREATED="1715473103299" ID="ID_769047663" MODIFIED="1715473112686" TEXT="Implementierungs-M&#xf6;glichkeiten hierf&#xfc;r">
<node CREATED="1715473151973" ID="ID_876263334" MODIFIED="1715473216352" TEXT="der Aufruf legt &#xbb;Weichenstellungen&#xab; in einer Datenstruktur bereit">
<node CREATED="1715473619835" ID="ID_1572580022" MODIFIED="1715473694560" TEXT="ein vorbereiteter Funktor populiert eine transiente Datenstruktur"/>
<node CREATED="1715473695268" ID="ID_974732321" MODIFIED="1715473704087" TEXT="diese ist dann &#xfc;ber die State-Closure zug&#xe4;nglich"/>
<node CREATED="1715473705035" ID="ID_1737871340" MODIFIED="1715473736518" TEXT="die Invocation auf einzelnen Ebenen enth&#xe4;lt Callbacks"/>
<node CREATED="1715473737327" ID="ID_744715954" MODIFIED="1715473757108" TEXT="diese holen sich die Entscheidungs-Marken aus der transienten Struktur"/>
<node CREATED="1715473794263" ID="ID_1555808272" MODIFIED="1715473808208" TEXT="&#x27f9; die Vorbereitung mu&#xdf; einen Tree-Walk machen"/>
</node>
<node CREATED="1715473220139" ID="ID_1737288938" MODIFIED="1715473454212" TEXT="die Template-Method ist in die Node-Connectivity integriert">
<node CREATED="1715473515292" ID="ID_1374406663" MODIFIED="1715473531430" TEXT="das Turnout-System ist rekursiv auf allen Ebenen untergebracht"/>
<node CREATED="1715473532306" ID="ID_1011716640" MODIFIED="1715473544532" TEXT="jede Ebene wird erneut mit den Job-Parametern angetriggert"/>
<node CREATED="1715473545336" ID="ID_994010903" MODIFIED="1715473594150" TEXT="jede Invocation arbeitet die Schritte auf ihrer Ebene ab"/>
<node CREATED="1715473595108" ID="ID_1580808963" MODIFIED="1715473611988" TEXT="Job-Parameter werden &#xfc;ber die State-Closure transportiert"/>
</node>
</node>
</node>
</node>
</node>