Job-Planning: Attempt to build a prerequisite-Pipeline failed -- investigate why

To complete the mock setup, the next step would be to extend the GenNode-based spec langage
to allow defining prerequisite Mock-JobTickets. Setting this up seems rather straight forward --

however, defining a simple testcase to cover this extension runs into surprisingly tricky problems..
- for one, the singleValIterator from Itertools has serious difficulties handling references
- but even more surprising, it seems impossible to make the "prerequisites iterator"
  fit into the Tree-Explorer framework (which I intend to use as replacement
  for the monadic approach)

after some extended analysis of generic types and template instances,
it seems that not TreeExplorer as such is the primary problem, but rather
there is a conceptual mismatch somewhere deep down in Itertools or Iter-Adapter
This commit is contained in:
Fischlurch 2023-05-15 23:25:29 +02:00
parent 27a8e91fa2
commit 67468f15d5
4 changed files with 594 additions and 7 deletions

View file

@ -282,6 +282,14 @@ namespace meta {
typedef TY value_type;
};
template<typename TY>
struct RefTraits<TY &&>
{
typedef TY* pointer;
typedef TY& reference;
typedef TY value_type;
};

View file

@ -152,7 +152,7 @@ using lib::LUID;
getPrerequisites (uint slotNr =0) const
{
return lib::transformIterator (provision_[slotNr].requirements.begin()
,[](Prerequisite& prq) -> JobTicket&
,[](Prerequisite& prq) -> JobTicket const&
{
return prq.descriptor;
});

View file

@ -29,18 +29,29 @@
#include "steam/engine/mock-dispatcher.hpp"
#include "vault/engine/nop-job-functor.hpp"
#include "vault/engine/dummy-job.hpp"
#include "lib/iter-tree-explorer.hpp"
#include "lib/util-tuple.hpp"
#include "lib/util.hpp"
#include "lib/format-cout.hpp"
#include "lib/test/test-helper.hpp"
using test::Test;
///////////////////////////////////////////////////////TODO WIP for investigation
namespace lib {
namespace iter_explorer {
template<class RES>
using DecoTraits = _DecoratorTraits<RES>;
}}
///////////////////////////////////////////////////////TODO WIP for investigation
namespace steam {
namespace engine{
namespace test {
using steam::fixture::Segment;
using vault::engine::DummyJob;
using lib::singleValIterator;
using util::isSameObject;
using util::seqTuple;
@ -329,6 +340,59 @@ namespace test {
CHECK (23 == DummyJob::invocationAdditionalKey (job1));
CHECK (11 == DummyJob::invocationAdditionalKey (job2));
}
//-----------------------------------------------------------------/// deep nested prerequisite
{
MockSegmentation mockSegs{MakeRec()
.attrib("mark", 11)
.scope(MakeRec()
.attrib("mark",23)
.genNode())
.genNode()};
using RTick = std::reference_wrapper<JobTicket>;
auto start = singleValIterator (& util::unConst(mockSegs[Time::ZERO].jobTicket()));
using SrC = lib::iter_explorer::BaseAdapter<lib::SingleValIter<engine::JobTicket*> >;
auto bunny = [](JobTicket* ticket)
{
return lib::transformIterator(ticket->getPrerequisites()
,[](JobTicket const& preq) -> JobTicket*
{ return unConst(&preq); }
);
};
using ExIt = decltype(bunny(std::declval<JobTicket*>()));
// ergibt: lib::TransformIter<lib::TransformIter<lib::IterStateWrapper<steam::engine::JobTicket::Prerequisite, lib::LinkedElements<steam::engine::JobTicket::Prerequisite>::IterationState>, const steam::engine::JobTicket&>, steam::engine::JobTicket*>
using Funny = std::function<ExIt(JobTicket*)>;
Funny funny = bunny;
using ExpandedChildren = typename lib::iter_explorer::_FunTraits<Funny,SrC>::Res;
// using ResCore = lib::iter_explorer::Expander<SrC, ExpandedChildren>;
using ResIter = typename lib::iter_explorer::DecoTraits<ExpandedChildren>::SrcIter;
using ResIterVal = typename ResIter::value_type;
using SrcIterVal = typename SrC::value_type;
// lib::test::TypeDebugger<SrcIterVal> buggy;
// lib::test::TypeDebugger<ExIt> bugggy;
#if false /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #1294
auto it = lib::explore(start)
// .transform ([](RTick t) -> JobTicket const&
// {
// return t.get();
// })
.expand (funny)
.expandAll()
.transform ([&](JobTicket const& ticket)
{
return ticket.createJobFor(coord).parameter.invoKey.part.a;
});
cout << util::join(it,"-") <<endl;
#endif /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #1294
}
}
};

View file

@ -69415,8 +69415,8 @@
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681425423695" ID="ID_1928295133" MODIFIED="1683836443972" TEXT="Reorganisation : RenderDrive verwenden">
<linktarget COLOR="#f4fec9" DESTINATION="ID_1928295133" ENDARROW="Default" ENDINCLINATION="-1068;-69;" ID="Arrow_ID_362199078" SOURCE="ID_1888344503" STARTARROW="None" STARTINCLINATION="1381;58;"/>
<linktarget COLOR="#ffe4c9" DESTINATION="ID_1928295133" ENDARROW="Default" ENDINCLINATION="-724;353;" ID="Arrow_ID_1773297165" SOURCE="ID_845968912" STARTARROW="None" STARTINCLINATION="-257;23;"/>
<linktarget COLOR="#fed5d7" DESTINATION="ID_1928295133" ENDARROW="Default" ENDINCLINATION="-463;400;" ID="Arrow_ID_1972838231" SOURCE="ID_580321819" STARTARROW="None" STARTINCLINATION="-412;-64;"/>
<linktarget COLOR="#ffe4c9" DESTINATION="ID_1928295133" ENDARROW="Default" ENDINCLINATION="-724;353;" ID="Arrow_ID_1773297165" SOURCE="ID_845968912" STARTARROW="None" STARTINCLINATION="-257;23;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1681597653622" ID="ID_1608883275" MODIFIED="1681597683317" TEXT="Eigenschaften">
<richcontent TYPE="NOTE"><html>
@ -69889,9 +69889,512 @@
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1683836490113" ID="ID_1045524420" MODIFIED="1683837475432" TEXT="per rekursiver GenNode-Auswertung">
<icon BUILTIN="pencil"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683836500089" ID="ID_993440863" MODIFIED="1683836585531" TEXT="testen &#xfc;ber neues Interface getPrerequisites()">
<arrowlink COLOR="#eb64a1" DESTINATION="ID_885444410" ENDARROW="Default" ENDINCLINATION="338;-2145;" ID="Arrow_ID_1011579074" STARTARROW="None" STARTINCLINATION="-152;9;"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683836500089" ID="ID_993440863" MODIFIED="1683845290600" TEXT="testen &#xfc;ber neues Interface getPrerequisites()">
<arrowlink COLOR="#eb64a1" DESTINATION="ID_885444410" ENDARROW="Default" ENDINCLINATION="213;-1966;" ID="Arrow_ID_1011579074" STARTARROW="None" STARTINCLINATION="-384;23;"/>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683897388982" ID="ID_1523682954" MODIFIED="1683897457247" TEXT="dabei M&#xf6;glichkeiten zur Pipeline-Verarbeitung ausloten">
<linktarget COLOR="#dd399a" DESTINATION="ID_1523682954" ENDARROW="Default" ENDINCLINATION="-371;858;" ID="Arrow_ID_1803678506" SOURCE="ID_726660737" STARTARROW="None" STARTINCLINATION="267;-16;"/>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1683897470433" ID="ID_293583902" MODIFIED="1683897488191" TEXT="ziemlich m&#xfc;hsam...">
<icon BUILTIN="smiley-angry"/>
<node COLOR="#ff0000" CREATED="1683897495069" ID="ID_668257697" MODIFIED="1683897532038" TEXT="Pipeline &#xfc;ber JobTicket&amp; gelingt &#xfc;berhaupt nicht">
<icon BUILTIN="broken-line"/>
<icon BUILTIN="button_cancel"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683897542382" ID="ID_1067290974" MODIFIED="1683897564736" TEXT="auch mit JobTicket* geht nicht">
<icon BUILTIN="broken-line"/>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1683897566957" ID="ID_1817158319" MODIFIED="1683897573478" TEXT="das mu&#xdf; gehen!!">
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683897595136" ID="ID_971835812" MODIFIED="1683897598775" TEXT="Untersuchung">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#435e98" CREATED="1683897607352" ID="ID_985878681" MODIFIED="1683897830578" TEXT="Expander-Functor explizit definiert">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
FUN = std::function&lt;lib::TransformIter&lt;
</p>
<p>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;lib::TransformIter&lt;
</p>
<p>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;lib::IterStateWrapper&lt;
</p>
<p>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;steam::engine::JobTicket::Prerequisite,
</p>
<p>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; LinkedElements&lt;JobTicket::Prerequisite&gt;::IterationState
</p>
<p>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&gt;,
</p>
<p>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;const steam::engine::JobTicket&amp;
</p>
<p>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&gt;,
</p>
<p>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;steam::engine::JobTicket*
</p>
<p>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&gt;(steam::engine::JobTicket*)
</p>
<p>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&gt;&amp;
</p>
</body>
</html></richcontent>
<icon BUILTIN="info"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1683897870753" ID="ID_259217789" MODIFIED="1683897957907" TEXT="zwei Assertion-Failures">
<icon BUILTIN="broken-line"/>
<node CREATED="1683897902860" ID="ID_809794871" MODIFIED="1683897955416" TEXT="iterator from the expansion must yield compatible values">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
src/lib/iter-tree-explorer.hpp:632
</p>
</body>
</html></richcontent>
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
</node>
<node CREATED="1683897921602" ID="ID_1597038481" MODIFIED="1683897942154" TEXT="bound functor must accept the source iterator or state core as parameter">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
src/lib/iter-tree-explorer.hpp:513
</p>
</body>
</html></richcontent>
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1683897959342" ID="ID_1569391939" MODIFIED="1684189646312" TEXT="Analyse">
<icon BUILTIN="pencil"/>
<node CREATED="1683897967984" ID="ID_98765669" MODIFIED="1684189289245" TEXT="der Pfad zur 1.Assertion ist dubios">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
Er geht &#252;ber die Instantiierung des Expander-Typs -&gt; _DecoratorTraits&lt;RES&gt;::SrcIter
</p>
<ul>
<li>
wobei RES der sichtbare Ergebnis-Typ des Expand-Funktors ist, also ein Iterator.
</li>
<li>
mir f&#228;llt auf, da&#223; die Auswertung von shall_wrap_STL_Iter&lt;RES&gt; geht
</li>
<li>
<font color="#ac0122">etwas sonderbar ist</font>, da&#223; dieser Auswertungspfad als Call-Stack f&#252;r die Assertion-Failure auftaucht (k&#246;nnte aber einfach der Arbeitsweise des Compilers geschuldet sein)
</li>
</ul>
</body>
</html></richcontent>
<linktarget COLOR="#7e8690" DESTINATION="ID_98765669" ENDARROW="Default" ENDINCLINATION="349;0;" ID="Arrow_ID_1245494875" SOURCE="ID_913649620" STARTARROW="None" STARTINCLINATION="-145;-3;"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683898203764" ID="ID_1213067535" MODIFIED="1683898221962" TEXT="die 2. Assertion stellt ein allgemeineres Problem dar">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1683898228440" ID="ID_1125499200" MODIFIED="1683898237979" TEXT="Einstieg ist hier &#xfc;ber den Expander-ctor">
<node CREATED="1683898284523" ID="ID_589425980" MODIFIED="1683898284523" TEXT="_FunTraits&lt;FUN,ResIter&gt;::adaptFunctor"/>
<node CREATED="1683898287377" ID="ID_913649620" MODIFIED="1684189300723" TEXT="ResIter ist im Umfeld der 1. Assertion failure definiert">
<arrowlink COLOR="#7e8690" DESTINATION="ID_98765669" ENDARROW="Default" ENDINCLINATION="349;0;" ID="Arrow_ID_1245494875" STARTARROW="None" STARTINCLINATION="-145;-3;"/>
</node>
<node CREATED="1683898481412" ID="ID_660322820" MODIFIED="1683898487874" TEXT="das baut den ArgAdapter auf"/>
</node>
<node CREATED="1683898448043" ID="ID_860235777" MODIFIED="1684189469869" TEXT="offensichtlich l&#xe4;uft die Auswertung in den Base-Case">
<icon BUILTIN="info"/>
<node CREATED="1683898517698" ID="ID_1961360998" MODIFIED="1683898528437" TEXT="Base-Case: pass-through unaltered Fuctor"/>
<node CREATED="1683898531617" ID="ID_1959356638" MODIFIED="1683898557176" TEXT="Special-1: monadic">
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1683898704072" ID="ID_345436088" MODIFIED="1683898713032" TEXT="wollen wir nicht hier hin?">
<icon BUILTIN="help"/>
</node>
</node>
<node CREATED="1683898653511" ID="ID_1532959059" MODIFIED="1683898662713" TEXT="Special-2: IterSource"/>
</node>
</node>
<node COLOR="#435e98" CREATED="1684191110019" ID="ID_1963874644" MODIFIED="1684192179077" TEXT="schon beim Ansetzen des Expander-Functors tritt ein Fehler auf">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1684191137018" ID="ID_1953636647" MODIFIED="1684191181425" TEXT="das war erst durch die anderen Assertions maskiert">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
...insofern wurde es erst sichtbar, als ich angefangen habe, den Aufruf zu de/re-konstruieren
</p>
</body>
</html></richcontent>
<icon BUILTIN="idea"/>
</node>
<node CREATED="1684191952212" ID="ID_486753512" MODIFIED="1684191996174" TEXT="passiert beim Instantiieren des nun eingef&#xfc;hrten nachgeschalteten Transformers">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
...der daf&#252;r sorgen soll, da&#223; aus dem Expand-Funktor ein JobTicket* rauskommt
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1684192107069" ID="ID_1162698734" MODIFIED="1684192121793" TEXT="ist ein const-correctness-Problem">
<icon BUILTIN="idea"/>
<node CREATED="1684192131373" ID="ID_724171201" MODIFIED="1684192159133" TEXT="Vorsicht: ich hatte die JobTicket::getPrerequisites auf -&gt; JobTicket const&amp; umgestellt">
<icon BUILTIN="messagebox_warning"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1684192160287" ID="ID_1810931642" MODIFIED="1684192173402" TEXT="noch nicht klar inwiefern das zum eigentlichen Problem beitr&#xe4;gt">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1684189641549" ID="ID_1940567504" MODIFIED="1684189650527" TEXT="Rekonstruktion">
<icon BUILTIN="pencil"/>
<node CREATED="1684189652118" ID="ID_1161273177" MODIFIED="1684189992174" TEXT="Teile des Call-Graphen explizit nachbauen">
<icon BUILTIN="idea"/>
</node>
<node CREATED="1684189997712" ID="ID_770060385" MODIFIED="1684190017134" TEXT="Aufruf der expand()-Funktion">
<icon BUILTIN="full-1"/>
<node CREATED="1684190290749" ID="ID_1560322036" MODIFIED="1684190302792" TEXT="Parameter sehen erst mal korrekt aus">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
FUN = std::function&lt;
</p>
<p>
&#160;&#160;&#160; TransformIter&lt;TransformIter&lt;IterStateWrapper&lt;JobTicket::Prerequisite, LinkedElements&lt;JobTicket::Prerequisite&gt;::IterationState&gt;
</p>
<p>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;,engine::JobTicket const&amp;&gt;
</p>
<p>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;,engine::JobTicket*&gt;(steam::engine::JobTicket*)
</p>
<p>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&gt;&amp;;
</p>
<p>
SRC = iter_explorer::BaseAdapter&lt;SingleValIter&lt;engine::JobTicket*&gt; &gt;
</p>
</body>
</html></richcontent>
<icon BUILTIN="info"/>
<node CREATED="1684190865840" ID="ID_332062593" MODIFIED="1684191109085" TEXT="SRC kann ich auch direkt instantiieren">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
per TypeDebugger verifiziert: die explizit angeschriebene Variable 'start' hat den richtigen Typ
</p>
</body>
</html></richcontent>
<icon BUILTIN="idea"/>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1684190344981" ID="ID_355562629" MODIFIED="1684193300508" TEXT="Typdefinitionen im Scope nachstellen">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1684190359856" ID="ID_1556615567" MODIFIED="1684192734794" TEXT="ExpandedChildren">
<icon BUILTIN="button_ok"/>
<node CREATED="1684192421610" ID="ID_152699502" MODIFIED="1684192429943" TEXT="l&#xe4;&#xdf;t sich fehlerfrei konstruieren"/>
<node CREATED="1684192434370" ID="ID_115735723" MODIFIED="1684192861769" TEXT="Typ ist wie erwartet (&#x2261; Ergebnis-Typ vom Expand-Funktor)">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
TransformIter&lt;TransformIter&lt;IterStateWrapper&lt;engine::JobTicket::Prerequisite
</p>
<p>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ,LinkedElements&lt;engine::JobTicket::Prerequisite&gt;::IterationState&gt;
</p>
<p>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;,engine::JobTicket const&amp;
</p>
<p>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&gt;
</p>
<p>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;,steam::engine::JobTicket*
</p>
<p>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&gt;
</p>
</body>
</html>
</richcontent>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1684190367907" ID="ID_172958877" MODIFIED="1684193296301" TEXT="ResCore">
<icon BUILTIN="broken-line"/>
<node CREATED="1684193043318" ID="ID_1720124636" MODIFIED="1684193145322" TEXT="l&#xe4;&#xdf;t sich fehlerfrei konstruieren (&#xdc;berraschung)">
<icon BUILTIN="button_cancel"/>
</node>
<node CREATED="1684193274123" ID="ID_1796870542" MODIFIED="1684193283864" TEXT="Typ sieht auch konsistent aus">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
lib::iter_explorer::Expander&lt;lib::iter_explorer::BaseAdapter&lt;lib::SingleValIter&lt;steam::engine::JobTicket*&gt; &gt;, lib::TransformIter&lt;lib::TransformIter&lt;lib::IterStateWrapper&lt;steam::engine::JobTicket::Prerequisite, lib::LinkedElements&lt;steam::engine::JobTicket::Prerequisite&gt;::IterationState&gt;, const steam::engine::JobTicket&amp;&gt;, steam::engine::JobTicket*&gt; &gt;
</p>
</body>
</html>
</richcontent>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1684193120895" ID="ID_242374698" MODIFIED="1684193148876" TEXT="aber sobald ich diesen Typ verwende, wird die 1.Assertion getriggert">
<icon BUILTIN="forward"/>
<icon BUILTIN="broken-line"/>
</node>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1684190373721" ID="ID_15651794" MODIFIED="1684193641116" TEXT="ResIter">
<icon BUILTIN="hourglass"/>
</node>
</node>
</node>
<node CREATED="1684193643850" ID="ID_1282590268" MODIFIED="1684193656953" TEXT="Iteratoren im Expander">
<icon BUILTIN="full-2"/>
<node CREATED="1684193679461" ID="ID_1517572148" MODIFIED="1684193781438" TEXT="Parameter der Expander-Instantiierung sind konsistent mit der Erwartung">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
Expander&lt;SrC, ExpandedChildren&gt;
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="info"/>
</node>
<node COLOR="#338800" CREATED="1684193786647" ID="ID_785331918" MODIFIED="1684195906557" TEXT="Decorator-Traits-Instanz untersuchen">
<icon BUILTIN="button_ok"/>
<node CREATED="1684194433377" ID="ID_82593902" MODIFIED="1684194453222" TEXT="gew&#xe4;hlter Fall: shall_use_Lumiera_Iter&lt;SRC&gt;">
<icon BUILTIN="info"/>
<node COLOR="#338800" CREATED="1684194479811" ID="ID_1879611037" MODIFIED="1684194483057" TEXT="korrekt">
<icon BUILTIN="button_ok"/>
</node>
<node CREATED="1684194489074" ID="ID_706865792" MODIFIED="1684194589443" TEXT="ist dann einfach der ExpandedChildren (ohne Referenz)"/>
</node>
<node CREATED="1684194906098" ID="ID_1480156019" MODIFIED="1684195807735" TEXT="SRC::value_type &#x2261; JobTicket*">
<arrowlink COLOR="#ed1b60" DESTINATION="ID_972416826" ENDARROW="Default" ENDINCLINATION="28;-107;" ID="Arrow_ID_233555923" STARTARROW="None" STARTINCLINATION="90;0;"/>
</node>
<node CREATED="1684194719091" ID="ID_752820718" MODIFIED="1684194943493">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
ResIter::value_type &#8801; <font color="#c9012e">JobTIcket</font>
</p>
</body>
</html></richcontent>
<icon BUILTIN="idea"/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1684194768462" ID="ID_1432190443" MODIFIED="1684194976969" TEXT="h&#xe4;?">
<icon BUILTIN="smiley-oh"/>
</node>
<node COLOR="#435e98" CREATED="1684194773868" ID="ID_15316954" MODIFIED="1684195753953" TEXT="wo ist der Pointer geblieben...?">
<icon BUILTIN="help"/>
<node CREATED="1684195382372" ID="ID_725421495" MODIFIED="1684195395436" TEXT="TransformingCore&lt;IT,VAL&gt;"/>
<node CREATED="1684195396117" ID="ID_1996678056" MODIFIED="1684195412585" TEXT="mit VAL = engine::JobTicket*"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1684195442602" ID="ID_412081462" MODIFIED="1684195470723" TEXT="value_type &#x2261; typename RefTraits&lt;VAL&gt;::value_type ">
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1684195677474" ID="ID_972416826" MODIFIED="1684195803287" TEXT="dagegen SingleValIter geht anders vor">
<linktarget COLOR="#ed1b60" DESTINATION="ID_972416826" ENDARROW="Default" ENDINCLINATION="28;-107;" ID="Arrow_ID_233555923" SOURCE="ID_1480156019" STARTARROW="None" STARTINCLINATION="90;0;"/>
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1684195699339" ID="ID_1562178442" MODIFIED="1684195708018" TEXT="SingleValCore&lt;VAL&gt;"/>
<node CREATED="1684195396117" ID="ID_1028989688" MODIFIED="1684195412585" TEXT="mit VAL = engine::JobTicket*"/>
<node CREATED="1684195724956" ID="ID_1264640517" MODIFIED="1684195739270" TEXT="value_&#x2261; type typename std::remove_reference&lt;VAL&gt;::type"/>
</node>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1684195841717" ID="ID_832391082" MODIFIED="1684195870623">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
was w&#228;re an der Stelle <i>logisch korrekt </i>?
</p>
</body>
</html></richcontent>
<icon BUILTIN="help"/>
<node CREATED="1684196080429" ID="ID_1302071402" MODIFIED="1684196108330" TEXT="is_convertible&lt; ResIter::value_type &#x27fc; typename SRC::value_type &gt;"/>
<node CREATED="1684196119619" ID="ID_1880424042" MODIFIED="1684196250839">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
die Frage lautet:
</p>
<p>
&#160;&#8222;k&#246;nnen die Expanded-Results verwendet werden,
</p>
<p>
&#160;&#160;an Stellen, wo SRC-Results erwartet werden&#8220;&#160;
</p>
</body>
</html></richcontent>
<icon BUILTIN="idea"/>
</node>
<node CREATED="1684196495453" ID="ID_5416756" MODIFIED="1684196584048">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
f&#252;r die Expanded-Results klar: brauche <i>exakt</i>&#160;den <b>Ergebnis-Typ</b>&#160; des Iterators
</p>
</body>
</html></richcontent>
<icon BUILTIN="yes"/>
</node>
<node CREATED="1684196589209" ID="ID_1757225531" MODIFIED="1684196635199" TEXT="f&#xfc;r die Src-Results ist die Frage schwierig">
<node CREATED="1684196637531" ID="ID_478127624" MODIFIED="1684196727253" TEXT="man kann ja hier nicht wissen, was wirklich erwartet wird">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
...denn das ergibt sich erst im Aufrufkontext; man denke z.B. an rvalue/lvalue-Probleme und temporaries, und das alles noch mit constness gemischt. Auf weia
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1684196742980" ID="ID_431433027" MODIFIED="1684196758118" TEXT="aber ist &#x201e;erwartet&#x201c; wirklich die richtige Frage?"/>
<node CREATED="1684196760602" ID="ID_1448595579" MODIFIED="1684196783658" TEXT="ersatzweise: man m&#xf6;chte beide Datentr&#xf6;me mischen"/>
<node CREATED="1684196867369" ID="ID_672540161" MODIFIED="1684196902035" TEXT="demnach &#x27f9; auch hier der Ergebnis-Typ &#x2014; ggfs. noch ohne Referenz"/>
</node>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1684199691017" ID="ID_791332898" MODIFIED="1684199727372" TEXT="was die Itertools bisher machen ist eindeutig falsch">
<arrowlink COLOR="#ac0677" DESTINATION="ID_1944182984" ENDARROW="Default" ENDINCLINATION="-11;-31;" ID="Arrow_ID_570862373" STARTARROW="None" STARTINCLINATION="-171;9;"/>
<icon BUILTIN="yes"/>
</node>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1684195781941" ID="ID_1944182984" MODIFIED="1684199719324" TEXT="Assertion deckt eine Inkonsistenz in den Itertools auf">
<linktarget COLOR="#ac0677" DESTINATION="ID_1944182984" ENDARROW="Default" ENDINCLINATION="-11;-31;" ID="Arrow_ID_570862373" SOURCE="ID_791332898" STARTARROW="None" STARTINCLINATION="-171;9;"/>
<icon BUILTIN="broken-line"/>
<node CREATED="1684196920084" ID="ID_584323645" MODIFIED="1684196955699" TEXT="die Semantik der eingebetteten Typ-Bindings ist nicht klar">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1684196960688" ID="ID_1270509122" MODIFIED="1684196979224" TEXT="ich hab mich da so &#xbb;pragmatisch reingewurschtelt&#xab; in das Thema"/>
<node CREATED="1684196988795" ID="ID_1470485019" MODIFIED="1684197028434" TEXT="Vorlage war die STL, aber ich hatte nicht das Standing, um die STL wirklich zu verstehen"/>
<node CREATED="1684197029232" ID="ID_1741813636" MODIFIED="1684197154710" TEXT="mehr noch: ich wollte (und will) mich von der STL abgrenzen">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
Und zwar erscheint mir die STL zugleich als zu komplex und zu offen; sie verleitet zu einem Low-level-Geknobel. Genau deshalb habe ich die gesamte Iteratoren- und Konzept-Hierarchie der STL beiseite geschoben, und ein &#187;Lumiera Forward Iterator&#171;-Concept neu definiert.
</p>
</body>
</html></richcontent>
<icon BUILTIN="yes"/>
</node>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1684197651402" ID="ID_1881371672" MODIFIED="1684198037445" TEXT="das ist ein berechtigter Ansatz">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
Denn ganz bewu&#223;t habe ich es abgelehnt, mit Lumiera ein universelles Framework zu schaffen (wiewohl eine Tendenz dorthin nicht zu verleugnen ist). Vielmehr geht es mit allen Konventionen und Definitionen um eine <b>Gr&#252;ndung</b>, also darum, einen <i>Raum zu schaffen,</i>&#160;in dem sich etwas Neues von einem wohl bestimmten Charakter entwickeln kann. Ich richte mich also nicht nach <i>dem Vorhandenen</i>&#160;und ich mu&#223; nicht <i>dem Vorhandenen in allen seinen Weiterungen und Verzweigungen entsprechen.</i>&#160; Diese Haltung entspricht jedoch auch meinem Charakter: meine F&#228;higkeiten zum Erfassen und Sortieren vorgegebener Normen und Gepflogenheiten waren (und sind) gering, wenn ich mich auf einen solchen Anspruch einlasse, stehe ich schnell kr&#228;ftem&#228;&#223;ig mit dem R&#252;cken zur Wand. Anders die meisten meiner Kollegen, die bl&#252;hen da gradezu auf.
</p>
</body>
</html></richcontent>
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/>
</node>
</node>
<node CREATED="1684197155852" ID="ID_400106521" MODIFIED="1684197165964" TEXT="hier besteht ein Zielkonflikt">
<icon BUILTIN="clanbomber"/>
<node CREATED="1684197167674" ID="ID_1605281324" MODIFIED="1684197185116" TEXT="&#x201e;value&#x201c; ist nicht klar">
<node CREATED="1684197187416" ID="ID_1389861872" MODIFIED="1684197193579" TEXT="kann hei&#xdf;en: Ergebnis"/>
<node CREATED="1684197193975" ID="ID_1959860874" MODIFIED="1684197219945" TEXT="kann auch hei&#xdf;en: der Basistyp (als rvalue)"/>
</node>
<node CREATED="1684197514402" ID="ID_1792502182" MODIFIED="1684197623183">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
der <i>Implementator</i>&#160;m&#246;chte mit den Typedefs die Signaturen aufbauen
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1684197535865" ID="ID_809112903" MODIFIED="1684197616452">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
der <i>Nutzer</i>&#160;m&#246;chte wissen, wie er mit Resultaten umgehen kann
</p>
</body>
</html></richcontent>
</node>
</node>
<node CREATED="1684197640002" ID="ID_1847921817" MODIFIED="1684199328264" TEXT="Bezugname auf die STL">
<icon BUILTIN="idea"/>
<node CREATED="1684198966392" ID="ID_449397496" LINK="https://en.cppreference.com/w/cpp/named_req/Container" MODIFIED="1684199002450" TEXT="C++ named requirement: &#xbb;Container&#xab;">
<icon BUILTIN="info"/>
</node>
<node CREATED="1684199007763" ID="ID_1119161771" MODIFIED="1684199048138" TEXT="demnach baut das Schema auf einem Modell auf: Container enth&#xe4;lt &#xbb;values&#xab;"/>
<node CREATED="1684199056069" ID="ID_1539617529" MODIFIED="1684199087165" TEXT="&#x27f9; value_type ist &#x201e;das was im Container liegt&#x201c;"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1684199284567" ID="ID_156863476" MODIFIED="1684199335480" TEXT="&#xdc;bertragung auf das Konzept &#xbb;Lumiera Forward Iterator&#xab;">
<icon BUILTIN="yes"/>
<node CREATED="1684199406472" ID="ID_735062401" MODIFIED="1684199434386" TEXT="&#xbb;value&#xab; ist das, was der Iterator vorr&#xfc;bergehend zug&#xe4;nglich macht">
<icon BUILTIN="forward"/>
</node>
<node CREATED="1684199485120" ID="ID_741685332" MODIFIED="1684199519934" TEXT="&#xbb;reference&#xab; ist ein referenzierender, nicht kopierender Zugriff darauf">
<icon BUILTIN="forward"/>
</node>
<node CREATED="1684199543918" ID="ID_780125561" MODIFIED="1684199621884" TEXT="&#xbb;pointer&#xab; ist die &#xdc;bersetzung der &#xbb;reference&#xab; in das Konzept &#xbb;language pointer&#xab;">
<icon BUILTIN="forward"/>
</node>
</node>
</node>
</node>
</node>
</node>
</node>
</node>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1682868258074" ID="ID_1743148920" MODIFIED="1682898174253" TEXT="Job aus Ticket erstellen und ausf&#xfc;hrbar machen">
@ -69941,7 +70444,7 @@
</node>
</node>
</node>
<node COLOR="#5b280f" CREATED="1682627654491" ID="ID_1371147624" MODIFIED="1683722703271" TEXT="Marker definieren und sichtbar machen">
<node COLOR="#5b280f" CREATED="1682627654491" FOLDED="true" ID="ID_1371147624" MODIFIED="1683722703271" TEXT="Marker definieren und sichtbar machen">
<linktarget COLOR="#48417c" DESTINATION="ID_1371147624" ENDARROW="Default" ENDINCLINATION="-48;56;" ID="Arrow_ID_1753796050" SOURCE="ID_1110039315" STARTARROW="None" STARTINCLINATION="-284;-8;"/>
<icon BUILTIN="button_cancel"/>
<node COLOR="#435e98" CREATED="1682641810117" ID="ID_596391717" MODIFIED="1683722703271" TEXT="Problem: wie integieren?">
@ -70048,7 +70551,7 @@
<icon BUILTIN="idea"/>
</node>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1682205189643" ID="ID_897564380" MODIFIED="1683722703272" TEXT="Problem: Umbau in JobTicket selber blockt">
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1682205189643" FOLDED="true" ID="ID_897564380" MODIFIED="1683722703272" TEXT="Problem: Umbau in JobTicket selber blockt">
<icon BUILTIN="stop-sign"/>
<node CREATED="1682205214637" ID="ID_451342844" MODIFIED="1682205353004" TEXT="kann nicht klar sehen, wie ich einen Marker im MockJob hinterlegen kann">
<icon BUILTIN="smiley-angry"/>
@ -70645,6 +71148,9 @@
<icon BUILTIN="button_ok"/>
</node>
</node>
<node COLOR="#338800" CREATED="1683838161297" ID="ID_751342695" MODIFIED="1683838171328" TEXT="nested Specs in prerequisites umsetzen">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node COLOR="#338800" CREATED="1682385895644" ID="ID_89969390" MODIFIED="1683722539629" TEXT="Verifikation im Test unterst&#xfc;tzen">
<icon BUILTIN="button_ok"/>
@ -70988,12 +71494,21 @@
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683836197004" ID="ID_885444410" MODIFIED="1683836585531" TEXT="getPrerequisites">
<linktarget COLOR="#eb64a1" DESTINATION="ID_885444410" ENDARROW="Default" ENDINCLINATION="338;-2145;" ID="Arrow_ID_1011579074" SOURCE="ID_993440863" STARTARROW="None" STARTINCLINATION="-152;9;"/>
<linktarget COLOR="#eb64a1" DESTINATION="ID_885444410" ENDARROW="Default" ENDINCLINATION="213;-1966;" ID="Arrow_ID_1011579074" SOURCE="ID_993440863" STARTARROW="None" STARTINCLINATION="-384;23;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1683836203943" ID="ID_1933667832" MODIFIED="1683836212926" TEXT="liefert einen Iterator &#xfc;ber JobTicket&amp;"/>
<node CREATED="1683836213973" ID="ID_571829359" MODIFIED="1683836218117" TEXT="nur eine Ebene tief"/>
<node CREATED="1683836226928" ID="ID_580321819" MODIFIED="1683836458419" TEXT="f&#xfc;r RenderDrive">
<arrowlink COLOR="#fed5d7" DESTINATION="ID_1928295133" ENDARROW="Default" ENDINCLINATION="-463;400;" ID="Arrow_ID_1972838231" STARTARROW="None" STARTINCLINATION="-412;-64;"/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1683845331533" ID="ID_113782501" MODIFIED="1683845345276" TEXT="ist es wirklich das was ich daf&#xfc;r brauche?">
<icon BUILTIN="help"/>
<node CREATED="1683845356009" ID="ID_682794726" MODIFIED="1683845392833" TEXT="mu&#xdf; Dependency-Paare erzeugen f&#xfc;r den Scheduler"/>
<node CREATED="1683845394796" ID="ID_1093414619" MODIFIED="1683845414877" TEXT="d.h. brauche stets das abh&#xe4;ngige Ticket ebenfalls"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683897360871" ID="ID_726660737" MODIFIED="1683897457247" TEXT="schon mal im Test die M&#xf6;glichkeiten ausloten">
<arrowlink COLOR="#dd399a" DESTINATION="ID_1523682954" ENDARROW="Default" ENDINCLINATION="-371;858;" ID="Arrow_ID_1803678506" STARTARROW="None" STARTINCLINATION="267;-16;"/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
</node>
<node CREATED="1681167579899" ID="ID_428564529" MODIFIED="1681167585941" TEXT="createJobFor(FrameCoord)"/>