Dispatcher-Pipeline: direct implementation of frame-tick

start with demonstration of base technique in test setup
This commit is contained in:
Fischlurch 2023-06-01 18:09:26 +02:00
parent ad173540d9
commit dda37365cc
2 changed files with 118 additions and 42 deletions

View file

@ -26,11 +26,13 @@
#include "lib/test/run.hpp"
#include "lib/error.hpp"
#include "lib/test/test-helper.hpp"
#include "steam/engine/mock-dispatcher.hpp"
#include "vault/engine/dummy-job.hpp"
#include "lib/format-cout.hpp"///////////////////////TODO
#include "lib/iter-tree-explorer.hpp"
#include "lib/format-util.hpp"
//#include "steam/engine/job-planning.hpp"
@ -38,6 +40,10 @@
using test::Test;
//using std::rand;
using lib::eachNum;
using lib::treeExplore;
using lib::time::PQuant;
using lib::time::FrameRate;
namespace steam {
@ -45,9 +51,24 @@ namespace engine{
namespace test {
using vault::engine::DummyJob;
using lib::time::FixedFrameQuantiser;
namespace { // test fixture...
/** Diagnostic helper: join all the elements from some given container or iterable */
template<class II>
inline string
materialise (II&& ii)
{
return util::join (std::forward<II> (ii), "-");
}
inline PQuant
frameGrid (FrameRate fps)
{
return PQuant (new FixedFrameQuantiser (fps));
}
} // (End) test fixture
@ -75,7 +96,6 @@ namespace test {
run (Arg)
{
demonstrateScaffolding();
UNIMPLEMENTED ("shape the interface of the job-planning pipeline");
buildBaseTickGenerator();
accessTopLevelJobTicket();
exploreJobTickets();
@ -130,11 +150,24 @@ namespace test {
/** @test use the Dispatcher interface (mocked) to generate a frame »beat«
* - demonstrate explicitly the mapping of a (frame) number sequence
* onto a sequence of time points with the help of time quantisation
* @remark this is the foundation to generate top-level frame render jobs
*/
void
buildBaseTickGenerator()
{
auto grid = frameGrid(FrameRate::PAL);
CHECK (materialise (
treeExplore (eachNum(5,13))
.transform([&](FrameCnt frameNr) -> TimeVar
{
return grid->timeOf (frameNr);
})
)
== "200ms-240ms-280ms-320ms-360ms-400ms-440ms-480ms"_expect);
UNIMPLEMENTED ("foundation of state core");
}

View file

@ -56926,17 +56926,20 @@
<node CREATED="1536015513076" ID="ID_849722427" MODIFIED="1557498707236" TEXT="den Regex-Include opaque halten"/>
<node CREATED="1536015525154" ID="ID_1039059758" MODIFIED="1557498707236" TEXT="soll mal in util.hpp"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685583627381" ID="ID_1193075176" MODIFIED="1685585363445" TEXT="iterierbare Integer-Sequenz">
<linktarget COLOR="#bc6489" DESTINATION="ID_1193075176" ENDARROW="Default" ENDINCLINATION="-872;80;" ID="Arrow_ID_49892110" SOURCE="ID_1477861363" STARTARROW="None" STARTINCLINATION="-1069;-69;"/>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685583658136" ID="ID_208810625" MODIFIED="1685583674253" TEXT="Basis-Baustein f&#xfc;r diverse Iterations-Schemata">
<node COLOR="#338800" CREATED="1685583627381" FOLDED="true" ID="ID_1193075176" MODIFIED="1685631528263" TEXT="iterierbare Integer-Sequenz">
<linktarget COLOR="#64a3bc" DESTINATION="ID_1193075176" ENDARROW="Default" ENDINCLINATION="-872;80;" ID="Arrow_ID_49892110" SOURCE="ID_1477861363" STARTARROW="None" STARTINCLINATION="-1069;-69;"/>
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1685583658136" ID="ID_208810625" MODIFIED="1685631307702" TEXT="Basis-Baustein f&#xfc;r diverse Iterations-Schemata">
<icon BUILTIN="yes"/>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1685584188194" ID="ID_1817394648" MODIFIED="1685584223246" TEXT="NumIter gibt&apos;s schon in iter-adapter.hpp &#x2014; ausreichend?">
<node COLOR="#435e98" CREATED="1685584188194" ID="ID_1817394648" MODIFIED="1685631521912" TEXT="NumIter gibt&apos;s schon in iter-adapter.hpp &#x2014; ausreichend?">
<icon BUILTIN="idea"/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1685584668136" ID="ID_1575464239" MODIFIED="1685584688433" TEXT="nebenbei: warum in iter-adapter #include &lt;iterator&gt; ?">
<node COLOR="#435e98" CREATED="1685584668136" ID="ID_1575464239" MODIFIED="1685630942654" TEXT="nebenbei: warum in iter-adapter #include &lt;iterator&gt; ?">
<font NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="help"/>
<node COLOR="#338800" CREATED="1685630944569" ID="ID_263069891" MODIFIED="1685630959773" TEXT="kann problemlos weg">
<icon BUILTIN="idea"/>
</node>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1685584919441" ID="ID_340863958" MODIFIED="1685584940405" TEXT="NumIter wird bisher noch &#xfc;berhaupt nicht verwendet!">
<icon BUILTIN="idea"/>
@ -56959,11 +56962,12 @@
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685584692820" ID="ID_1638518253" MODIFIED="1685584731304" TEXT="ggfs eine Variante ohne Stop-Bedingung schaffen?">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1685584692820" ID="ID_1638518253" MODIFIED="1685631035675" TEXT="ggfs eine Variante ohne Stop-Bedingung schaffen?">
<icon BUILTIN="hourglass"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685584741200" ID="ID_1542512900" MODIFIED="1685584756229" TEXT="ggfs einen IteratorCore-Adapter">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1685584741200" ID="ID_1542512900" MODIFIED="1685631186794" TEXT="IterStateCore-Adapter schaffen">
<linktarget COLOR="#91c390" DESTINATION="ID_1542512900" ENDARROW="Default" ENDINCLINATION="-103;177;" ID="Arrow_ID_1478600662" SOURCE="ID_1531711213" STARTARROW="None" STARTINCLINATION="-149;129;"/>
<icon BUILTIN="button_ok"/>
<node CREATED="1685584762627" ID="ID_336248643" MODIFIED="1685584825968" TEXT="das Gegenst&#xfc;ck zu IterStateWrapper">
<richcontent TYPE="NOTE"><html>
<head>
@ -56984,12 +56988,28 @@
</body>
</html></richcontent>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1685584828250" ID="ID_500985590" MODIFIED="1685584841833" TEXT="sinnvoll hier? oder doch in TreeExplorer?">
<node COLOR="#435e98" CREATED="1685584828250" ID="ID_500985590" MODIFIED="1685630992855" TEXT="sinnvoll hier? oder doch in TreeExplorer?">
<icon BUILTIN="help"/>
<node CREATED="1685630996913" ID="ID_1014456461" MODIFIED="1685631016990" TEXT="pa&#xdf;t hier perfekt (auch f&#xfc;r Doku)"/>
<node CREATED="1685631002757" ID="ID_1375154872" MODIFIED="1685631008736" TEXT="braucht keinerlei weitere Hilfsmittel"/>
</node>
</node>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1685631328816" ID="ID_1360074797" MODIFIED="1685631519429" TEXT="ja: vorerst ausreichend">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
einfach und minimalistisch implementiert &#8212; und zudem sind <i>undendliche Folgen</i>&#160;nur etwas f&#252;r Mathematiker und Freunde der funktionalen Programmierung; in der Praxis braucht man <b>zwingend</b>&#160;stets eine Abbruch-Bedingung, allein schon weil sonst die Engine &#8222;Amok laufen&#8220; k&#246;nnte (man bedenke nur, da&#223; die interne Zeit-Repr&#228;sentation bereits <i>lange vor der Frame-Nummer </i>wrappt)
</p>
</body>
</html></richcontent>
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685583679366" ID="ID_132953496" MODIFIED="1685583701466">
</node>
<node COLOR="#338800" CREATED="1685583679366" ID="ID_132953496" MODIFIED="1685631288209">
<richcontent TYPE="NODE"><html>
<head>
@ -57000,29 +57020,16 @@
</p>
</body>
</html></richcontent>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685583707964" ID="ID_1762574264" MODIFIED="1685583830423" TEXT="&#x201e;optional&#x201c; meint compile-time">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
denn der Standard-Fall ist die <i>unendliche Sequenz</i>&#160;&#8212; und diese darf keinerlei unn&#246;tigen Ballast haben; weder einen Funktor (storage!), noch einen letztlich unn&#246;tigen Pr&#228;dikat-Aufruf (denn sie l&#228;uft &#8222;f&#252;r immer&#8220;)
</p>
</body>
</html></richcontent>
<icon BUILTIN="yes"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685583844103" ID="ID_1089487517" MODIFIED="1685583862869" TEXT="until-Dekorator">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1685584282950" ID="ID_537873518" MODIFIED="1685584289539" TEXT="wo ansiedeln?">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1685583844103" ID="ID_1089487517" MODIFIED="1685631284892" TEXT="until-Dekorator">
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1685584282950" ID="ID_537873518" MODIFIED="1685631096769" TEXT="wo ansiedeln?">
<icon BUILTIN="help"/>
<node CREATED="1685584292265" ID="ID_1449788515" MODIFIED="1685584302429" TEXT="iter-adapter w&#xe4;re sch&#xf6;n..."/>
<node CREATED="1685584303269" ID="ID_535538930" MODIFIED="1685584316100" TEXT="aber der hat kein #include &lt;functional&gt;">
<icon BUILTIN="stop-sign"/>
</node>
<node CREATED="1685584323374" ID="ID_553274601" MODIFIED="1685584469308" TEXT="itertools w&#xe4;re OK (mit Einschr&#xe4;nkung)">
<node COLOR="#5b280f" CREATED="1685584323374" ID="ID_553274601" MODIFIED="1685631108394" TEXT="itertools w&#xe4;re OK (mit Einschr&#xe4;nkung)">
<richcontent TYPE="NOTE"><html>
<head>
@ -57038,21 +57045,33 @@
</ul>
</body>
</html></richcontent>
<icon BUILTIN="button_cancel"/>
</node>
<node CREATED="1685584350243" ID="ID_72915504" MODIFIED="1685584473955" TEXT="sonst: direkt in TreeExplorer">
<node COLOR="#338800" CREATED="1685584350243" ID="ID_72915504" MODIFIED="1685631094358" TEXT="sonst: direkt in TreeExplorer">
<icon BUILTIN="yes"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685584477881" ID="ID_1127172208" MODIFIED="1685584544101" TEXT="sollte eine Trigger-Funktion auswerten und daraufhin destruktiv stoppen">
<node COLOR="#435e98" CREATED="1685584477881" ID="ID_1127172208" MODIFIED="1685631208219" TEXT="sollte eine Trigger-Funktion auswerten und daraufhin destruktiv stoppen">
<icon BUILTIN="info"/>
</node>
<node CREATED="1685584554975" ID="ID_1326522890" MODIFIED="1685584586183" TEXT="w&#xe4;re sehr einfach als StateCore zu implementieren">
<node COLOR="#338800" CREATED="1685584554975" ID="ID_1326522890" MODIFIED="1685631217868" TEXT="sehr einfach als StateCore zu implementieren">
<icon BUILTIN="button_ok"/>
<node CREATED="1685584586562" ID="ID_1932788934" MODIFIED="1685584592110" TEXT="ganz analog wie Filter"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685584593570" ID="ID_1531711213" MODIFIED="1685584614109" TEXT="k&#xf6;nnte von einer &#xbb;IteratorCore&#xab; profitieren">
<node COLOR="#435e98" CREATED="1685584593570" ID="ID_1531711213" MODIFIED="1685631233266" TEXT="profitiert von einer &#xbb;IterStateCore&#xab; implementierung">
<arrowlink COLOR="#91c390" DESTINATION="ID_1542512900" ENDARROW="Default" ENDINCLINATION="-103;177;" ID="Arrow_ID_1478600662" STARTARROW="None" STARTINCLINATION="-149;129;"/>
<icon BUILTIN="idea"/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1685631237101" ID="ID_301315375" MODIFIED="1685631283904" TEXT="while-Dokorator">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1685631243653" ID="ID_1585823301" MODIFIED="1685631281410" TEXT="gegebenes Pr&#xe4;dikat negiert verpacken">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1685631253952" ID="ID_688524471" MODIFIED="1685631280458" TEXT="&#x3bb; verschieben und Argument-Typ abgreifen">
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
</node>
</node>
@ -73258,8 +73277,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681742836995" ID="ID_456677168" MODIFIED="1684878195489" TEXT="using a frame step as base tick">
<icon BUILTIN="full-2"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685063204038" ID="ID_1320162919" MODIFIED="1685401869753" TEXT="Vorarbeit">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1685063204038" ID="ID_1320162919" MODIFIED="1685631679971" TEXT="Vorarbeit">
<icon BUILTIN="pencil"/>
<node CREATED="1685396470984" ID="ID_977131570" MODIFIED="1685396475818" TEXT="Grunds&#xe4;tzliches...">
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1685403171015" ID="ID_1491439076" MODIFIED="1685403230708" TEXT="der Code sieht konfus aus">
<richcontent TYPE="NOTE"><html>
@ -73371,9 +73390,27 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685585183914" ID="ID_1477861363" MODIFIED="1685585363445" TEXT="einfache Integer-Sequenz iterieren (meist &#x221e;)">
<arrowlink COLOR="#bc6489" DESTINATION="ID_1193075176" ENDARROW="Default" ENDINCLINATION="-872;80;" ID="Arrow_ID_49892110" STARTARROW="None" STARTINCLINATION="-1069;-69;"/>
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1685585183914" ID="ID_1477861363" MODIFIED="1685631559728" TEXT="einfache Integer-Sequenz iterieren">
<arrowlink COLOR="#64a3bc" DESTINATION="ID_1193075176" ENDARROW="Default" ENDINCLINATION="-872;80;" ID="Arrow_ID_49892110" STARTARROW="None" STARTINCLINATION="-1069;-69;"/>
<icon BUILTIN="button_ok"/>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1685631561759" ID="ID_196221498" MODIFIED="1685631585003" TEXT="die bestehende Implementierung aus iter-adapter.hpp ist v&#xf6;llig ausreichend">
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/>
</node>
<node BACKGROUND_COLOR="#fefc4e" COLOR="#351d75" CREATED="1685631586855" ID="ID_1043516162" MODIFIED="1685631663098" TEXT="Einsicht: wir wollen&#xa0;niemals&#xa0;eine unendliche Sequenz">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
allein schon, weil wir eine limitierte Dom&#228;ne haben bez&#252;glich lib::time::Time
</p>
</body>
</html></richcontent>
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="idea"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685063128431" ID="ID_1958871740" MODIFIED="1685063140918" TEXT="Startpunkt gewinnen">
@ -73467,7 +73504,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</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="#eee5c3" COLOR="#990000" CREATED="1685583477662" ID="ID_1520687206" MODIFIED="1685583545340" TEXT="den einfachst m&#xf6;glichen Frame-Step als &#xbb;state core&#xab; verpacken">
<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">
<richcontent TYPE="NOTE"><html>
<head>
@ -73478,8 +73515,14 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</p>
</body>
</html></richcontent>
<icon BUILTIN="pencil"/>
<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="#eee5c3" COLOR="#990000" CREATED="1685635478500" ID="ID_1622487483" MODIFIED="1685635500053" TEXT="geeignetes Builder-API ausarbeiten">
<icon BUILTIN="flag-yellow"/>
</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>