Dispatcher-Pipeline: draft test for JobTicket access

This commit is contained in:
Fischlurch 2023-06-05 18:09:42 +02:00
parent a5b3a16f3e
commit 7d5c32e6b6
4 changed files with 164 additions and 64 deletions

View file

@ -1506,6 +1506,15 @@ namespace lib {
return TreeExplorer<ResIter> (ResCore {move(*this)});
}
/** shortcut notation to invoke \ref expand(expandFunctor) followed by \ref expandAll() */
template<class FUN>
auto
expandAll (FUN&& expandFunctor)
{
return this->expand (forward<FUN> (expandFunctor))
.expandAll();
}
/** extension functionality to be used on top of expand(), to perform expansion on next iteration.
* When configured, an expandChildren() call will not happen immediately, but rather in place of

View file

@ -81,11 +81,10 @@ namespace engine {
* instance for operating this planning process. Instead, together with each chunk of
* planned jobs we generate a continuation job, which -- on activation -- will pick up
* the planning of the next chunk. The Dispatcher interface was shaped especially to
* support this process, with a local JobBuilder for use within the continuation job,
* and a TimeAnchor to represent the continuation point. All the complexities of
* actually planning the jobs are hidden within the JobPlanningSequence,
* which, for the purpose of dispatching a series of jobs just looks
* like a sequence of job descriptors
* support this process, with a local PlanningPipeline for use within the RenderDrive
* incorporated into each CalcStream. All the complexities of actually planning the
* jobs are hidden within this pipeline, which, for the purpose of dispatching a
* series of jobs just looks like a sequence of job descriptors
*
* @todo 6/23 API is remoulded from ground up (»Playback Vertical Slice« integration effort)
*/
@ -111,7 +110,6 @@ namespace engine {
};
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1301 : obsolete
struct PipeFrameTick;
struct PipeExpander;
template<class IT>
struct PipelineBuilder;
@ -121,25 +119,33 @@ namespace engine {
public:
virtual ~Dispatcher(); ///< this is an interface
/**
* Start a builder sequence to assemble a job-planning pipeline, backed by this Dispatcher.
* @param timings the frame-grid and further specs to use for a specific CalcStream
* @remark the given #PipelineBuilder object shall be used to supply the further parameters,
* thereby qualifying the actual planning steps necessary to arrive at a sequence
* of Jobs; these can be retrieved from the resulting iterator, ready for dispatch.
*/
PipelineBuilder<PipeFrameTick> forCalcStream (Timings timings);
/**
* A complete job-planning pipeline: this »Lumiera Forward Iterator« drives the actual
* job-planning process on-demand. At the end of the pipeline, a sequence of render Jobs
* appears, ready for hand-over to the Scheduler. The PlanningPipeline itself wraps a
* »state-core« holding the current planning state; for operation it should be placed
* at a fixed location (typically in the CalcStream) and not duplicated, since this
* internal state ensures the generation of a distinct and unique sequence of Jobs
* for one specific data feed. During the lifetime of this iterator, the backing
* data structures in the Fixture must be kept alive and fixed in memory.
*/
template<class IT>
class PlanningPipeline
: public IT
{
////////////////////////////////////////////////////////////////////////////////////////////TICKET #1275 : what further API-functions are necessary to control a running CalcStream?
};
/**
* access a special JobTicket to build a »FrameDropper« Job.
* @todo 6/2023 WIP and totally unclear if this is even a good idea to start with....
*/
JobTicket&
getSinkTicketFor (play::DataSink sink)
{
UNIMPLEMENTED ("WTF is a SinkTicket???");
}
protected:
/** core dispatcher operation: based on the coordinates of a reference point,
@ -244,7 +250,7 @@ namespace engine {
auto
timeRange (Time start, Time after)
{
PipelineBuilder::activate (start,after);
SRC::activate (start,after);
return buildPipeline (lib::treeExplore (move(*this)));
} // expected next to invoke pullFrom(port,sink)
@ -283,17 +289,16 @@ namespace engine {
expandPrerequisites()
{
return buildPipeline (
this->expand([](TicketDepend& currentLevel)
this->expandAll([](TicketDepend& currentLevel)
{
JobTicket const* parent = currentLevel.second;
return lib::transformIterator (parent->getPrerequisites(0)
,[&parent](JobTicket const& prereqTicket)
{
{ // parent shifted up to first pos
return TicketDepend{parent, &prereqTicket};
}
);
})
.expandAll());
}));
}
/**
@ -303,12 +308,11 @@ namespace engine {
auto
feedTo (play::DataSink sink)
{
auto pipeline = this->transform([sink](TicketDepend& currentLevel)
return terminatePipeline (
this->transform([sink](TicketDepend& currentLevel)
{
return currentLevel.second; ///////////////////////////////OOO construct a JobPlanning here
});
using PipeIter = decltype(pipeline);
return PlanningPipeline<PipeIter>{move (pipeline)};
}));
}
@ -329,6 +333,13 @@ namespace engine {
{
return PipelineBuilder<PIP> {move (treeExplorer)};
}
template<class PIP>
PlanningPipeline<PIP>
terminatePipeline(PIP&& treeExplorer)
{
return PlanningPipeline<PIP> {move (treeExplorer)};
}
};

View file

@ -33,6 +33,7 @@
#include "lib/format-cout.hpp"///////////////////////TODO
#include "lib/iter-tree-explorer.hpp"
#include "lib/format-util.hpp"
#include "lib/util.hpp"
//#include "steam/engine/job-planning.hpp"
@ -44,6 +45,7 @@ using lib::eachNum;
using lib::treeExplore;
using lib::time::PQuant;
using lib::time::FrameRate;
using util::isnil;
namespace steam {
@ -188,9 +190,21 @@ namespace test {
void
accessTopLevelJobTicket()
{
play::Timings timings (FrameRate::PAL);
MockDispatcher dispatcher;
auto [port,sink] = dispatcher.getDummyConnection(0);
UNIMPLEMENTED ("transform into job ticket access");
auto pipeline = dispatcher.forCalcStream (timings)
.timeRange(Time{200,0}, Time{300,0})
.pullFrom (port);
CHECK (not isnil (pipeline));
CHECK (nullptr == pipeline->first);
JobTicket const& ticket = *pipeline->second;
FrameCoord dummy;
Job job = ticket.createJobFor(dummy);
CHECK (MockJobTicket::isAssociated (job, ticket));
}

View file

@ -73589,14 +73589,14 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="yes"/>
<node CREATED="1685406892909" ID="ID_877192337" MODIFIED="1685406903491" TEXT="wir z&#xe4;hlen einfach die Frame-Nummer hoch und gut is"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685406904249" ID="ID_1903725712" MODIFIED="1685406939765" TEXT="aus dem TimeAnchor wird eine einfache Variable chunkStart">
<arrowlink COLOR="#90417a" DESTINATION="ID_1280247593" ENDARROW="Default" ENDINCLINATION="-241;-172;" ID="Arrow_ID_1703119592" STARTARROW="None" STARTINCLINATION="-212;10;"/>
<arrowlink COLOR="#90417a" DESTINATION="ID_1280247593" ENDARROW="Default" ENDINCLINATION="160;0;" ID="Arrow_ID_1703119592" STARTARROW="None" STARTINCLINATION="246;11;"/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685583450800" ID="ID_9210672" MODIFIED="1685583462389" TEXT="frame-step Core">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1685583477662" ID="ID_1520687206" MODIFIED="1685631703092" TEXT="den einfachst m&#xf6;glichen Frame-Step als &#xbb;state core&#xab; verpacken">
<node COLOR="#338800" CREATED="1685583450800" ID="ID_9210672" MODIFIED="1685978896104" TEXT="frame-step Core">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1685583477662" FOLDED="true" ID="ID_1520687206" MODIFIED="1685978983947" TEXT="den einfachst m&#xf6;glichen Frame-Step als &#xbb;state core&#xab; verpacken">
<richcontent TYPE="NOTE"><html>
<head>
@ -73607,18 +73607,18 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</p>
</body>
</html></richcontent>
<icon BUILTIN="pencil"/>
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1685635382818" ID="ID_182297187" MODIFIED="1685635412661" TEXT="Vorstufe: die Kern-Funktionalit&#xe4;t direkt als Iterator-Pipeline demonstrieren">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1685635478500" ID="ID_1622487483" MODIFIED="1685676386317" TEXT="geeignetes Builder-API ausarbeiten">
<node COLOR="#338800" CREATED="1685635478500" ID="ID_1622487483" MODIFIED="1685978873316" TEXT="geeignetes Builder-API ausarbeiten">
<linktarget COLOR="#a44d82" DESTINATION="ID_1622487483" ENDARROW="Default" ENDINCLINATION="121;-252;" ID="Arrow_ID_1017802335" SOURCE="ID_60016786" STARTARROW="None" STARTINCLINATION="231;10;"/>
<icon BUILTIN="pencil"/>
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1685676367077" ID="ID_497119837" MODIFIED="1685676383553" TEXT="Builder-Syntax schaffen">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685676373201" ID="ID_290916668" MODIFIED="1685676382028" TEXT="soll von TreeExplorer erben">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1685676373201" FOLDED="true" ID="ID_290916668" MODIFIED="1685978647418" TEXT="soll von TreeExplorer erben">
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1685676390323" ID="ID_1302265239" MODIFIED="1685743982852" TEXT="geht das?">
<icon BUILTIN="help"/>
<node CREATED="1685676395607" ID="ID_840485660" MODIFIED="1685743976291" TEXT="erinnere mich an den EventLog-Filter">
@ -73634,7 +73634,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</html></richcontent>
<icon BUILTIN="idea"/>
</node>
<node CREATED="1685676405602" ID="ID_1339853853" MODIFIED="1685743938073" TEXT="das l&#xe4;uft auf einen decltype-Trick hinaus">
<node CREATED="1685676405602" ID="ID_1339853853" MODIFIED="1685978618782" TEXT="das l&#xe4;uft auf einen decltype-Trick hinaus">
<richcontent TYPE="NOTE"><html>
<head>
@ -73645,13 +73645,28 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</p>
</body>
</html></richcontent>
<icon BUILTIN="button_cancel"/>
</node>
<node CREATED="1685978557837" ID="ID_768288490" MODIFIED="1685978611820" TEXT="oder auf ein Type-Rebinding via Template">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
So macht es der TreeExplorer selber, und nach etlichen Versuchen bin ich auch hier bei dieser L&#246;sung gelandet (und zufrieden damit)
</p>
</body>
</html></richcontent>
<icon BUILTIN="forward"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685744020440" ID="ID_189611589" MODIFIED="1685744043568" TEXT="das eigene Builder-API soll aber auf TreeExplorer aufbauen k&#xf6;nnen">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1685744020440" ID="ID_189611589" MODIFIED="1685978550368" TEXT="das eigene Builder-API soll aber auf TreeExplorer aufbauen k&#xf6;nnen">
<icon BUILTIN="yes"/>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1685743991581" ID="ID_865546443" MODIFIED="1685809733371" TEXT="Type-Rebinding einrichten">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1685743991581" ID="ID_865546443" MODIFIED="1685978498740" TEXT="Type-Rebinding einrichten">
<arrowlink COLOR="#2741ab" DESTINATION="ID_681131446" ENDARROW="Default" ENDINCLINATION="-422;-16;" ID="Arrow_ID_1981008224" STARTARROW="None" STARTINCLINATION="66;259;"/>
<icon BUILTIN="button_ok"/>
<node COLOR="#5b280f" CREATED="1685744055315" ID="ID_115548313" MODIFIED="1685809647945" TEXT="f&#xfc;r Basis-Konstruktion">
<icon BUILTIN="button_cancel"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1685754130097" ID="ID_286369938" MODIFIED="1685754149459" TEXT="schwierig">
@ -73692,11 +73707,11 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node COLOR="#5b280f" CREATED="1685744060666" ID="ID_676050987" MODIFIED="1685833565946" TEXT="f&#xfc;r Anwendung von TreeExplorer-Builder-Funktionen">
<icon BUILTIN="button_cancel"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1685809751146" ID="ID_1263839813" MODIFIED="1685809769709" TEXT="&#xfc;ber Sequenz von dedizierten Builder-Typen l&#xf6;sen">
<node COLOR="#435e98" CREATED="1685809751146" ID="ID_1263839813" MODIFIED="1685978514775" TEXT="&#xfc;ber Sequenz von dedizierten Builder-Typen l&#xf6;sen">
<icon BUILTIN="yes"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685809771167" ID="ID_998998083" MODIFIED="1685809780626" TEXT="Problem: Definitions-Sequenz">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#435e98" CREATED="1685809771167" ID="ID_998998083" MODIFIED="1685978511009" TEXT="Problem: Definitions-Sequenz">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1685809782637" ID="ID_1994330949" MODIFIED="1685809800179" TEXT="(inline)-Funktionen sind erst nach dem Typ definiert"/>
<node CREATED="1685809800830" ID="ID_835161833" MODIFIED="1685809812910" TEXT="decltype kann erst auf vollst&#xe4;ndigen Typ angewendet werden"/>
<node CREATED="1685809816376" ID="ID_1605798061" MODIFIED="1685809838809" TEXT="brauche aber den decltype zu Beginn des n&#xe4;chsten Binder-Typs"/>
@ -73823,9 +73838,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1685917872249" ID="ID_531896666" MODIFIED="1685924661892" TEXT="doch nochmal Ansatz mit Builder-Typ versuchen">
<node COLOR="#338800" CREATED="1685917872249" ID="ID_531896666" MODIFIED="1685978495675" TEXT="doch nochmal Ansatz mit Builder-Typ versuchen">
<linktarget COLOR="#5749b9" DESTINATION="ID_531896666" ENDARROW="Default" ENDINCLINATION="13;-50;" ID="Arrow_ID_1545948492" SOURCE="ID_1866369353" STARTARROW="None" STARTINCLINATION="-222;14;"/>
<icon BUILTIN="pencil"/>
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1685917908769" ID="ID_614051285" MODIFIED="1685924391262" TEXT="ein spezielles Builder-Template verwenden">
<icon BUILTIN="button_ok"/>
</node>
@ -73855,24 +73870,50 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1685924933403" ID="ID_998006413" MODIFIED="1685924963731" TEXT="verpackt in ein PlanningPipeline&lt;IT&gt;"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685918022280" ID="ID_905868944" MODIFIED="1685918037029" TEXT="Generische Expander-Funktion entwickeln">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685918038261" ID="ID_547403195" MODIFIED="1685918078873" TEXT="kein fester Quell-Argument-Typ">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#5b280f" CREATED="1685918022280" ID="ID_905868944" MODIFIED="1685977886292" TEXT="Generische Expander-Funktion entwickeln">
<icon BUILTIN="button_cancel"/>
<node COLOR="#5b280f" CREATED="1685918038261" ID="ID_547403195" MODIFIED="1685978246222" TEXT="geht rein logisch nicht">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
Der expand()-Mechanismus im TreeExplorer ist <i>kein monadisches <b>flatMap&#160; </b></i>&#8212; sondern nur &#228;hnlich (aber an den intendierten Nutzen angepa&#223;t): das Vater-Element erscheint zun&#228;chst selbst im Resultat-Iterator, und dann erst folgen expandierte Kind-Elemente; monadisches flatMap w&#252;rde den Vater sofort konsumieren und rekursives flatMap w&#252;rde sofort bis auf unterste Blatt-Ebene entfalten. Aber die Konsequenz ist: da wir den Vater selber <i>einmal durchreichen,</i>&#160;m&#252;ssen Ergebnistyp und Quelltyp kompatibel sein
</p>
</body>
</html></richcontent>
<icon BUILTIN="closed"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685918045844" ID="ID_494675571" MODIFIED="1685918063148" TEXT="soll sich entsprechend auf Root-Level anders verhalten">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1685918045844" ID="ID_494675571" MODIFIED="1685977941291" TEXT="markiere stattdessen den &#xbb;parent&#xab; auf root-level mit NULL">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685918123634" ID="ID_1372348029" MODIFIED="1685918139283" TEXT="ItemWrapper auf non-copyable Typen anwendbar machen">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1685918123634" ID="ID_1372348029" MODIFIED="1685978394612" TEXT="ItemWrapper auf non-copyable Typen anwendbar machen">
<icon BUILTIN="hourglass"/>
<node CREATED="1685978396373" ID="ID_1527864771" MODIFIED="1685978400506" TEXT="vorerst vertagt"/>
<node CREATED="1685978401013" ID="ID_443958342" MODIFIED="1685978419200" TEXT="der &#xbb;workaround&#xab; (Pointer verwenden) erweist sich hier sogar als n&#xfc;tzlich"/>
</node>
<node COLOR="#435e98" CREATED="1685978425523" HGAP="-26" ID="ID_681131446" MODIFIED="1685978484709" VSHIFT="14">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
<b>Fazit</b>: in diesem dritten Anlauf konnte ich das Problem befriedigend l&#246;sen
</p>
</body>
</html></richcontent>
<linktarget COLOR="#2741ab" DESTINATION="ID_681131446" ENDARROW="Default" ENDINCLINATION="-422;-16;" ID="Arrow_ID_1981008224" SOURCE="ID_865546443" STARTARROW="None" STARTINCLINATION="66;259;"/>
<icon BUILTIN="forward"/>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1685757095009" ID="ID_707524538" MODIFIED="1685809878137" TEXT="Sequenz von Builder-Typen verwenden">
</node>
<node COLOR="#338800" CREATED="1685757095009" ID="ID_707524538" MODIFIED="1685978849823" TEXT="Sequenz von Builder-Typen verwenden">
<icon BUILTIN="idea"/>
<icon BUILTIN="pencil"/>
<node CREATED="1685757114222" ID="ID_1148981272" MODIFIED="1685757140497" TEXT="weil ohnehin die Builder-Funktionen in einer fixen Reihenfolge aufgerufen werden m&#xfc;ssen">
<icon BUILTIN="messagebox_warning"/>
</node>
@ -73886,13 +73927,19 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node COLOR="#338800" CREATED="1685809519544" ID="ID_619200654" MODIFIED="1685809529263" TEXT="Haltepunkt-Semantik im Test verifiziert">
<icon BUILTIN="button_ok"/>
</node>
<node CREATED="1685804222909" ID="ID_882875787" MODIFIED="1685804227895" TEXT="Gliederung">
<node COLOR="#435e98" CREATED="1685804222909" ID="ID_882875787" MODIFIED="1685978837548" TEXT="Gliederung">
<icon BUILTIN="info"/>
<node CREATED="1685804229424" ID="ID_1243885994" MODIFIED="1685804229424" TEXT="struct PipeFrameTick;">
<node CREATED="1685804229424" ID="ID_1243885994" MODIFIED="1685978811819" TEXT="PipeFrameTick">
<node COLOR="#435e98" CREATED="1685978816510" ID="ID_1060580138" MODIFIED="1685978833497" TEXT="&#xbb;stateCore&#xab;"/>
<node CREATED="1685804263831" ID="ID_1326960664" MODIFIED="1685804267603" TEXT="Zeitpunkte"/>
<node CREATED="1685804268663" ID="ID_1765378616" MODIFIED="1685804275894" TEXT="Stop am Ende"/>
</node>
<node CREATED="1685804229425" ID="ID_1068361872" MODIFIED="1685804229425" TEXT="struct PipeSelector;">
<node CREATED="1685978664851" ID="ID_1570380564" MODIFIED="1685978673310" TEXT="PipeBuilder&lt;PIP&gt;">
<node CREATED="1685978674908" ID="ID_1693907267" MODIFIED="1685978689019" TEXT="wird jeweils terminal dar&#xfc;ber gesetzt"/>
<node CREATED="1685978689624" ID="ID_591717951" MODIFIED="1685978701290" TEXT="erbt damit von der jeweiligen TreeExplorer-Pipeline"/>
<node CREATED="1685978702466" ID="ID_661451432" MODIFIED="1685978707286" TEXT="Builder-Operationen">
<node CREATED="1685978721050" ID="ID_889695636" MODIFIED="1685978731093" TEXT="timeRange : setzt Start/Stop"/>
<node CREATED="1685978738620" ID="ID_759855849" MODIFIED="1685978781518" TEXT="pullFrom(ModelPort)">
<node CREATED="1685804280614" ID="ID_636246298" MODIFIED="1685804307946" TEXT="w&#xe4;hlt Verbindung zum low-level-Model"/>
<node COLOR="#5b280f" CREATED="1685804312326" ID="ID_1049622554" MODIFIED="1685925022016" TEXT="neue Idee: &#xbb;FrameDropper&#xab; bereitstellen">
<linktarget COLOR="#fdfed9" DESTINATION="ID_1049622554" ENDARROW="Default" ENDINCLINATION="-118;8;" ID="Arrow_ID_109489850" SOURCE="ID_9551953" STARTARROW="None" STARTINCLINATION="124;-21;"/>
@ -73904,11 +73951,11 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node CREATED="1685804229425" ID="ID_1660231509" MODIFIED="1685804229425" TEXT="struct PipeExpander;">
<node CREATED="1685978756949" ID="ID_708810901" MODIFIED="1685978761330" TEXT="expandPrerequisites">
<node CREATED="1685804397958" ID="ID_897391572" MODIFIED="1685804414527" TEXT="die rekursive monadische Tiefensuche"/>
<node CREATED="1685804425069" ID="ID_703856821" MODIFIED="1685804474914" TEXT="(Dependent, Dependency)"/>
</node>
<node CREATED="1685804229425" ID="ID_1653285546" MODIFIED="1685804229425" TEXT="struct PipePlanner;">
<node CREATED="1685978784259" ID="ID_648299167" MODIFIED="1685978792103" TEXT="feedTo(DataSink)">
<node CREATED="1685804493985" ID="ID_1670773237" MODIFIED="1685804500860" TEXT="Aggregat aller Planungsdaten"/>
<node CREATED="1685804506903" ID="ID_1557824404" MODIFIED="1685804516211" TEXT="JobPlanning legt die Zeitfenster fest"/>
</node>
@ -73916,6 +73963,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685583497277" ID="ID_1911386159" MODIFIED="1685583620738" TEXT="sinnvolles Erg&#xe4;nzungs-API bereitstellen">
<richcontent TYPE="NOTE"><html>
<head>
@ -73929,7 +73977,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</html></richcontent>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685809903965" ID="ID_1280247593" MODIFIED="1685809942333" TEXT="n&#xe4;chsten chunkStart auslesen">
<linktarget COLOR="#90417a" DESTINATION="ID_1280247593" ENDARROW="Default" ENDINCLINATION="-241;-172;" ID="Arrow_ID_1703119592" SOURCE="ID_1903725712" STARTARROW="None" STARTINCLINATION="-212;10;"/>
<linktarget COLOR="#90417a" DESTINATION="ID_1280247593" ENDARROW="Default" ENDINCLINATION="160;0;" ID="Arrow_ID_1703119592" SOURCE="ID_1903725712" STARTARROW="None" STARTINCLINATION="246;11;"/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
@ -73959,14 +74007,32 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</html></richcontent>
</node>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1685843418766" ID="ID_311511953" MODIFIED="1685843432557" TEXT="JobTicket const&amp; oder JobTicket const* &#xfc;bergeben?">
<node COLOR="#435e98" CREATED="1685843418766" FOLDED="true" ID="ID_311511953" MODIFIED="1685979141052" TEXT="JobTicket const&amp; oder JobTicket const* &#xfc;bergeben?">
<icon BUILTIN="help"/>
<node CREATED="1685843434561" ID="ID_787389984" MODIFIED="1685843465845" TEXT="const&amp; w&#xe4;re nat&#xfc;rlich sch&#xf6;n">
<icon BUILTIN="ksmiletris"/>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1685843440752" ID="ID_1684778826" MODIFIED="1685843461757" TEXT="aber: der Assignment-Operator im ItermWrapper (mal wieder)">
<node COLOR="#ff0000" CREATED="1685843440752" ID="ID_1684778826" MODIFIED="1685979119362" TEXT="aber: der Assignment-Operator im ItermWrapper (mal wieder)">
<icon BUILTIN="broken-line"/>
</node>
<node CREATED="1685979092865" ID="ID_91827998" MODIFIED="1685979109624" TEXT="NULLPTR sinnvoll um root-Level zu markieren">
<icon BUILTIN="yes"/>
</node>
<node COLOR="#435e98" CREATED="1685979124917" ID="ID_1602555347" MODIFIED="1685979131683" TEXT="also bleibt&apos;s beim Pointer">
<icon BUILTIN="forward"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685979146435" ID="ID_1554403810" MODIFIED="1685979205259" TEXT="Zugang zum JobTicket kl&#xe4;ren">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685979157473" ID="ID_1156902335" MODIFIED="1685979175008" TEXT="allgemein (Plan f&#xfc;r operative L&#xf6;sung)">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685979177023" ID="ID_886135870" MODIFIED="1685979181526" TEXT="Mock-L&#xf6;sung">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685979197228" ID="ID_545092486" MODIFIED="1685979201501" TEXT="Thema: ModelPort">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681742836996" ID="ID_1224963303" MODIFIED="1684878201314" TEXT="expander function to explore prerequisite JobTickets">