Dispatcher-Pipeline: now (finally) able to implement MockDispatcher
MockSupport_test : PASS JobPlanningSetup_test : PASS(as far as defined)
This commit is contained in:
parent
122addbff5
commit
0b9705692b
14 changed files with 210 additions and 68 deletions
|
|
@ -270,7 +270,7 @@ namespace engine {
|
|||
|
||||
/** Package a Ticket together with a direct dependency,
|
||||
* to allow setup of schedule times in downstream processing */
|
||||
using TicketDepend = std::pair<JobTicket const*, JobTicket const*>;
|
||||
using TicketDepend = std::pair<JobTicket*, JobTicket*>;
|
||||
|
||||
|
||||
/**
|
||||
|
|
@ -305,9 +305,9 @@ namespace engine {
|
|||
return buildPipeline (
|
||||
this->expandAll([](TicketDepend& currentLevel)
|
||||
{
|
||||
JobTicket const* parent = currentLevel.second;
|
||||
JobTicket* parent = currentLevel.second;
|
||||
return lib::transformIterator (parent->getPrerequisites()
|
||||
,[&parent](JobTicket const& prereqTicket)
|
||||
,[&parent](JobTicket& prereqTicket)
|
||||
{ // parent shifted up to first pos
|
||||
return TicketDepend{parent, &prereqTicket};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ namespace engine {
|
|||
|
||||
|
||||
/** special »do nothing« JobTicket marker */
|
||||
const JobTicket JobTicket::NOP{}; //////////////////////////////////////////////////////////////TICKET #725 : do we actually need that for the final data structure?
|
||||
JobTicket JobTicket::NOP{}; ////////////////////////////////////////////////////////////////////TICKET #725 : do we actually need that for the final data structure?
|
||||
|
||||
JobTicket::JobTicket()
|
||||
: provision_{nopFunctor(), ExitNode::NIL}
|
||||
|
|
|
|||
|
|
@ -90,6 +90,7 @@ using lib::LUID;
|
|||
* the JobTicket acts as _higher order function:_ a function generating
|
||||
* on invocation another, specific function (= the job).
|
||||
*
|
||||
* @note JobTicket is effectively immutable after construction
|
||||
* @todo 4/23 WIP-WIP-WIP defining the invocation sequence and render jobs
|
||||
*/
|
||||
class JobTicket
|
||||
|
|
@ -98,7 +99,7 @@ using lib::LUID;
|
|||
struct Prerequisite
|
||||
{
|
||||
Prerequisite* next{nullptr}; // for intrusive list
|
||||
JobTicket const& prereqTicket;
|
||||
JobTicket& prereqTicket;
|
||||
|
||||
template<class ALO>
|
||||
Prerequisite (ExitNode const& node, ALO& allocateTicket)
|
||||
|
|
@ -138,7 +139,7 @@ using lib::LUID;
|
|||
: provision_{buildProvisionSpec (exitNode, allocator)}
|
||||
{ }
|
||||
|
||||
static const JobTicket NOP;
|
||||
static JobTicket NOP;
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1276 : likely to become obsolete
|
||||
|
|
@ -151,11 +152,11 @@ using lib::LUID;
|
|||
Job createJobFor (FrameCoord coordinates) const;
|
||||
|
||||
auto
|
||||
getPrerequisites () const
|
||||
getPrerequisites ()
|
||||
{
|
||||
return lib::transformIterator (this->empty()? Prerequisites::const_iterator()
|
||||
return lib::transformIterator (this->empty()? Prerequisites::iterator()
|
||||
: provision_.prerequisites.begin()
|
||||
,[](Prerequisite const& prq) -> JobTicket const&
|
||||
,[](Prerequisite& prq) -> JobTicket&
|
||||
{
|
||||
return prq.prereqTicket;
|
||||
});
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ namespace fixture {
|
|||
{
|
||||
using JobTicket = engine::JobTicket;
|
||||
using TicketAlloc = lib::AllocatorHandle<JobTicket>;
|
||||
using PortTable = std::deque<std::reference_wrapper<const JobTicket>>;
|
||||
using PortTable = std::deque<std::reference_wrapper<JobTicket>>;
|
||||
|
||||
protected:
|
||||
|
||||
|
|
@ -128,7 +128,7 @@ namespace fixture {
|
|||
* Access the JobTicket for this segment and the given \a portNr
|
||||
* @remark will be created on-demand and remain stable thereafter.
|
||||
*/
|
||||
engine::JobTicket const&
|
||||
engine::JobTicket&
|
||||
jobTicket (size_t portNr) const
|
||||
{
|
||||
if (portNr >= portTable_.size())
|
||||
|
|
|
|||
|
|
@ -83,8 +83,7 @@ namespace fixture {
|
|||
class Segmentation
|
||||
: util::NonCopyable
|
||||
{
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1243 : preliminary implementation
|
||||
|
||||
protected:
|
||||
/** segments of the engine in ordered sequence. */
|
||||
list<Segment> segments_;
|
||||
|
||||
|
|
|
|||
|
|
@ -146,6 +146,12 @@ namespace mobject {
|
|||
return mp1.id_ != mp2.id_;
|
||||
}
|
||||
|
||||
friend bool
|
||||
operator< (ModelPort const& mp1, ModelPort const& mp2)
|
||||
{
|
||||
return lib::HashVal(mp1.id_) < lib::HashVal(mp2.id_);
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -130,8 +130,8 @@ namespace test {
|
|||
)
|
||||
.genNode()};
|
||||
fixture::Segment const& seg = mockSegs[Time{0,15}]; // access anywhere 10s <= t < 20s
|
||||
JobTicket const& ticket = seg.jobTicket(0); // get the master-JobTicket from this segment
|
||||
JobTicket const& prereq = *(ticket.getPrerequisites()); // pull a prerequisite JobTicket
|
||||
JobTicket& ticket = seg.jobTicket(0); // get the master-JobTicket from this segment
|
||||
JobTicket& prereq = *(ticket.getPrerequisites()); // pull a prerequisite JobTicket
|
||||
|
||||
FrameCoord coord; // Frame coordinates for invocation (placeholder)
|
||||
Job jobP = prereq.createJobFor(coord); // create an instance of the prerequisites for this coordinates
|
||||
|
|
@ -203,6 +203,7 @@ namespace test {
|
|||
JobTicket const& ticket = *pipeline->second;
|
||||
|
||||
FrameCoord dummy;
|
||||
dummy.absoluteNominalTime = Time::ZERO; // actual time point is irrelevant here
|
||||
Job job = ticket.createJobFor(dummy);
|
||||
CHECK (dispatcher.verify(job, port, sink));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -61,9 +61,10 @@
|
|||
#include "lib/linked-elements.hpp"
|
||||
#include "lib/itertools.hpp"
|
||||
#include "lib/depend.hpp"
|
||||
#include "lib/util.hpp"
|
||||
|
||||
#include <tuple>
|
||||
#include <list>
|
||||
#include <map>
|
||||
|
||||
|
||||
namespace steam {
|
||||
|
|
@ -76,6 +77,8 @@ namespace test {
|
|||
using lib::time::TimeValue;
|
||||
using lib::time::Time;
|
||||
using lib::HashVal;
|
||||
using util::isnil;
|
||||
using util::isSameObject;
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1294 : organisation of namespaces / includes??
|
||||
using fixture::Segmentation;
|
||||
|
||||
|
|
@ -170,14 +173,10 @@ namespace test {
|
|||
class MockSegmentation
|
||||
: public Segmentation
|
||||
{
|
||||
// simulated allocator;
|
||||
// must be able to handle re-entrant allocations
|
||||
std::list<MockJobTicket> tickets_;
|
||||
|
||||
public:
|
||||
MockSegmentation()
|
||||
: Segmentation{}
|
||||
, tickets_{}
|
||||
{ }
|
||||
|
||||
MockSegmentation (std::initializer_list<GenNode> specs)
|
||||
|
|
@ -202,6 +201,9 @@ namespace test {
|
|||
,& DummyJob::getFunctor()};
|
||||
}
|
||||
|
||||
/** @internal helper for MockDispatcher */
|
||||
void duplicateExitNodeSpec (uint times);
|
||||
|
||||
|
||||
private: /* ======== Implementation: build fake ExitNodes from test specification ==== */
|
||||
|
||||
|
|
@ -226,6 +228,21 @@ namespace test {
|
|||
|
||||
|
||||
|
||||
/**
|
||||
* This is some trickery to allow handling of multiple ModelPort(s) in MockDispatcher;
|
||||
* actually the code using this mock setup does not need any elaborate differentiation
|
||||
* of the ExitNodes structure per port, thus the first entry of the existing configuration
|
||||
* is just duplicated for the given number of further ModelPorts.
|
||||
* @warning this manipulation must be done prior to generating any JobTicket
|
||||
*/
|
||||
inline void
|
||||
MockSegmentation::duplicateExitNodeSpec (uint times)
|
||||
{
|
||||
for (fixture::Segment& seg : segments_)
|
||||
seg.exitNode = move(fixture::NodeGraphAttachment{ExitNodes{times, seg.exitNode[0]}});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* verify the given job instance was actually generated from this JobTicket.
|
||||
* @remark this test support function relies on some specific rigging,
|
||||
|
|
@ -263,6 +280,9 @@ namespace test {
|
|||
DummyPlaybackSetup dummySetup_;
|
||||
MockSegmentation mockSeg_;
|
||||
|
||||
using PortIdxMap = std::map<ModelPort, size_t>;
|
||||
|
||||
const PortIdxMap portIdx_;
|
||||
|
||||
public:
|
||||
/* == mock Dispatcher implementation == */
|
||||
|
|
@ -279,24 +299,41 @@ namespace test {
|
|||
UNIMPLEMENTED ("determine when to finish a planning chunk");
|
||||
}
|
||||
|
||||
|
||||
size_t
|
||||
resolveModelPort (ModelPort modelPort) override
|
||||
{
|
||||
UNIMPLEMENTED ("some Map lookup in a prepared table to find out the actual slot number");
|
||||
auto entry = portIdx_.find(modelPort);
|
||||
if (entry == portIdx_.end())
|
||||
throw error::Logic{"Invalid ModelPort for this Dispatcher"};
|
||||
else
|
||||
return entry->second;
|
||||
}
|
||||
|
||||
|
||||
|
||||
JobTicket&
|
||||
accessJobTicket (size_t, TimeValue nominalTime) override
|
||||
accessJobTicket (size_t portIDX, TimeValue nominalTime) override
|
||||
{
|
||||
UNIMPLEMENTED ("dummy implementation of the model backbone / segmentation");
|
||||
auto& seg = mockSeg_[nominalTime];
|
||||
return seg.jobTicket(portIDX);
|
||||
}
|
||||
|
||||
|
||||
MockDispatcher() = default;
|
||||
MockDispatcher()
|
||||
: dummySetup_{}
|
||||
, mockSeg_{MakeRec().genNode()} // Node: generate a single active Segment to cover all
|
||||
, portIdx_{buildPortIndex()}
|
||||
{
|
||||
mockSeg_.duplicateExitNodeSpec(portIdx_.size());
|
||||
}
|
||||
|
||||
MockDispatcher (std::initializer_list<GenNode> specs)
|
||||
: mockSeg_(specs)
|
||||
{ }
|
||||
: dummySetup_{}
|
||||
, mockSeg_(specs)
|
||||
, portIdx_{buildPortIndex()}
|
||||
{
|
||||
mockSeg_.duplicateExitNodeSpec(portIdx_.size());
|
||||
}
|
||||
|
||||
|
||||
ModelPort
|
||||
|
|
@ -313,7 +350,7 @@ namespace test {
|
|||
* @param index number of the distinct port / connection
|
||||
* @return a `std::pair<ModelPort,DataSink>`
|
||||
* @warning as of 5/2023, there are two preconfigured "slots",
|
||||
* and they are not usable in any way other then refering to their identity
|
||||
* and they are not usable in any way other then referring to their identity
|
||||
*/
|
||||
play::test::DummyOutputLink
|
||||
getDummyConnection(uint index)
|
||||
|
|
@ -326,7 +363,28 @@ namespace test {
|
|||
*/
|
||||
bool verify(Job const& job, ModelPort const& port, play::DataSink const& sink)
|
||||
{
|
||||
UNIMPLEMENTED ("verify the job was plausibly created from this dispatcher");
|
||||
if (not dummySetup_.isSupported (port, sink)) return false;
|
||||
|
||||
TimeValue nominalTime{job.parameter.nominalTime};
|
||||
size_t portIDX = resolveModelPort (port);
|
||||
JobTicket& ticket = accessJobTicket (portIDX, nominalTime);
|
||||
return isnil (ticket)? DummyJob::isNopJob (job)
|
||||
: MockJobTicket::isAssociated (job, ticket);
|
||||
}
|
||||
|
||||
private:
|
||||
PortIdxMap
|
||||
buildPortIndex()
|
||||
{
|
||||
PortIdxMap newIndex;
|
||||
uint i{0};
|
||||
for (auto it=dummySetup_.getAllModelPorts()
|
||||
; bool{it}
|
||||
; ++it, ++i
|
||||
)
|
||||
newIndex[*it] = i;
|
||||
|
||||
return newIndex;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -326,7 +326,7 @@ namespace test {
|
|||
.genNode())
|
||||
.genNode()};
|
||||
CHECK (1 == mockSegs.size());
|
||||
JobTicket const& ticket = mockSegs[Time::ZERO].jobTicket(0); // Model-PortNr.0
|
||||
JobTicket& ticket = mockSegs[Time::ZERO].jobTicket(0); // Model-PortNr.0
|
||||
auto prereq = ticket.getPrerequisites();
|
||||
CHECK (not isnil (prereq));
|
||||
|
||||
|
|
@ -364,7 +364,7 @@ namespace test {
|
|||
auto start = singleValIterator (mockSegs[Time::ZERO].jobTicket(0));
|
||||
|
||||
auto it = lib::explore(start)
|
||||
.expand ([](JobTicket const& ticket)
|
||||
.expand ([](JobTicket& ticket)
|
||||
{
|
||||
return ticket.getPrerequisites();
|
||||
})
|
||||
|
|
@ -394,6 +394,7 @@ namespace test {
|
|||
verify_MockDispatcherSetup()
|
||||
{
|
||||
FrameCoord frame;
|
||||
frame.absoluteNominalTime = Time{0,30};
|
||||
{
|
||||
MockDispatcher dispatcher;
|
||||
// automatically generates some fake connection points...
|
||||
|
|
|
|||
|
|
@ -115,7 +115,7 @@ namespace test {
|
|||
return job.parameter.invoKey.part.a;
|
||||
};
|
||||
|
||||
JobTicket const& ticket = seg.jobTicket(0);
|
||||
JobTicket& ticket = seg.jobTicket(0);
|
||||
CHECK (13 == getMarker (ticket));
|
||||
auto prereq = ticket.getPrerequisites();
|
||||
CHECK (not isnil(prereq));
|
||||
|
|
|
|||
|
|
@ -136,6 +136,24 @@ namespace test {
|
|||
return mockBuilder_.getModelPort (index);
|
||||
}
|
||||
|
||||
/** search through all port <-> sink connections
|
||||
* supported by this DummyPlayConnection
|
||||
* @return `true` if found both a math on port an sink.
|
||||
*/
|
||||
bool
|
||||
isSupported (ModelPort port, DataSink sink)
|
||||
{
|
||||
uint i{0};
|
||||
for (auto it=getAllModelPorts(); bool{it}; ++it, ++i)
|
||||
if (port == *it)
|
||||
{
|
||||
auto [refPort, refSink] = getModelPort(i);
|
||||
if (refSink == sink)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
POutputManager
|
||||
provide_testOutputSlot()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -40,11 +40,13 @@
|
|||
|
||||
#include "vault/engine/dummy-job.hpp"
|
||||
|
||||
#include "vault/engine/nop-job-functor.hpp"
|
||||
#include "lib/test/test-helper.hpp"
|
||||
#include "lib/time/timevalue.hpp"
|
||||
#include "vault/real-clock.hpp"
|
||||
#include "lib/null-value.hpp"
|
||||
#include "lib/hash-value.h"
|
||||
#include "lib/depend.hpp"
|
||||
#include "lib/util.hpp"
|
||||
|
||||
#include <cstdlib>
|
||||
|
|
@ -180,6 +182,9 @@ namespace engine {
|
|||
/** actual instance of the test dummy job functor */
|
||||
DummyClosure dummyClosure;
|
||||
|
||||
/** access to the fallback-implementation for empty segments */
|
||||
lib::Depend<vault::engine::NopJobFunctor> nopFunctor;
|
||||
|
||||
}// (End)Implementation details
|
||||
|
||||
|
||||
|
|
@ -255,6 +260,22 @@ namespace engine {
|
|||
{
|
||||
return dummyClosure;
|
||||
}
|
||||
|
||||
/** @internal likewise to support the MockDispatcher diagnostics;
|
||||
* locate here since this is a dedicated translation unit
|
||||
* @return `true` iff the job was defined in the typical way used by
|
||||
* JobTicket to generate fill jobs for empty segments.
|
||||
* @see JobTicket::JobTicket::createJobFor(FrameCoord)
|
||||
*/
|
||||
bool
|
||||
DummyJob::isNopJob (Job const& job)
|
||||
{
|
||||
InvocationInstanceID empty; ///////////////////////////////////////////////////////////////////////TICKET #1287 : temporary workaround until we get rid of the C base structs
|
||||
JobClosure& jobFunctor = static_cast<JobClosure&> (*job.jobClosure); //////////////////////////TICKET #1287 : fix actual interface down to JobFunctor (after removing C structs)
|
||||
return lumiera_invokey_eq (&util::unConst(job).parameter.invoKey, &empty)
|
||||
and util::isSameObject (jobFunctor, nopFunctor());
|
||||
}
|
||||
|
||||
|
||||
|
||||
}} // namespace vault::engine
|
||||
|
|
|
|||
|
|
@ -68,6 +68,7 @@ namespace engine {
|
|||
static int invocationAdditionalKey (Job const& job);
|
||||
|
||||
static JobClosure& getFunctor();
|
||||
static bool isNopJob (Job const&);
|
||||
};
|
||||
|
||||
}} // namespace vault::engine
|
||||
|
|
|
|||
|
|
@ -70119,7 +70119,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1681742255171" ID="ID_1531898349" MODIFIED="1681744077783" TEXT="Draft im Test-Setup">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#435e98" CREATED="1681742836996" FOLDED="true" ID="ID_1978512771" MODIFIED="1686581185598" TEXT="scaffolding and mocking used for this test">
|
||||
<node COLOR="#435e98" CREATED="1681742836996" FOLDED="true" ID="ID_1978512771" MODIFIED="1686608177837" TEXT="scaffolding and mocking used for this test">
|
||||
<icon BUILTIN="full-1"/>
|
||||
<node CREATED="1681742863121" ID="ID_101929835" MODIFIED="1684878277170" TEXT="benötigte Mocks">
|
||||
<icon BUILTIN="info"/>
|
||||
|
|
@ -70343,7 +70343,20 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1686498710958" ID="ID_200132237" MODIFIED="1686498774995" TEXT="nicht klar ob das für die Mock-Lösung überhaupt gebraucht wird">
|
||||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1686498723556" ID="ID_1464720710" MODIFIED="1686498781151" TEXT="derzeit erzeugt die Mock-Lösung nur ein NodeGraphAttachment für ModelPort-Index ≔ 0">
|
||||
<node COLOR="#435e98" CREATED="1686498723556" ID="ID_1464720710" MODIFIED="1686608229845">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
derzeit erzeugt die Mock-Lösung nur ein NodeGraphAttachment für ModelPort-Index ≔ 0
|
||||
</p>
|
||||
<p>
|
||||
und der MockDispatcher doppelt die definierte Exit-Node struktur identisch auf
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1686525035254" ID="ID_1328903780" MODIFIED="1686525426254" TEXT="man könnte ein zusätzliches Attribut "modelPort" in die Spec einführen">
|
||||
|
|
@ -72415,9 +72428,9 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686587531758" ID="ID_273720576" MODIFIED="1686587538486" TEXT="darauf MockDispatcher aufbauen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686587545439" ID="ID_128090199" MODIFIED="1686587586943">
|
||||
<node COLOR="#338800" CREATED="1686587531758" ID="ID_273720576" MODIFIED="1686619780748" TEXT="darauf MockDispatcher aufbauen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1686587545439" ID="ID_128090199" MODIFIED="1686617271302">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
|
|
@ -72428,12 +72441,12 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686587918277" ID="ID_1788066497" MODIFIED="1686587964425" TEXT="Segmentation pro ModelPort-ID bereitstellen">
|
||||
<linktarget COLOR="#b72165" DESTINATION="ID_1788066497" ENDARROW="Default" ENDINCLINATION="313;20;" ID="Arrow_ID_1763115482" SOURCE="ID_216367008" STARTARROW="None" STARTINCLINATION="-99;-383;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1686587918277" ID="ID_1788066497" MODIFIED="1686617252613" TEXT="Segmentation pro ModelPort-ID bereitstellen">
|
||||
<linktarget COLOR="#21a5b7" DESTINATION="ID_1788066497" ENDARROW="Default" ENDINCLINATION="320;19;" ID="Arrow_ID_1763115482" SOURCE="ID_216367008" STARTARROW="None" STARTINCLINATION="-99;-383;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686587983258" ID="ID_543272945" MODIFIED="1686588002624">
|
||||
<node COLOR="#338800" CREATED="1686587983258" ID="ID_543272945" MODIFIED="1686617315622">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
|
|
@ -72444,14 +72457,25 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
...eine billige und manipulative Implementierung in MockSegmentation
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="yes"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686588011630" ID="ID_1683399826" MODIFIED="1686588031436" TEXT="Segmentation per Spec, mit 1-Segment-für-Alles-Fallback">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1686588011630" ID="ID_1683399826" MODIFIED="1686619779150" TEXT="Segmentation per Spec, mit 1-Segment-für-Alles-Fallback">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1682385376739" FOLDED="true" ID="ID_576604811" MODIFIED="1684889615769" TEXT="Mock-Implementierung">
|
||||
<node COLOR="#338800" CREATED="1682385376739" FOLDED="true" ID="ID_576604811" MODIFIED="1686620311317" TEXT="Mock-Implementierung">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1682385392969" ID="ID_1317765253" MODIFIED="1684877385035" TEXT="Storage">
|
||||
<node CREATED="1682385491724" ID="ID_1049416610" MODIFIED="1684877190112" TEXT="JobTickets in eine Deque allozieren">
|
||||
|
|
@ -73556,10 +73580,10 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685066463050" ID="ID_1613334312" MODIFIED="1685802330806" TEXT="Mock-Setup schaffen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685066492396" ID="ID_1906962794" MODIFIED="1685066501049" TEXT="API für Zugriff klären">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1685066463050" ID="ID_1613334312" MODIFIED="1686620328038" TEXT="Mock-Setup schaffen">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1685066492396" ID="ID_1906962794" MODIFIED="1686619854315" TEXT="API für Zugriff klären">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1685676202669" ID="ID_1528500239" MODIFIED="1685676214053" TEXT="analog zu MockSegmentation">
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
|
|
@ -73578,8 +73602,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685066474347" ID="ID_122826612" MODIFIED="1685066485373" TEXT="Grid in den Mock-Dispatcher legen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1685662239880" ID="ID_1505090088" MODIFIED="1685662250525" TEXT="brauche ModelPort und Sink-Instanzen">
|
||||
<icon BUILTIN="flag-pink"/>
|
||||
<node COLOR="#338800" CREATED="1685662239880" ID="ID_1505090088" MODIFIED="1686620339199" TEXT="brauche ModelPort und Sink-Instanzen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1685662251607" ID="ID_1360980940" MODIFIED="1685662442877" TEXT="tückisches Problem....">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
|
@ -74536,7 +74560,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node COLOR="#338800" CREATED="1685988152809" ID="ID_255556137" MODIFIED="1686604197744" TEXT="API erweitern : portNum">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1685990098487" ID="ID_829030768" MODIFIED="1685990110152" TEXT="grundsätzlich: YAGNI">
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1685990098487" ID="ID_829030768" MODIFIED="1686619889283" TEXT="grundsätzlich: YAGNI">
|
||||
<linktarget COLOR="#67a7cd" DESTINATION="ID_829030768" ENDARROW="Default" ENDINCLINATION="22;176;" ID="Arrow_ID_1621721947" SOURCE="ID_1835927835" STARTARROW="None" STARTINCLINATION="-485;0;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1685990112190" ID="ID_463883334" MODIFIED="1685990125693" TEXT="bloß nicht verrückt machen mit dem konkreten Model"/>
|
||||
|
|
@ -74547,6 +74571,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node COLOR="#338800" CREATED="1686000316132" FOLDED="true" ID="ID_826544806" LINK="#ID_1237481687" MODIFIED="1686498909689" TEXT="Kopplung per »NodeGraphAttachment«">
|
||||
<linktarget COLOR="#656486" DESTINATION="ID_826544806" ENDARROW="Default" ENDINCLINATION="469;-18;" ID="Arrow_ID_1372033454" SOURCE="ID_551644524" STARTARROW="None" STARTINCLINATION="487;30;"/>
|
||||
<linktarget COLOR="#39ac70" DESTINATION="ID_826544806" ENDARROW="Default" ENDINCLINATION="-1208;77;" ID="Arrow_ID_1329123820" SOURCE="ID_862442414" STARTARROW="None" STARTINCLINATION="-609;-29;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1686008339600" HGAP="28" ID="ID_181839329" MODIFIED="1686092787399" TEXT="Dummy-Implementierung anlegen" VSHIFT="13">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
|
|
@ -74977,16 +75002,16 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node COLOR="#435e98" CREATED="1686014291202" ID="ID_252150549" MODIFIED="1686604201029" TEXT="Problem: wie kommt man an die portNum?">
|
||||
<arrowlink COLOR="#fe3f50" DESTINATION="ID_1087682281" ENDARROW="Default" ENDINCLINATION="326;21;" ID="Arrow_ID_676319361" STARTARROW="None" STARTINCLINATION="309;-20;"/>
|
||||
<icon BUILTIN="help"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686017516585" ID="ID_1223330547" MODIFIED="1686017537173" TEXT="brauche Übersetzung per Map">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686590082295" ID="ID_1948089026" MODIFIED="1686590095640" TEXT="Dispatcher::resolveModelPort(ModelPort) implementieren">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#435e98" CREATED="1686017516585" ID="ID_1223330547" MODIFIED="1686617191140" TEXT="brauche Übersetzung per Map">
|
||||
<icon BUILTIN="yes"/>
|
||||
<node COLOR="#338800" CREATED="1686590082295" ID="ID_1948089026" MODIFIED="1686617179681" TEXT="Dispatcher::resolveModelPort(ModelPort) implementieren">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#5b280f" CREATED="1686017538602" ID="ID_1818653429" MODIFIED="1686604215990" TEXT="prüfen: in der Segmentation implementieren">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686604218914" ID="ID_1822598563" MODIFIED="1686604413003" TEXT="besser direkt im Dispatcher implementieren">
|
||||
<node COLOR="#338800" CREATED="1686604218914" ID="ID_1822598563" MODIFIED="1686617174630" TEXT="besser direkt im Dispatcher implementieren">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
|
|
@ -74997,7 +75022,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686587381975" ID="ID_1778082418" MODIFIED="1686587406618" TEXT="muß aber per Dispatcher oder RenderEnvironmentClosure vermittelt werden">
|
||||
<icon BUILTIN="yes"/>
|
||||
|
|
@ -75006,11 +75031,11 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1686587706724" ID="ID_1590315006" MODIFIED="1686587714337" TEXT="kennt die konkreten Timings"/>
|
||||
<node CREATED="1686587714829" ID="ID_1834326796" MODIFIED="1686587726016" TEXT="kennt sinnvollerweise den ModelPort"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686587745207" ID="ID_125177626" MODIFIED="1686587773785" TEXT="benötigt wird die Übersetzung im Dispatcher / PipeineBuilder">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686587899493" ID="ID_216367008" MODIFIED="1686587964425" TEXT="MockDispatcher muß zudem Segmentation vorbereiten">
|
||||
<arrowlink COLOR="#b72165" DESTINATION="ID_1788066497" ENDARROW="Default" ENDINCLINATION="313;20;" ID="Arrow_ID_1763115482" STARTARROW="None" STARTINCLINATION="-99;-383;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1686587745207" ID="ID_125177626" MODIFIED="1686617224688" TEXT="benötigt wird die Übersetzung im Dispatcher / PipeineBuilder">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1686587899493" ID="ID_216367008" MODIFIED="1686617257686" TEXT="MockDispatcher muß zudem Segmentation vorbereiten">
|
||||
<arrowlink COLOR="#21a5b7" DESTINATION="ID_1788066497" ENDARROW="Default" ENDINCLINATION="320;19;" ID="Arrow_ID_1763115482" STARTARROW="None" STARTINCLINATION="-99;-383;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1686590017562" ID="ID_1378616081" MODIFIED="1686590067746">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
|
|
@ -75032,6 +75057,9 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1686620377983" ID="ID_1217570779" MODIFIED="1686620392713" TEXT="JobTicket ist nun effektiv immutable nach Konstruktion">
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1686182242381" ID="ID_31746915" MODIFIED="1686587864527" TEXT="Unit-Tests">
|
||||
<arrowlink COLOR="#5aec6d" DESTINATION="ID_515771" ENDARROW="Default" ENDINCLINATION="1;286;" ID="Arrow_ID_1994759368" STARTARROW="None" STARTINCLINATION="880;-201;"/>
|
||||
|
|
@ -75394,9 +75422,9 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1512925253328" ID="ID_922277724" MODIFIED="1684869771123" TEXT="JobTicket">
|
||||
<node CREATED="1512925253328" ID="ID_922277724" MODIFIED="1686620124221" TEXT="JobTicket">
|
||||
<linktarget COLOR="#82597c" DESTINATION="ID_922277724" ENDARROW="Default" ENDINCLINATION="43;-81;" ID="Arrow_ID_941233317" SOURCE="ID_946385163" STARTARROW="None" STARTINCLINATION="-124;34;"/>
|
||||
<icon BUILTIN="stop"/>
|
||||
<icon BUILTIN="prepare"/>
|
||||
<node CREATED="1681166276225" ID="ID_877524227" MODIFIED="1681166317636" TEXT="ein Execution-Plan gülitg für ein Segment + ModelPort"/>
|
||||
<node CREATED="1681167533752" ID="ID_1794156121" MODIFIED="1681167538096" TEXT="Anforderungen">
|
||||
<node COLOR="#5b280f" CREATED="1681167546919" ID="ID_1656777068" MODIFIED="1683836193612" TEXT="startExploration()">
|
||||
|
|
@ -75477,8 +75505,9 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1682626547198" ID="ID_1401129193" MODIFIED="1682626582171" TEXT=" macht ein const JobTicket Sinn?">
|
||||
<node COLOR="#435e98" CREATED="1682626547198" ID="ID_1401129193" MODIFIED="1686620211668" TEXT=" macht ein const JobTicket Sinn?">
|
||||
<icon BUILTIN="help"/>
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1682626583859" ID="ID_959446855" MODIFIED="1682626669241" TEXT="zunächst nur aus Gründen der Interface-Logik eingeführt">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
|
@ -75492,8 +75521,11 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1682626596442" ID="ID_627099643" MODIFIED="1685982230662" TEXT="würde darauf hinauslaufen, daß JobTicket selber bei der Job-Planung nicht verändert wird"/>
|
||||
<node CREATED="1682626675632" ID="ID_1360253646" MODIFIED="1682626692994" TEXT="Alternative: komplett eine Builder-Notation für die Segmentation">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node COLOR="#435e98" CREATED="1686620184180" ID="ID_4906179" MODIFIED="1686620204117" TEXT="JobTicket ist effektiv immutable nach Konstruktion">
|
||||
<icon BUILTIN="forward"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1686620213993" ID="ID_1624402855" MODIFIED="1686620234923" TEXT="insofern können alle JobTicket const& in einfache Referenzen verwandelt werden">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1682622228183" ID="ID_1660287725" MODIFIED="1682622235360" TEXT="Redundanz in der Storage?">
|
||||
|
|
@ -75569,6 +75601,10 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1684877477701" ID="ID_1567452222" MODIFIED="1684877486921" TEXT="ein Hash-Seed"/>
|
||||
<node CREATED="1681864799687" ID="ID_750179276" MODIFIED="1681864834215" TEXT="Aufzählung Prerequisites"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1686620035670" ID="ID_862442414" MODIFIED="1686620118378" TEXT="Umstellung: ExitNode als Spezifikation verwenden">
|
||||
<arrowlink COLOR="#39ac70" DESTINATION="ID_826544806" ENDARROW="Default" ENDINCLINATION="-1208;77;" ID="Arrow_ID_1329123820" STARTARROW="None" STARTINCLINATION="-609;-29;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#5b280f" CREATED="1681167767260" FOLDED="true" ID="ID_247185233" MODIFIED="1685982428864" TEXT="JobTicket::ExplorationState">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
|
|
|
|||
Loading…
Reference in a new issue