Dispatcher-Pipeline: coordination of base tick and prerequisite expansion
- had to fix a logical inconsistency in the underlying Expander implementation in TreeExplorer: the source-pipeline was pulled in advance on expansion, in order to "consume" the expanded element immediately; now we retain this element (actually inaccessible) until all of the immediate children are consumed; thus the (visible) state of the PipeFrameTick stays at the frame number corresponding to the top-level frame Job, while possibly expanding a complete tree of flexible prerequisites This test now gives a nice visualisation of the interconnected states in the Job-Planning pipeline. This can be quite complex, yet I still think that this semi-functional approach with a stateful pipeline and expand functors is the cleanest way to handle this while encapsulating all details
This commit is contained in:
parent
08dfe1007c
commit
f84517547b
4 changed files with 262 additions and 33 deletions
|
|
@ -644,7 +644,8 @@ namespace lib {
|
|||
* of this Expander (decorator) is to integrate those "nested child iterators" seamlessly
|
||||
* into the overall iteration process; once a child iterator is exhausted, it will be
|
||||
* popped and iteration continues with the previous child iterator or finally with
|
||||
* the source iterator wrapped by this decorator.
|
||||
* the source iterator wrapped by this decorator. The source pipeline is only pulled
|
||||
* once the expanded children are exhausted.
|
||||
* @remark since we allow a lot of leeway regarding the actual form and definition of the
|
||||
* _expansion functor_, there is a lot of minute technical details, mostly confined
|
||||
* within the _FunTraits traits. For the same reason, we need to prepare two different
|
||||
|
|
@ -689,14 +690,14 @@ namespace lib {
|
|||
expandChildren()
|
||||
{
|
||||
REQUIRE (this->checkPoint(), "attempt to expand an empty explorer");
|
||||
REQUIRE (invariant());
|
||||
|
||||
ResIter expanded{ hasChildren()? expandChild_(*expansions_)
|
||||
: expandRoot_(*this)};
|
||||
incrementCurrent(); // consume current head element (but don't clean-up)
|
||||
if (not isnil(expanded))
|
||||
expansions_.push (move(expanded));
|
||||
expansions_.push (move(expanded)); // note: source of expansion retained
|
||||
else
|
||||
dropExhaustedChildren(); // clean-up only here to preserve the logical depth
|
||||
iterNext(); // expansion unsuccessful, thus consume source immediately
|
||||
|
||||
ENSURE (invariant());
|
||||
}
|
||||
|
|
@ -773,6 +774,12 @@ namespace lib {
|
|||
|
||||
|
||||
protected:
|
||||
bool
|
||||
hasChildren() const
|
||||
{
|
||||
return 0 < depth();
|
||||
}
|
||||
|
||||
/** @internal accessor for downstream layers to allow close collaboration */
|
||||
ResIter&
|
||||
accessCurrentChildIter()
|
||||
|
|
@ -785,13 +792,10 @@ namespace lib {
|
|||
dropExhaustedChildren()
|
||||
{
|
||||
while (not invariant())
|
||||
++expansions_;
|
||||
}
|
||||
|
||||
bool
|
||||
hasChildren() const
|
||||
{
|
||||
return 0 < depth();
|
||||
{
|
||||
++expansions_; // pop expansion stack (to reinstate invariant)
|
||||
incrementCurrent(); // consume source of innermost expansion
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -213,14 +213,24 @@ namespace test {
|
|||
}
|
||||
|
||||
|
||||
/** @test build and verify the exploration function to discover job prerequisites */
|
||||
/** @test build and verify the exploration function to discover job prerequisites
|
||||
* - use a setup where the master ExitNode requires a prerequisite ExitNode to be pulled
|
||||
* - mark the pipeline-IDs, so that both nodes can be distinguished in the resulting Jobs
|
||||
* - the `expandPrerequisites()` builder function uses JobTicket::getPrerequisites()
|
||||
* - and this »expander« function is unfolded recursively such that first the source
|
||||
* appears in the iterator, and as next step the child prerequisites, possibly to
|
||||
* be unfolded further recursively
|
||||
* - by design of the iterator pipeline, it is always possible to access the `PipeFrameTick`
|
||||
* - this corresponds to the top-level JobTicket, which will produce the final frame
|
||||
* - putting all these information together, proper working can be visualised.
|
||||
*/
|
||||
void
|
||||
exploreJobTickets()
|
||||
{
|
||||
MockDispatcher dispatcher{MakeRec() // define a single segment for the complete time axis
|
||||
.attrib("mark", 11) // the »master job« for each frame has pipeline-ID ≔ 11
|
||||
.scope(MakeRec()
|
||||
.attrib("mark",22) // add a »prerequisite job« with pipeline-ID ≔ 22
|
||||
.attrib("mark",22) // add a »prerequisite job« marked with pipeline-ID ≔ 22
|
||||
.genNode())
|
||||
.genNode()};
|
||||
|
||||
|
|
|
|||
|
|
@ -1148,7 +1148,7 @@ namespace test{
|
|||
|
||||
|
||||
/** @test ability to wrap and handle IterSource based iteration.
|
||||
* Contrary to the preceding test case, here the point is to _base the whole pipleine_
|
||||
* Contrary to the preceding test case, here the point is to _base the whole pipeline_
|
||||
* on a data source accessible through the IterSource (VTable based) interface. The notable
|
||||
* point with this technique is the ability to use some _extended sub interface of IterSource_
|
||||
* and to rely on this interface to implement some functor bound into the TreeExplorer pipeline.
|
||||
|
|
@ -1168,19 +1168,19 @@ namespace test{
|
|||
virtual PrivateSource* expandChildren() const =0;
|
||||
};
|
||||
|
||||
class VerySpecivicIter
|
||||
class VerySpecificIter
|
||||
: public WrappedLumieraIter<NumberSequence
|
||||
, PrivateSource >
|
||||
{
|
||||
public:
|
||||
VerySpecivicIter(uint start)
|
||||
VerySpecificIter(uint start)
|
||||
: WrappedLumieraIter(NumberSequence{start})
|
||||
{ }
|
||||
|
||||
virtual PrivateSource*
|
||||
expandChildren() const override
|
||||
{
|
||||
return new VerySpecivicIter{*wrappedIter() - 2};
|
||||
return new VerySpecificIter{*wrappedIter() - 2};
|
||||
}
|
||||
|
||||
uint
|
||||
|
|
@ -1194,7 +1194,7 @@ namespace test{
|
|||
// simple standard case: create a new heap allocated IterSource implementation.
|
||||
// TreeExplorer will take ownership (by smart-ptr) and build a Lumiera Iterator front-End
|
||||
CHECK ("7-6-5-4-3-2-1" == materialise (
|
||||
treeExplore(new VerySpecivicIter{7})));
|
||||
treeExplore(new VerySpecificIter{7})));
|
||||
|
||||
|
||||
// missing source detected
|
||||
|
|
@ -1203,7 +1203,7 @@ namespace test{
|
|||
|
||||
|
||||
// attach to an IterSource living here in local scope...
|
||||
VerySpecivicIter vsit{5};
|
||||
VerySpecificIter vsit{5};
|
||||
|
||||
// ...and build a child expansion on top, which calls through the PrivateSource-API
|
||||
// Effectively this means we do not know the concrete type of the "expanded children" iterator,
|
||||
|
|
@ -1219,17 +1219,17 @@ namespace test{
|
|||
CHECK (4 == vsit.currentVal());
|
||||
|
||||
CHECK (0 == ii.depth());
|
||||
ii.expandChildren(); // note: calls through source's VTable to invoke VerySpecificIter::expandChildren()
|
||||
ii.expandChildren(); // note: calls through source's VTable to invoke VerySpecificIter::expandChildren()
|
||||
CHECK (1 == ii.depth());
|
||||
|
||||
CHECK (2 == *ii);
|
||||
++ii;
|
||||
CHECK (1 == *ii);
|
||||
|
||||
CHECK (3 == vsit.currentVal());
|
||||
CHECK (4 == vsit.currentVal()); // note: as long as expanded children are alive, the source pipeline is not pulled further
|
||||
CHECK (1 == ii.depth());
|
||||
++ii;
|
||||
CHECK (0 == ii.depth());
|
||||
CHECK (0 == ii.depth()); // ... but now the children were exhausted and thus also the source advanced
|
||||
CHECK (3 == *ii);
|
||||
CHECK (3 == vsit.currentVal());
|
||||
++ii;
|
||||
|
|
|
|||
|
|
@ -55602,6 +55602,205 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1686757225113" FOLDED="true" ID="ID_1735448615" MODIFIED="1686757642923" TEXT="Koordination Quell-Pipeline bei Expansion">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1686757298364" ID="ID_21721602" MODIFIED="1686757336765" TEXT="relevant, da explizit die Quell-Pipeline / »StateCore« sichtbar bleibt">
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node CREATED="1686757343809" ID="ID_1434845387" MODIFIED="1686757369648" TEXT="Symptome">
|
||||
<icon BUILTIN="info"/>
|
||||
<node CREATED="1686757371055" ID="ID_1827960339" MODIFIED="1686757384974" TEXT="expandChildren schaltet auch sofort die Basis-Pipeline weiter"/>
|
||||
<node CREATED="1686757385767" ID="ID_755880918" MODIFIED="1686757420451" TEXT="wenn die Kinder verbraucht sind, wird die bereits weitergeschaltete Basis-Pipeline sichtbar"/>
|
||||
<node COLOR="#435e98" CREATED="1686757428518" ID="ID_1278230520" MODIFIED="1686757502868" TEXT="konkretes Beispiel">
|
||||
<icon BUILTIN="forward"/>
|
||||
<node CREATED="1686757433466" ID="ID_526100016" MODIFIED="1686757438562" TEXT="Frame-Dispatcher-Pipeline"/>
|
||||
<node CREATED="1686757485358" ID="ID_390992774" MODIFIED="1686757494673" TEXT="JobPlanningSetup_test::exploreJobTickets()"/>
|
||||
<node CREATED="1686708460080" ID="ID_1791894372" MODIFIED="1686708540153">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
<font color="#801111" face="Monospaced" size="2">FAIL___expectation___________ </font>
|
||||
</p>
|
||||
<p>
|
||||
<font color="#801111" face="Monospaced" size="2">expect:J(11|200ms)-J(22|200ms)-J(11|240ms)-J(22|240ms)-J(11|280ms)-J(22|280ms) </font>
|
||||
</p>
|
||||
<p>
|
||||
<font color="#801111" face="Monospaced" size="2">actual:J(11|200ms)-J(22|</font><font color="#ff0000" face="Monospaced" size="2">240</font><font color="#801111" face="Monospaced" size="2">ms)-J(11|240ms)-J(22|</font><font color="#ff0000" face="Monospaced" size="2">280</font><font color="#801111" face="Monospaced" size="2">ms)-J(11|280ms)-J(22|</font><font color="#ff0000" face="Monospaced" size="2">320</font><font color="#801111" face="Monospaced" size="2">ms) </font>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#4343af" CREATED="1686749596410" ID="ID_660032494" MODIFIED="1686757331988">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p style="text-align: center">
|
||||
Lösung: Quelle erst weiter iterieren,
|
||||
</p>
|
||||
<p style="text-align: center">
|
||||
wenn wirklich notwendig
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<linktarget COLOR="#4a85b5" DESTINATION="ID_660032494" ENDARROW="Default" ENDINCLINATION="-821;104;" ID="Arrow_ID_1758558464" SOURCE="ID_1861299504" STARTARROW="None" STARTINCLINATION="956;47;"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
<node COLOR="#338800" CREATED="1686749659842" ID="ID_128221783" MODIFIED="1686756787780" TEXT="Ansatz: incrementCurrent() ⟶ verschieben in dropExhaustedChildren()">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1686749721562" ID="ID_804693591" MODIFIED="1686749744086">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
Bedeutung der <b>Invariante</b>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="info"/>
|
||||
<node CREATED="1686749871599" ID="ID_810008134" MODIFIED="1686749946830" TEXT="wenn überhaupt entfaltet wurde, liegt auch ein KInd bereit"/>
|
||||
<node CREATED="1686749949462" ID="ID_419936745" MODIFIED="1686749970031" TEXT="man könnte auch sagen: Kind-Iteration hat Vorrang bis zur Erschöpfung"/>
|
||||
<node CREATED="1686749996449" ID="ID_923043359" MODIFIED="1686750064046">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
<u>technisch</u>:
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
entweder Expansions-Stack ist leer
|
||||
</li>
|
||||
<li>
|
||||
oder der oberste Iterator auf dem Stack ist nichtleer
|
||||
</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="forward"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1686750400101" ID="ID_1494367031" MODIFIED="1686751896580" TEXT="wozu dient(e) das vorauseilende Inkrementieren des Vorgängers?">
|
||||
<font NAME="SansSerif" SIZE="12"/>
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1686750461874" ID="ID_1920000064" MODIFIED="1686750491477" TEXT="um das expandierte Quell-Element sofort zu verwerfen"/>
|
||||
<node CREATED="1686751833197" ID="ID_1444579002" MODIFIED="1686751857463" TEXT="damit auch: stets einen klaren Status haben"/>
|
||||
<node CREATED="1686751901767" ID="ID_754804911" MODIFIED="1686751928448" TEXT="(naiv) zusätzliche Status-Variable vermeiden"/>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1686751932235" ID="ID_1269020997" MODIFIED="1686757570575" TEXT="Alternative: auf den operationalen Status verlassen">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1686751984221" ID="ID_1676806677" MODIFIED="1686752536819" TEXT="das ist nicht schön aber hier vertretbar">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
Und zwar wegen der Objektorientierung: die gesamte Logik ist verkapselt, und nur wenige Operationen sind für abgeleitete Klassen zugänglich; im Besonderen ist incrementCurrent() private und das ist der einzige Weg um an die Iteration des Quell-Iterators zu kommen, aber genau dort wird auch dropExhaustedChildren aufgerufen()
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node CREATED="1686752539218" ID="ID_737156085" MODIFIED="1686752560042" TEXT="die Invariante wird in jeder Operation wieder hergestellt"/>
|
||||
<node CREATED="1686752561157" ID="ID_1590943755" MODIFIED="1686752573856" TEXT="das bedingt das Aufruffen der Aufräum-Aktion"/>
|
||||
<node CREATED="1686752575419" ID="ID_1015024147" MODIFIED="1686752652969">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
insofern kann das Verwerfen des Quell-Objekts verzögert werden,
|
||||
</p>
|
||||
<p>
|
||||
solange bis die daraus resultierenden Kinder aufgebraucht sind;
|
||||
</p>
|
||||
<p>
|
||||
da wir ohnehin einen Stack benötigen, läßt sich dieser Status
|
||||
</p>
|
||||
<p>
|
||||
auch verschachtelt aufrechterhalten
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1686752682867" ID="ID_1430157017" MODIFIED="1686752803422" TEXT="Für die Pipeline insgesamt ist dies sichtbare verhalten logischer">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<ul>
|
||||
<li>
|
||||
Expansion: Quell wird noch nicht angefaßt, aber Kind-Iterator wird bereitgelegt und daraus ggfs. das erste Element exponiert
|
||||
</li>
|
||||
<li>
|
||||
Wenn eine Kind-Ebene leer wird, wird sie verworfen — <i>und erst an dieser Stelle </i> wird <b>das nächste Quell-Element<i> </i></b>wirklich benötigt
|
||||
</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1686755589510" ID="ID_1548186297" MODIFIED="1686756785363" TEXT="Spezialfall beachten: wenn Expansion leeres Ergebnis liefert">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1686755609035" ID="ID_1318211867" MODIFIED="1686755643933" TEXT="streng logisch müßte man auch das erst auf den Stack legen..."/>
|
||||
<node CREATED="1686755644695" ID="ID_187524722" MODIFIED="1686755645459" TEXT="und dann dropExhaustedChildren()"/>
|
||||
<node CREATED="1686755684401" ID="ID_328751898" MODIFIED="1686755965125" TEXT="stattdessen: nur in diesem Fall iterNext()">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
bisher stand hier das dropExhaustedChildren(), aber das fällt in disem Fall leer durch, wenn wir uns bereits wieder auf Basis-Level befinden — was bisher kein Problem war, denn es war bereits das Quell-Element konsumiert worden. Da wir aber diesen Fall klar zu fassen bekommen direkt in expandChildren()  (weil eben die Expansion sich leer ergibt), können wir explizit in diesem Fall das Konsumieren der Quelle direkt machen. Ist im Ergebnis sogar logischer.
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1686757573863" ID="ID_135133706" MODIFIED="1686757618838" TEXT="überarbeitete Implementierung ist nun sogar konsistenter geworden">
|
||||
<linktarget COLOR="#38bbd1" DESTINATION="ID_135133706" ENDARROW="Default" ENDINCLINATION="-42;106;" ID="Arrow_ID_485074689" SOURCE="ID_742355681" STARTARROW="None" STARTINCLINATION="261;13;"/>
|
||||
<icon BUILTIN="ksmiletris"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1686756791749" ID="ID_1725472093" MODIFIED="1686756944993" TEXT="sehr gut: das geänderte Verhalten war auch in einem Testfall sichtbar">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
...ich hatte es seinerzeit wohl bemerkt, aber für nicht relevant bzw sogar „eigentlich logisch“ gehalten...  jedenfalls war es im Testfall  <font face="Monospaced" color="#2823a5">verify_IterSource()</font>  dokumentiert, da dort auch die Source-Pipeline (hinter dem IterSource-Interface) sichtbar ist und mit beobachtet wird. Dieser Fall (Zeile 1229) hat nun angesprochen und wurde entsprechend korrigiert
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1686757519200" ID="ID_742355681" MODIFIED="1686757624654" TEXT="Überarbeitung der Implementierungs-Logik im Expander">
|
||||
<arrowlink COLOR="#38bbd1" DESTINATION="ID_135133706" ENDARROW="Default" ENDINCLINATION="-42;106;" ID="Arrow_ID_485074689" STARTARROW="None" STARTINCLINATION="261;13;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1686757630758" ID="ID_272013045" MODIFIED="1686757636109" TEXT="Testsuite GRÜN">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1535893137527" ID="ID_994961372" MODIFIED="1535893142488" TEXT="Verwendungen">
|
||||
|
|
@ -64555,8 +64754,8 @@
|
|||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686696361018" ID="ID_320473769" MODIFIED="1686696804492" TEXT="generischen Rahmen + front-End schaffen">
|
||||
<linktarget COLOR="#5954b6" DESTINATION="ID_320473769" ENDARROW="Default" ENDINCLINATION="-1037;63;" ID="Arrow_ID_34332665" SOURCE="ID_725756209" STARTARROW="None" STARTINCLINATION="-1213;-50;"/>
|
||||
<linktarget COLOR="#5954b6" DESTINATION="ID_320473769" ENDARROW="Default" ENDINCLINATION="-929;56;" ID="Arrow_ID_593145833" SOURCE="ID_1712895163" STARTARROW="None" STARTINCLINATION="-1213;-50;"/>
|
||||
<linktarget COLOR="#5954b6" DESTINATION="ID_320473769" ENDARROW="Default" ENDINCLINATION="-1037;63;" ID="Arrow_ID_34332665" SOURCE="ID_725756209" STARTARROW="None" STARTINCLINATION="-1213;-50;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1686696687820" ID="ID_576907632" MODIFIED="1686696698610" TEXT="Entwurf: AllocatorHandle">
|
||||
<icon BUILTIN="pencil"/>
|
||||
|
|
@ -75138,7 +75337,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1681742836996" ID="ID_1224963303" MODIFIED="1686698178114" TEXT="expander function to explore prerequisite JobTickets">
|
||||
<node COLOR="#435e98" CREATED="1681742836996" FOLDED="true" ID="ID_1224963303" MODIFIED="1686698178114" TEXT="expander function to explore prerequisite JobTickets">
|
||||
<icon BUILTIN="full-4"/>
|
||||
<node COLOR="#338800" CREATED="1685803059992" ID="ID_1436607523" MODIFIED="1685925254772" TEXT="expander-Funktor(einfach)">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
|
|
@ -75231,14 +75430,14 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686698185293" ID="ID_611682817" MODIFIED="1686698192373" TEXT="Verifikation im Test">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1686698185293" ID="ID_611682817" MODIFIED="1686757781839" TEXT="Verifikation im Test">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1686705330560" ID="ID_603570215" MODIFIED="1686705437819" TEXT="analog zu vorherigem Testfall + expandPrerequisites()">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1686705344942" ID="ID_1723569587" MODIFIED="1686707637095" TEXT="erst mal erstes Element der Pipeline verifizieren">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1686705447273" ID="ID_221817969" MODIFIED="1686707595983" TEXT="mark kommt nicht an">
|
||||
<node COLOR="#435e98" CREATED="1686705447273" FOLDED="true" ID="ID_221817969" MODIFIED="1686707595983" TEXT="mark kommt nicht an">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<node COLOR="#435e98" CREATED="1686705467174" ID="ID_1522933004" MODIFIED="1686708560481" TEXT="Debugger">
|
||||
<icon BUILTIN="info"/>
|
||||
|
|
@ -75270,7 +75469,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1686705365836" ID="ID_138010755" MODIFIED="1686707642210" TEXT="Visualisierung für das jeweils aktuelle JobTicket">
|
||||
<node COLOR="#338800" CREATED="1686705365836" ID="ID_138010755" MODIFIED="1686757687312" TEXT="Visualisierung für das jeweils aktuelle JobTicket">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
|
|
@ -75281,11 +75480,11 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="pencil"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1686708389268" ID="ID_285309447" MODIFIED="1686708455385" TEXT="grundsätzlich kommen die Daten jetzt wie erwartet an">
|
||||
<icon BUILTIN="ksmiletris"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1686708410704" ID="ID_441152759" MODIFIED="1686708443003" TEXT="Koordination der Gesamt-Pipeline funktioniert nicht richtig">
|
||||
<node COLOR="#435e98" CREATED="1686708410704" FOLDED="true" ID="ID_441152759" MODIFIED="1686757689878" TEXT="Koordination der Gesamt-Pipeline funktioniert nicht richtig">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<node CREATED="1686708460080" ID="ID_990579031" MODIFIED="1686708540153">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
|
|
@ -75306,13 +75505,29 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</html></richcontent>
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1686708564668" ID="ID_1705252197" MODIFIED="1686708592362" TEXT="schaltet da der Tick-Generator zu früh weiter?">
|
||||
<node COLOR="#435e98" CREATED="1686708564668" ID="ID_1705252197" MODIFIED="1686749574616" TEXT="schaltet da der Tick-Generator zu früh weiter?">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1686708691354" ID="ID_429578844" MODIFIED="1686708711789" TEXT="weil das expand() in die Iterate-Operation eingehängt ist..."/>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1686708741452" ID="ID_1456716715" MODIFIED="1686708761451" TEXT="aber warum schaltet dann der nächste Wert von der Basissequenz nicht weiter?">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1686749244896" ID="ID_792673014" MODIFIED="1686749263390" TEXT="und weil in expandChildren stets sofort incrementCurrent() aufgerufen wird"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1686749294140" ID="ID_1511416899" MODIFIED="1686749591908" TEXT="deshalb wird die Basis-Pipeline bereits vorgreifend weitergeschaltet">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1686757130262" ID="ID_1861299504" MODIFIED="1686757271045" TEXT="logische Inkonsistenz in der Expander-Implementierung">
|
||||
<arrowlink COLOR="#4a85b5" DESTINATION="ID_660032494" ENDARROW="Default" ENDINCLINATION="-821;104;" ID="Arrow_ID_1758558464" STARTARROW="None" STARTINCLINATION="956;47;"/>
|
||||
<icon BUILTIN="broken-line"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1686757667127" ID="ID_803521582" MODIFIED="1686757673328" TEXT="Implementierung überarbeitet">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1686757673981" ID="ID_1339385656" MODIFIED="1686757678536" TEXT="alle Tests GRÜN">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1686757716091" ID="ID_1984151542" MODIFIED="1686757736741" TEXT="Pipeline funktioniert nun konsistent, incl. End-Bedingung">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1686757754298" ID="ID_1544300725" MODIFIED="1686757772691" TEXT="200ms ... 300ms"/>
|
||||
<node CREATED="1686757773327" ID="ID_1310335603" MODIFIED="1686757774227" TEXT="J(11|200ms)-J(22|200ms)-J(11|240ms)-J(22|240ms)-J(11|280ms)-J(22|280ms)"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
|
|||
Loading…
Reference in a new issue