Job-Planning: finally complete the MockSegmentation tests
Last testcase: add deeply nested Prerequisites. Turns out that the allocator must be able to handle re-entrant allocations, which std::deque can not fulfil. Thus using std::list here for the Mock implementation. In the end, the real allocations will be done by our custom allocator (AllocationCluster), which can be arranged easily to support re-entrant allocation calls (since the whole point is to just place those objects into a pre-allocated large block and only de-allocate them later in one sway. Thus the allocator does not need to wait for the object constructor to finish, which trivially allows for re-entrant calls)
This commit is contained in:
parent
94cec423d0
commit
4f37b0412c
4 changed files with 314 additions and 157 deletions
|
|
@ -151,7 +151,8 @@ using lib::LUID;
|
|||
auto
|
||||
getPrerequisites (uint slotNr =0) const
|
||||
{
|
||||
return lib::transformIterator (provision_[slotNr].requirements.begin()
|
||||
return lib::transformIterator (this->empty()? Prerequisites::iterator()
|
||||
: provision_[slotNr].requirements.begin()
|
||||
,[](Prerequisite& prq) -> JobTicket const&
|
||||
{
|
||||
return prq.descriptor;
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@
|
|||
////#include "lib/format-cout.hpp"
|
||||
#include "lib/diff/gen-node.hpp"
|
||||
#include "lib/depend.hpp"
|
||||
#include "lib/linked-elements.hpp"
|
||||
#include "lib/itertools.hpp"
|
||||
//#include "lib/iter-tree-explorer.hpp"
|
||||
//#include "lib/util-coll.hpp"
|
||||
|
|
@ -53,7 +54,8 @@
|
|||
//#include <functional>
|
||||
//#include <vector>
|
||||
#include <tuple>
|
||||
#include <deque>
|
||||
#include <list>
|
||||
//#include <deque>
|
||||
|
||||
//using test::Test;
|
||||
//using util::isnil;
|
||||
|
|
@ -82,7 +84,7 @@ namespace test {
|
|||
// using play::Timings;
|
||||
using lib::HashVal;
|
||||
using std::make_tuple;
|
||||
using std::deque;
|
||||
// using std::deque;
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1294 : organisation of namespaces / includes??
|
||||
using fixture::Segmentation;
|
||||
|
||||
|
|
@ -197,7 +199,9 @@ namespace test {
|
|||
class MockSegmentation
|
||||
: public Segmentation
|
||||
{
|
||||
std::deque<MockJobTicket> tickets_;
|
||||
// simulated allocator;
|
||||
// must be able to handle re-entrant allocations
|
||||
std::list<MockJobTicket> tickets_;
|
||||
|
||||
public:
|
||||
MockSegmentation()
|
||||
|
|
@ -241,7 +245,7 @@ namespace test {
|
|||
{
|
||||
return tickets_.emplace_back (buildSeed(spec)
|
||||
,buildPrerequisites(spec));
|
||||
}
|
||||
} // Warning: re-entrant invocation of emplace_back
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -26,28 +26,18 @@
|
|||
|
||||
|
||||
#include "lib/test/run.hpp"
|
||||
#include "lib/test/test-helper.hpp"
|
||||
#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"
|
||||
#include "lib/meta/duck-detector.hpp"///////////////TODO WIP
|
||||
|
||||
|
||||
using test::Test;
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////TODO WIP for investigation
|
||||
namespace lib {
|
||||
namespace iter_explorer {
|
||||
template<class RES>
|
||||
using DecoTraits = _DecoratorTraits<RES>;
|
||||
template<class SRC, class RES>
|
||||
using ExpoTraits = _ExpanderTraits<SRC,RES>;
|
||||
}}
|
||||
///////////////////////////////////////////////////////TODO WIP for investigation
|
||||
namespace steam {
|
||||
namespace engine{
|
||||
namespace test {
|
||||
|
|
@ -58,41 +48,6 @@ namespace test {
|
|||
using util::isSameObject;
|
||||
using util::seqTuple;
|
||||
|
||||
///////////////////////////////////////////////////////TODO WIP for investigation
|
||||
template<class U>
|
||||
struct ReBind
|
||||
{
|
||||
using type = typename U::type;
|
||||
};
|
||||
// template<typename X, typename SEL = void>
|
||||
// struct has_TypeResult : std::false_type { };
|
||||
//
|
||||
// template<typename X>
|
||||
// struct has_TypeResult<X, typename ReBind<X>::type> : std::true_type { };
|
||||
//
|
||||
// template<typename X>
|
||||
// struct has_TypeResult<X, typename X::Type> : std::true_type { };
|
||||
|
||||
// using lib::meta::Yes_t;
|
||||
// using lib::meta::No_t;
|
||||
//
|
||||
// template<typename TY>
|
||||
// class HasNested_type
|
||||
// {
|
||||
// template<class X>
|
||||
// static Yes_t check(typename X::type *);
|
||||
// template<class X>
|
||||
// static Yes_t check(typename X::Type *);
|
||||
// template<class>
|
||||
// static No_t check(...);
|
||||
//
|
||||
// public:
|
||||
// static const bool value = (sizeof(Yes_t)==sizeof(check<TY>(0)));
|
||||
// };
|
||||
//
|
||||
// template<typename X>
|
||||
// struct has_TypeResult : std::bool_constant<HasNested_type<X>::value> { };
|
||||
///////////////////////////////////////////////////////TODO WIP for investigation
|
||||
|
||||
|
||||
/**********************************************************************//**
|
||||
|
|
@ -378,98 +333,42 @@ namespace test {
|
|||
CHECK (23 == DummyJob::invocationAdditionalKey (job1));
|
||||
CHECK (11 == DummyJob::invocationAdditionalKey (job2));
|
||||
}
|
||||
//-----------------------------------------------------------------/// deep nested prerequisite
|
||||
//-----------------------------------------------------------------/// a tree of deep nested prerequisites
|
||||
{
|
||||
MockSegmentation mockSegs{MakeRec()
|
||||
.attrib("mark", 11)
|
||||
.scope(MakeRec()
|
||||
.attrib("mark",23)
|
||||
.genNode())
|
||||
.attrib("mark", 11)
|
||||
.scope(MakeRec()
|
||||
.attrib("mark",33)
|
||||
.scope(MakeRec()
|
||||
.attrib("mark",55)
|
||||
.genNode()
|
||||
,MakeRec()
|
||||
.attrib("mark",44)
|
||||
.genNode()
|
||||
)
|
||||
.genNode()
|
||||
,MakeRec()
|
||||
.attrib("mark",22)
|
||||
.genNode())
|
||||
.genNode()};
|
||||
|
||||
using RTick = std::reference_wrapper<JobTicket>;
|
||||
auto start = singleValIterator (mockSegs[Time::ZERO].jobTicket());
|
||||
|
||||
using SrC = lib::iter_explorer::BaseAdapter<lib::SingleValIter<engine::JobTicket const&> >;
|
||||
|
||||
auto bunny = [](JobTicket const& ticket)
|
||||
auto it = lib::explore(start)
|
||||
.expand ([](JobTicket const& ticket)
|
||||
{
|
||||
return ticket.getPrerequisites();
|
||||
// return lib::transformIterator(ticket.getPrerequisites()
|
||||
// ,[](JobTicket const& preq) -> JobTicket*
|
||||
// { return unConst(&preq); }
|
||||
// );
|
||||
};
|
||||
using ExIt = decltype(bunny(std::declval<JobTicket const&>()));
|
||||
|
||||
using Funny = std::function<ExIt(JobTicket const&)>;
|
||||
Funny funny = bunny;
|
||||
|
||||
using ExpandedChildren = typename lib::iter_explorer::_FunTraits<Funny,SrC>::Res;
|
||||
|
||||
|
||||
using ResIter = typename lib::iter_explorer::DecoTraits<ExpandedChildren>::SrcIter;
|
||||
// lib::test::TypeDebugger<ResIter> buggy;
|
||||
using ResIterVal = typename ResIter::value_type;
|
||||
using SrcIterVal = typename SrC::value_type;
|
||||
// lib::test::TypeDebugger<ResIterVal> buggy;
|
||||
// lib::test::TypeDebugger<ExIt> bugggy;
|
||||
|
||||
using FunResTrait = lib::iter_explorer::_FunTraits<Funny,ResIter>;
|
||||
using FunArg = typename FunResTrait::Arg;
|
||||
using ArgAdaptRes = typename FunResTrait::ArgAdapter<ResIter>;
|
||||
static_assert(std::is_convertible<typename ResIter::reference, FunArg>());
|
||||
// lib::test::TypeDebugger<decltype(ArgAdaptRes::wrap(bunny))> buggy;
|
||||
|
||||
// using ResCore = iter_explorer::Expander<SRC, ExpandedChildren>;
|
||||
using ResCore = lib::iter_explorer::Expander<SrC, ExpandedChildren>;
|
||||
|
||||
// using ExResIter = typename lib::iter_explorer::DecoTraits<ResCore>::SrcIter;
|
||||
// static_assert(lib::meta::can_IterForEach<ResCore>::value);
|
||||
// static_assert(lib::meta::can_STL_ForEach<ResCore>::value);
|
||||
struct Murks
|
||||
{
|
||||
using type = void;
|
||||
};
|
||||
struct Gurks : Murks { };
|
||||
static_assert(lib::meta::has_TypeResult<Gurks>());
|
||||
using Wootz = std::common_type<JobTicket&, JobTicket const&>;
|
||||
using Wauzz = typename Wootz::type;
|
||||
// lib::test::TypeDebugger<Wauzz> bully;
|
||||
|
||||
static_assert(lib::meta::has_TypeResult<std::common_type<JobTicket*, void*>>());
|
||||
// static_assert(HasNested_type<Gurks>::value);
|
||||
// static_assert(HasNested_type<Wootz>::value);
|
||||
// static_assert(has_TypeResult<Wootz>());
|
||||
|
||||
using ExiTrait = lib::iter_explorer::ExpoTraits<SrC, ExpandedChildren>;
|
||||
using WrapIter = typename lib::iter_explorer::DecoTraits<ResCore>::SrcIter;
|
||||
// lib::test::TypeDebugger<typename lib::meta::ValueTypeBinding<WrapIter>::reference> bully;
|
||||
// static_assert(std::is_const_v<JobTicket const&>);
|
||||
// static_assert(std::is_const_v<JobTicket const>);
|
||||
// static_assert(std::is_const_v<JobTicket&&>);
|
||||
// lib::test::TypeDebugger<std::common_type_t<JobTicket const, JobTicket const>> bully;
|
||||
// lib::test::TypeDebugger<typename ExiTrait::CommonType> bully;
|
||||
// lib::test::TypeDebugger<typename ExiTrait::reference> bully;
|
||||
// lib::test::TypeDebugger<ResCore::reference> bully;
|
||||
|
||||
|
||||
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;
|
||||
#if false /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #1294
|
||||
#endif /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #1294
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
CHECK (util::join(it,"-") == "11-22-33-44-55"_expect);
|
||||
} // Note: Prerequisites are prepended (LinkedElements)
|
||||
} // thus at each level the last ones appear first
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -69803,22 +69803,22 @@
|
|||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1681832844221" ID="ID_826966768" MODIFIED="1681832848268" TEXT="Aufbau">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node CREATED="1681832851795" ID="ID_1453467501" MODIFIED="1681832896408" TEXT="vom MockJobTicket aus beginnen...">
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1681832899812" ID="ID_1664606019" MODIFIED="1682047865205" TEXT="GenNode-basierter Implementierungs-Kern">
|
||||
<node COLOR="#338800" CREATED="1681832899812" ID="ID_1664606019" MODIFIED="1684816357301" TEXT="GenNode-basierter Implementierungs-Kern">
|
||||
<linktarget COLOR="#fef7d1" DESTINATION="ID_1664606019" ENDARROW="Default" ENDINCLINATION="139;-4;" ID="Arrow_ID_1184218305" SOURCE="ID_581175494" STARTARROW="None" STARTINCLINATION="13;150;"/>
|
||||
<icon BUILTIN="pencil"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1681833031252" HGAP="29" ID="ID_1232985944" MODIFIED="1682953126289" TEXT="leer" VSHIFT="14">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1682205060282" ID="ID_290012620" MODIFIED="1683835350728" TEXT="mehrere Segmente">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681833034545" ID="ID_1378629902" MODIFIED="1681833049605" TEXT="rekursiv mit Prerequisite">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1681833034545" ID="ID_1378629902" MODIFIED="1684816356127" TEXT="rekursiv mit Prerequisite">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1682419270798" ID="ID_1327152864" MODIFIED="1682419278493" TEXT="#1294 prototype / mock fixture components">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1682419302874" ID="ID_1541946258" MODIFIED="1682419591486" TEXT="Den Knoten auflösen ⟹ Prototyping">
|
||||
<node COLOR="#435e98" CREATED="1682419302874" ID="ID_1541946258" MODIFIED="1684816351989" TEXT="Den Knoten auflösen ⟹ Prototyping">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
|
|
@ -69950,8 +69950,8 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1681833071385" ID="ID_1107925235" MODIFIED="1683722704189" TEXT="MockJob hinterlegen">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1681833071385" ID="ID_1107925235" MODIFIED="1684816361001" TEXT="MockJob hinterlegen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1682036849793" ID="ID_1932533229" MODIFIED="1682047342244" TEXT="MockJob aufrufen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1682041035913" ID="ID_755113791" MODIFIED="1682047265222" TEXT="dann doch vielleicht besser den bestehenden DummyJob nehmen">
|
||||
|
|
@ -69992,18 +69992,24 @@
|
|||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1682204997554" ID="ID_599701197" MODIFIED="1683837481941" TEXT="Prerequisites hinzufügen">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1683836490113" ID="ID_1045524420" MODIFIED="1683837475432" TEXT="per rekursiver GenNode-Auswertung">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1682204997554" ID="ID_599701197" MODIFIED="1684815618152" TEXT="Prerequisites hinzufügen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1683836490113" ID="ID_1045524420" MODIFIED="1684815616170" TEXT="per rekursiver GenNode-Auswertung">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1684815623800" ID="ID_837898404" MODIFIED="1684815629260" TEXT="tendentiell gefährlich"/>
|
||||
<node CREATED="1684815629809" ID="ID_1444428" MODIFIED="1684815642939" TEXT="Erzeugung und Auswertung erfolgen ineinander verschachtelt"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1684815644310" ID="ID_1683688581" MODIFIED="1684816178878" STYLE="fork" TEXT="der Allokator muß re-entrant aufgerufen werden können">
|
||||
<arrowlink COLOR="#9f1b69" DESTINATION="ID_447348202" ENDARROW="Default" ENDINCLINATION="-766;-108;" ID="Arrow_ID_1594018198" STARTARROW="None" STARTINCLINATION="596;0;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683836500089" ID="ID_993440863" MODIFIED="1683845290600" TEXT="testen über neues Interface getPrerequisites()">
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1683836500089" ID="ID_993440863" MODIFIED="1684815606576" TEXT="testen ü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öglichkeiten zur Pipeline-Verarbeitung ausloten">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1683897388982" ID="ID_1523682954" MODIFIED="1684797093179" TEXT="dabei Mö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ühsam...">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1683897470433" FOLDED="true" ID="ID_293583902" MODIFIED="1684816340515" TEXT="ziemlich mühsam...">
|
||||
<icon BUILTIN="smiley-angry"/>
|
||||
<node COLOR="#ff0000" CREATED="1683897495069" ID="ID_668257697" MODIFIED="1683897532038" TEXT="Pipeline über JobTicket& gelingt überhaupt nicht">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
|
|
@ -70089,7 +70095,7 @@
|
|||
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1683897959342" ID="ID_1569391939" MODIFIED="1684712476011" TEXT="Analyse">
|
||||
<node COLOR="#338800" CREATED="1683897959342" FOLDED="true" ID="ID_1569391939" MODIFIED="1684712476011" TEXT="Analyse">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1683897967984" ID="ID_98765669" MODIFIED="1684189289245" TEXT="der Pfad zur 1.Assertion ist dubios">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -70212,18 +70218,18 @@
|
|||
<node CREATED="1684192131373" ID="ID_724171201" MODIFIED="1684192159133" TEXT="Vorsicht: ich hatte die JobTicket::getPrerequisites auf -> JobTicket const& 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ägt">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#5b280f" CREATED="1684192160287" ID="ID_1810931642" MODIFIED="1684796998110" TEXT="trägt aber nicht zum eigentlichen Problem bei">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1684189641549" ID="ID_1940567504" MODIFIED="1684712468878" TEXT="Rekonstruktion">
|
||||
<node COLOR="#338800" CREATED="1684189641549" FOLDED="true" ID="ID_1940567504" MODIFIED="1684712468878" TEXT="Rekonstruktion">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<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">
|
||||
<node COLOR="#435e98" CREATED="1684189997712" ID="ID_770060385" MODIFIED="1684796971056" 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>
|
||||
|
|
@ -70299,7 +70305,7 @@
|
|||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1684190367907" ID="ID_172958877" MODIFIED="1684193296301" TEXT="ResCore">
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1684190367907" ID="ID_172958877" MODIFIED="1684796978191" TEXT="ResCore">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<node CREATED="1684193043318" ID="ID_1720124636" MODIFIED="1684193145322" TEXT="läßt sich fehlerfrei konstruieren (Überraschung)">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
|
|
@ -70465,7 +70471,7 @@
|
|||
<linktarget COLOR="#a9b4c1" DESTINATION="ID_247789540" ENDARROW="Default" ENDINCLINATION="-15;-42;" ID="Arrow_ID_830127139" SOURCE="ID_672540161" STARTARROW="None" STARTINCLINATION="-53;2;"/>
|
||||
<icon BUILTIN="forward"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1684718878713" ID="ID_741543772" MODIFIED="1684719029190" TEXT="Aber: rein-technisch kann es dabei zu Problemen kommen">
|
||||
<arrowlink COLOR="#a0366c" DESTINATION="ID_368029592" ENDARROW="Default" ENDINCLINATION="-353;-1260;" ID="Arrow_ID_1815839573" STARTARROW="None" STARTINCLINATION="-394;19;"/>
|
||||
<arrowlink COLOR="#4c3853" DESTINATION="ID_368029592" ENDARROW="Default" ENDINCLINATION="-353;-1260;" ID="Arrow_ID_1815839573" STARTARROW="None" STARTINCLINATION="-394;19;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node CREATED="1684718925338" ID="ID_917570391" MODIFIED="1684718961903" TEXT=""Konversion" kann man nur testen, indem man zuweist oder konstruiert"/>
|
||||
|
|
@ -71260,8 +71266,8 @@
|
|||
<node CREATED="1684712417420" ID="ID_991884799" MODIFIED="1684712439816" TEXT="nach Überarbeitung und Verifikation der ValueTypeBindings sind alle Probleme verschwunden"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1684712494897" ID="ID_1651369451" MODIFIED="1684712520817" TEXT="nun die Pipeline auch noch mit Referenzen verwendbar machen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1684712494897" FOLDED="true" ID="ID_1651369451" MODIFIED="1684797031174" TEXT="nun die Pipeline auch noch mit Referenzen verwendbar machen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1684714660497" ID="ID_216562837" MODIFIED="1684714672132" TEXT="mit JobTicket const&"/>
|
||||
<node COLOR="#435e98" CREATED="1684714672777" ID="ID_1009372749" MODIFIED="1684714888355" TEXT="Problem mit singleValIterator">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
|
|
@ -71344,7 +71350,7 @@
|
|||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1684718826468" ID="ID_368029592" MODIFIED="1684796105008" TEXT="also doch: besserer Test für »kompatible Werte« gesucht">
|
||||
<linktarget COLOR="#a0366c" DESTINATION="ID_368029592" ENDARROW="Default" ENDINCLINATION="-353;-1260;" ID="Arrow_ID_1815839573" SOURCE="ID_741543772" STARTARROW="None" STARTINCLINATION="-394;19;"/>
|
||||
<linktarget COLOR="#4c3853" DESTINATION="ID_368029592" ENDARROW="Default" ENDINCLINATION="-353;-1260;" ID="Arrow_ID_1815839573" SOURCE="ID_741543772" STARTARROW="None" STARTINCLINATION="-394;19;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#5b280f" CREATED="1684719111734" ID="ID_1888723433" MODIFIED="1684768943114" TEXT="explizit das »can stand-in« prüfen">
|
||||
<icon BUILTIN="idea"/>
|
||||
|
|
@ -71521,6 +71527,253 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1684797078432" ID="ID_1374445822" MODIFIED="1684797091083" TEXT="sehr aufwendiger Umbau in der Library notwendig">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1684800083638" ID="ID_214202588" MODIFIED="1684816199551" TEXT="mehrfach verschachtelte Prerequisites">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1684800102308" FOLDED="true" ID="ID_1545603358" MODIFIED="1684816327520" TEXT="SEGFAULT bzw. ungüliges Ticket">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<node CREATED="1684800122544" ID="ID_1359955499" MODIFIED="1684800143035" TEXT="wie kann das passieren...?">
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="9"/>
|
||||
<icon BUILTIN="smiley-oh"/>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1684800182479" ID="ID_1699865620" MODIFIED="1684809943355" TEXT="Untersuchung">
|
||||
<icon BUILTIN="info"/>
|
||||
<node COLOR="#435e98" CREATED="1684800281091" ID="ID_888424202" MODIFIED="1684800984773" TEXT="getPrerequisites() auf offensichtlich leeres JobTIcket">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1684800326022" ID="ID_1067024943" MODIFIED="1684800358078" TEXT="Problem ist der Zugriff über die Channel-Nummer als index">
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1684800304904" ID="ID_1087272387" MODIFIED="1684800982186" TEXT="hier fehlt wohl ein empty()-Check">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1684800990944" ID="ID_761480756" MODIFIED="1684801006632" TEXT="damit ist der SEGFAULT weg">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1684800373071" ID="ID_1430831381" MODIFIED="1684809869554" TEXT="aber wie kann ein leeres JobTicket hier auftreten?">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1684801562142" ID="ID_1605790902" MODIFIED="1684801578488" TEXT="...zwar ist das mit den Referenzen schon gefährlich"/>
|
||||
<node CREATED="1684801579316" ID="ID_372682624" MODIFIED="1684801596281" TEXT="...aber alle JobTickets sollten doch stabil im Speicher liegen"/>
|
||||
<node CREATED="1684801485968" ID="ID_913020779" MODIFIED="1684801598211" TEXT="das Ticket liegt schon kaputt in der Segmentation">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node CREATED="1684801502795" ID="ID_1960449243" MODIFIED="1684808093527" TEXT="Problem tritt nur auf, wenn auf einer Ebene mehrere Prerequisites stehen">
|
||||
<arrowlink DESTINATION="ID_949912580" ENDARROW="Default" ENDINCLINATION="6;-58;" ID="Arrow_ID_1790481096" STARTARROW="None" STARTINCLINATION="-130;5;"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1684804513055" ID="ID_949912580" MODIFIED="1684809865284" TEXT="Builder-Iteration beobachten">
|
||||
<linktarget COLOR="#a9b4c1" DESTINATION="ID_949912580" ENDARROW="Default" ENDINCLINATION="6;-58;" ID="Arrow_ID_1790481096" SOURCE="ID_1960449243" STARTARROW="None" STARTINCLINATION="-130;5;"/>
|
||||
<icon BUILTIN="list"/>
|
||||
<node CREATED="1684804523586" ID="ID_1608815995" MODIFIED="1684804540156" TEXT="die zwei nested-Tickets (23 und 55) werden korrekt erzeugt"/>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1684804540768" ID="ID_1851251656" MODIFIED="1684806148264" TEXT="das top-level-Ticket ist unvollständig konstruiert oder korrumpiert">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1684806150056" ID="ID_1647779785" MODIFIED="1684806202639" TEXT="es findet eine Verwechslung statt">
|
||||
<icon BUILTIN="clanbomber"/>
|
||||
</node>
|
||||
<node CREATED="1684806158743" ID="ID_1548270265" MODIFIED="1684806194070" TEXT="zwischen dem top-Level Ticket(id=11) und dem 2.Subticket(id=55)"/>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1684807049319" ID="ID_1694835244" MODIFIED="1684807993087" TEXT="Deque::emplace_back wird re-entrant aufgerufen">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1684808026054" ID="ID_295426763" MODIFIED="1684809879076" TEXT="wie kommt es zu dem re-entranten Aufruf?">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1684808108715" ID="ID_1801096639" MODIFIED="1684808131299" TEXT="dem Job-Ticket-ctor wird (eingepackt) nur ein Iterator für die Prerequisites übergeben"/>
|
||||
<node CREATED="1684808232459" ID="ID_1237322436" MODIFIED="1684808257034" TEXT="tatsächlich ist das ein TransformIterator (welcher JobTicket baut)">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node CREATED="1684808150430" ID="ID_52443343" MODIFIED="1684808175181" TEXT="während wir via emplace_back im top-Level ctor sind..."/>
|
||||
<node CREATED="1684809408905" ID="ID_85213934" MODIFIED="1684809444816" TEXT="..wird zunächst die Spec ausgewertet">
|
||||
<linktarget COLOR="#ff005c" DESTINATION="ID_85213934" ENDARROW="Default" ENDINCLINATION="44;42;" ID="Arrow_ID_1089227137" SOURCE="ID_324096076" STARTARROW="None" STARTINCLINATION="-159;8;"/>
|
||||
</node>
|
||||
<node CREATED="1684808175873" ID="ID_1817247393" MODIFIED="1684809424673" TEXT="...und dabei wird dieser Iterator aktiviert">
|
||||
<node CREATED="1684809243689" ID="ID_577633189" MODIFIED="1684809255515" TEXT="ruft den transform-Funktor auf"/>
|
||||
<node CREATED="1684809255935" ID="ID_687227041" MODIFIED="1684809279464" TEXT="dieser ruft re-entrant das emplace_back auf"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1684809282899" ID="ID_711686740" MODIFIED="1684809315951" TEXT="dieses belegt this mit einer bereits vergebenen Adresse">
|
||||
<icon BUILTIN="clanbomber"/>
|
||||
</node>
|
||||
<node CREATED="1684809321046" ID="ID_546438489" MODIFIED="1684809327413" TEXT="und wertet dann die Spec aus"/>
|
||||
<node CREATED="1684809328621" ID="ID_312188745" MODIFIED="1684809377598" TEXT="wegen der RVO arbeitet provisionSpec bereits im doppelt belegten Speicher">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node CREATED="1684809386287" ID="ID_324096076" MODIFIED="1684809462569">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
und <b>korrumpiert</b> daher die laufende Berechnung auf top-Level
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<arrowlink COLOR="#ff005c" DESTINATION="ID_85213934" ENDARROW="Default" ENDINCLINATION="44;42;" ID="Arrow_ID_1089227137" STARTARROW="None" STARTINCLINATION="-159;8;"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1684809928901" ID="ID_1559101169" MODIFIED="1684815403687" TEXT="die re-entranten Aufrufe vermeiden">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1684809953633" ID="ID_1013476722" MODIFIED="1684809961752" TEXT="strukturelles Problem">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1684809963208" ID="ID_197980826" MODIFIED="1684810145770">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
Prerequisites sind <b>privat</b> in JobTicket
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1684809974582" ID="ID_1124553578" MODIFIED="1684810053666">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
deshalb <i>können sie erst</i> im Konstruktor gebaut werden
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1684810016680" ID="ID_440066044" MODIFIED="1684810138446">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
außerdem gibt es <b>kein Mutatons-API</b>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1684810031506" ID="ID_20132995" MODIFIED="1684810066790">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
also <i>müssen sie auch bereits</i> im Konstruktor vollständig gebaut werden
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1684810092358" ID="ID_642183288" MODIFIED="1684810132046">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
und obendrein ist JobTicket <b>non-Copyable</b>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1684810104699" ID="ID_1982427509" MODIFIED="1684810125912">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
also <i>muß es per emplace</i> erzeugt werden
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1684811237684" ID="ID_1491313298" MODIFIED="1684815110975" TEXT="mögliche Auswege">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1684811252562" ID="ID_1210649344" MODIFIED="1684815247084" TEXT="re-entrante Allokationen ermöglichen">
|
||||
<linktarget COLOR="#fef9d2" DESTINATION="ID_1210649344" ENDARROW="Default" ENDINCLINATION="-151;0;" ID="Arrow_ID_315568490" SOURCE="ID_95686416" STARTARROW="None" STARTINCLINATION="-105;-6;"/>
|
||||
<icon BUILTIN="forward"/>
|
||||
</node>
|
||||
<node CREATED="1684811272864" ID="ID_977069915" MODIFIED="1684815243367" TEXT="die Prerequisite-Tickets bereits vor dem ctor-Aufruf bauen">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1684815113734" HGAP="10" ID="ID_447348202" MODIFIED="1684816189525" TEXT="Entscheidung" VSHIFT="7">
|
||||
<linktarget COLOR="#9f1b69" DESTINATION="ID_447348202" ENDARROW="Default" ENDINCLINATION="-766;-108;" ID="Arrow_ID_1594018198" SOURCE="ID_1683688581" STARTARROW="None" STARTINCLINATION="596;0;"/>
|
||||
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
|
||||
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1684815119061" ID="ID_66677317" MODIFIED="1684815145555" TEXT="ich erwarte re-entrante Allokationen">
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node CREATED="1684815148892" ID="ID_95686416" MODIFIED="1684815385171">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
Entscheidung im Hinblick auf den <b>AllocationCluster</b>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
das kommt nicht von Ungefähr: dieses ganze (relativ fragile) Setup mit den Referenzen in LinkedElements mache ich ganz bewußt, weil am Ende ein Allocation-Schema beabsichtigt ist, bei dem viele Elemente in kurzer Zeit in einen gemeinsam allozierten großen Block gelegt werden; dort bleiben sie bestehen, selbst nachdem ihr Destruktor aufgerufen wurde. Die De-Allokation erfolgt auf einmal, zusammen mit dem gesamten Segment
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<arrowlink COLOR="#fef9d2" DESTINATION="ID_1210649344" ENDARROW="Default" ENDINCLINATION="-151;0;" ID="Arrow_ID_315568490" STARTARROW="None" STARTINCLINATION="-105;-6;"/>
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1684815414062" HGAP="-19" ID="ID_836227530" MODIFIED="1684815438692" TEXT="Mock-Implementierung: simuliere den Allokator durch std::list" VSHIFT="25">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1684815440034" ID="ID_1890084327" MODIFIED="1684815464820">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
das ist eine <i>»bastel-Lösung«</i>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node CREATED="1684815466385" ID="ID_578127251" MODIFIED="1684816314080" TEXT="rein pragmatisch herausgefunden">
|
||||
<icon BUILTIN="info"/>
|
||||
<node CREATED="1684815474222" ID="ID_1145733613" MODIFIED="1684816258000" TEXT="deque::emplace_back �� Korruption"/>
|
||||
<node CREATED="1684816258635" ID="ID_347170626" MODIFIED="1684816287085" TEXT="list::emplace_front �� letztes Element ersetzt alle anderen"/>
|
||||
<node CREATED="1684816287811" ID="ID_1223921866" MODIFIED="1684816309202">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
list::emplace_back  <b><font color="#0d8c6a">funktioniert</font></b>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1684816203960" ID="ID_1218889309" MODIFIED="1684816218544" TEXT="komplexer Testfall mit mehrfach geschachtelten Prerequisites">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
|
|||
Loading…
Reference in a new issue