Block-Flow: identify required API operations
- decision how to handle the Extent storage (by forced-cast) - decision to place the administrative record directly into the Extent TODO not clear yet how to handle the implicit limitation for future deadlines
This commit is contained in:
parent
022d40a8cf
commit
4ac995548a
6 changed files with 320 additions and 29 deletions
|
|
@ -74,6 +74,7 @@ namespace gear {
|
|||
,TIMESTOP ///< correspondingly signal end of some processing
|
||||
,NOTIFY ///< push a message to another Activity
|
||||
,PROBE ///< evaluate a condition and inhibit another target Activity
|
||||
,GATE ///< probe window + count-down; activate next Activity, else re-schedule
|
||||
,TICK ///< internal engine »heart beat« for internal maintenance hook(s)
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -52,7 +52,10 @@
|
|||
|
||||
|
||||
#include "vault/common.hpp"
|
||||
#include "vault/gear/activity.hpp"
|
||||
#include "vault/mem/extent-family.hpp"
|
||||
//#include "lib/symbol.hpp"
|
||||
#include "lib/time/timevalue.hpp"
|
||||
#include "lib/nocopy.hpp"
|
||||
//#include "lib/util.hpp"
|
||||
|
||||
|
|
@ -64,7 +67,54 @@ namespace gear {
|
|||
|
||||
// using util::isnil;
|
||||
// using std::string;
|
||||
using lib::time::Time;
|
||||
|
||||
namespace {// hard-wired parametrisation
|
||||
const size_t EPOCH_SIZ = 100;
|
||||
const size_t ACTIVITIES_PER_FRAME = 10;
|
||||
const size_t INITIAL_FRAMES = 50;
|
||||
const size_t INITIAL_ALLOC = 1 + (INITIAL_FRAMES * ACTIVITIES_PER_FRAME) / EPOCH_SIZ;
|
||||
|
||||
using Allocator = mem::ExtentFamily<Activity, EPOCH_SIZ>;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class Epoch
|
||||
: public Allocator::Extent
|
||||
{
|
||||
|
||||
/// @warning will faked, not constructed
|
||||
Epoch() = delete;
|
||||
|
||||
public:
|
||||
struct EpochGate
|
||||
: Activity
|
||||
{
|
||||
EpochGate()
|
||||
: Activity{GATE}
|
||||
{
|
||||
UNIMPLEMENTED ("initialise allocation usage marker to zero");
|
||||
}
|
||||
// default copyable
|
||||
};
|
||||
|
||||
static Epoch&
|
||||
implantInto (Allocator::Extent& rawStorage)
|
||||
{
|
||||
Epoch& target = static_cast<Epoch&> (rawStorage);
|
||||
new(&target[0]) EpochGate{};
|
||||
return target;
|
||||
}
|
||||
|
||||
EpochGate&
|
||||
gate()
|
||||
{
|
||||
return static_cast<EpochGate&> ((*this)[0]);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Basic (abstracted) view of...
|
||||
|
|
@ -75,11 +125,24 @@ namespace gear {
|
|||
class BlockFlow
|
||||
: util::NonCopyable
|
||||
{
|
||||
Allocator alloc_;
|
||||
|
||||
public:
|
||||
explicit
|
||||
BlockFlow (int woof)
|
||||
BlockFlow()
|
||||
: alloc_{INITIAL_ALLOC}
|
||||
{ }
|
||||
|
||||
Activity&
|
||||
createActivity (Activity::Verb verb, Time deadline)
|
||||
{
|
||||
UNIMPLEMENTED ("place new allocation");
|
||||
}
|
||||
|
||||
void
|
||||
discardBefore (Time deadline)
|
||||
{
|
||||
UNIMPLEMENTED ("traverse oldest Epochs and discard obsoleted");
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -71,32 +71,47 @@ namespace mem {
|
|||
class ExtentFamily
|
||||
: util::NonCopyable
|
||||
{
|
||||
using Storage = std::array<T,siz>;
|
||||
|
||||
public:
|
||||
struct Extent
|
||||
: std::unique_ptr<Storage>
|
||||
: std::array<T,siz>
|
||||
{
|
||||
using Payload = T;
|
||||
};
|
||||
|
||||
private:
|
||||
struct Storage
|
||||
: std::unique_ptr<char[]>
|
||||
{
|
||||
/**
|
||||
* @note default ctor immediately allocates the full storage,
|
||||
* but uses default initialisation rsp. no initialisation
|
||||
* in case the payload type T is a POD
|
||||
* but without initialisation since payload is `char`
|
||||
*/
|
||||
Extent()
|
||||
: std::unique_ptr<Storage>{new Storage}
|
||||
Storage()
|
||||
: unique_ptr{new char[sizeof(Extent)]}
|
||||
{ }
|
||||
|
||||
/** access projected Extent storage type
|
||||
* @warning payload is uninitialised and dtors won't be invoked
|
||||
*/
|
||||
Extent&
|
||||
access()
|
||||
{
|
||||
ENSURE (get() != nullptr);
|
||||
return reinterpret_cast<Extent&> (*get());
|
||||
}
|
||||
};
|
||||
using Extents = std::vector<Extent>;
|
||||
using Extents = std::vector<Storage>;
|
||||
|
||||
|
||||
Extents extents_;
|
||||
|
||||
size_t start_,after_;
|
||||
|
||||
public:
|
||||
explicit
|
||||
ExtentFamily(size_t initialCnt =0)
|
||||
: extents_{initialCnt}
|
||||
, start_{0}
|
||||
, after_{initialCnt}
|
||||
, start_{0} // Extents allocated yet marked unused
|
||||
, after_{0}
|
||||
{ }
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@
|
|||
|
||||
|
||||
#include "lib/test/run.hpp"
|
||||
#include "lib/test/test-helper.hpp"
|
||||
#include "vault/gear/block-flow.hpp"
|
||||
//#include "lib/time/timevalue.hpp"
|
||||
//#include "lib/format-cout.hpp"
|
||||
|
|
@ -36,10 +37,11 @@
|
|||
using test::Test;
|
||||
//using std::move;
|
||||
//using util::isSameObject;
|
||||
using lib::test::randTime;
|
||||
|
||||
|
||||
namespace vault{
|
||||
namespace mem {
|
||||
namespace gear {
|
||||
namespace test {
|
||||
|
||||
// using lib::time::FrameRate;
|
||||
|
|
@ -72,6 +74,13 @@ namespace test {
|
|||
void
|
||||
simpleUsage()
|
||||
{
|
||||
BlockFlow bFlow;
|
||||
Time deadline = randTime();
|
||||
Activity tick = bFlow.createActivity(Activity::TICK, deadline);
|
||||
///////////////////////////////////////////////////////////////////////////////OOO diagnostic function to check allocation
|
||||
|
||||
bFlow.discardBefore (deadline + Time{0,5});
|
||||
///////////////////////////////////////////////////////////////////////////////OOO diagnostic function to check de-allocation
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -99,4 +108,4 @@ namespace test {
|
|||
|
||||
|
||||
|
||||
}}} // namespace vault::mem::test
|
||||
}}} // namespace vault::gear::test
|
||||
|
|
|
|||
|
|
@ -6853,7 +6853,7 @@ At first sight the link between asset and clip-MO is a simple logical relation b
|
|||
|
||||
{{red{Note 1/2015}}} several aspects regarding the relation of clips and single/multichannel media are not yet settled. There is a preliminary implementation in the code base, but it is not sure yet how multichnnel media will actually be modelled. Currently, we tend to treat the channel multiplicity rather as a property of the involved media, i.e we have //one// clip object.</pre>
|
||||
</div>
|
||||
<div title="RenderActivity" creator="Ichthyostega" modifier="Ichthyostega" created="202304140145" modified="202306252308" tags="Rendering spec draft" changecount="4">
|
||||
<div title="RenderActivity" creator="Ichthyostega" modifier="Ichthyostega" created="202304140145" modified="202307042331" tags="Rendering spec draft" changecount="5">
|
||||
<pre>//Render Activities define the execution language of the render engine.//
|
||||
The [[Scheduler]] maintains the ability to perform these Activities, in a time-bound fashion, observing dependency relations; activities allow for notification of completed work, tracking of dependencies, timing measurements, re-scheduling of other activities -- and last but not least the dispatch of actual [[render jobs|RenderJob]]. Activities are what is actually enqueued with priority in the scheduler implementation, they are planned for a »µ-tick slot«, activated once when the activation time is reached, and then forgotten. Each Activity is a //verb//, but can be inhibited by conditions and carry operation object data. Formally, activating an Activity equates to a predication, and the subject of that utterance is »the render process«.
|
||||
|
||||
|
|
@ -6871,6 +6871,8 @@ The [[Scheduler]] maintains the ability to perform these Activities, in a time-b
|
|||
:push a message to another Activity or process record
|
||||
;probe
|
||||
:invoke a closure within engine context; inhibit another target Activity, depending on the result.
|
||||
;gate
|
||||
:probe a launch window [start…deadline[ and check a count-down latch ⟹activate next Activity | else re-schedule @self into the future
|
||||
;tick
|
||||
:internal engine »heart beat« -- invoke internal maintenance hook(s)
|
||||
</pre>
|
||||
|
|
|
|||
|
|
@ -77761,7 +77761,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1684980900581" ID="ID_1090845009" MODIFIED="1684980927235" TEXT="depend">
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1684980900581" ID="ID_1090845009" MODIFIED="1688513151731" TEXT="depend">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
|
|
@ -77772,6 +77772,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
<node CREATED="1684980900583" ID="ID_896772403" MODIFIED="1687733911963" TEXT="timestart">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -77809,7 +77810,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1684980900587" ID="ID_1255388864" MODIFIED="1687734557301" TEXT="probe">
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1684980900587" ID="ID_1255388864" MODIFIED="1688513151732" TEXT="probe">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
|
|
@ -77820,6 +77821,19 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
<node CREATED="1688513156754" ID="ID_993428178" LINK="#ID_1088341634" MODIFIED="1688513607197" TEXT="gate">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
probe a launch window from start to deadline, and additionally check a count-down latch; on success activate the next Activity, else re-schedule @self into the future
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1684980900588" ID="ID_1729066993" MODIFIED="1684980976835" TEXT="tick">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -78244,7 +78258,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
<node CREATED="1687994762046" ID="ID_1088341634" MODIFIED="1687994767082" TEXT="Gate-Check">
|
||||
<node CREATED="1687994769427" ID="ID_490498751" MODIFIED="1687994831595" TEXT="prüft ein countdown-Latch"/>
|
||||
<node CREATED="1687994769427" ID="ID_490498751" MODIFIED="1688513655010" TEXT="prüft countdown-Latch und Start-Zeit"/>
|
||||
<node CREATED="1687994866264" ID="ID_1786817486" MODIFIED="1687994891144" TEXT="falls > 0, re-schedule ⟶ future"/>
|
||||
<node CREATED="1687995197271" ID="ID_1651228511" MODIFIED="1687995814074" TEXT="falls ↷ Deadline ⟶ ��"/>
|
||||
</node>
|
||||
|
|
@ -78289,11 +78303,41 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1688336218233" HGAP="-55" ID="ID_323523273" MODIFIED="1688337255857" TEXT="testgetriebener Aufbau" VSHIFT="34">
|
||||
<linktarget COLOR="#fe3a58" DESTINATION="ID_323523273" ENDARROW="Default" ENDINCLINATION="-167;17;" ID="Arrow_ID_589297136" SOURCE="ID_1968961000" STARTARROW="None" STARTINCLINATION="-139;-149;"/>
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688336601091" ID="ID_1454374119" MODIFIED="1688337246568" TEXT="BlockFlow_test">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688336601091" ID="ID_1454374119" MODIFIED="1688514802412" TEXT="BlockFlow_test">
|
||||
<linktarget COLOR="#eb4070" DESTINATION="ID_1454374119" ENDARROW="Default" ENDINCLINATION="-596;80;" ID="Arrow_ID_208594716" SOURCE="ID_836380061" STARTARROW="None" STARTINCLINATION="-331;-16;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1688336974018" ID="ID_1806920884" MODIFIED="1688337018608" TEXT="»Epoch« based memory layout">
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1688562176925" ID="ID_1158793893" MODIFIED="1688562236828" TEXT="simpleUsage">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1688562183720" ID="ID_112254409" MODIFIED="1688562193713" TEXT="BlockFlow erzeugen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1688562194185" ID="ID_1955464710" MODIFIED="1688562203569" TEXT="eine tick-Activity platzieren">
|
||||
<icon BUILTIN="pencil"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688562204824" ID="ID_101196546" MODIFIED="1688562218495" TEXT="Diagnose: Allokation erfolgte">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1688562219790" ID="ID_1157838911" MODIFIED="1688562224348" TEXT="aufräumen">
|
||||
<icon BUILTIN="pencil"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688562225717" ID="ID_1423239902" MODIFIED="1688562233397" TEXT="Diagnose: Allocation wech">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688514837919" ID="ID_23367137" MODIFIED="1688514850742" TEXT="API-Operationen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1688514860052" ID="ID_1887728481" MODIFIED="1688514863244" TEXT="Action allozieren"/>
|
||||
<node CREATED="1688514904095" ID="ID_819616913" MODIFIED="1688514909523" TEXT="späteste Deadline"/>
|
||||
<node CREATED="1688514944443" ID="ID_341749929" MODIFIED="1688514974588" TEXT="Aufräumen vor Zeit"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688515088451" ID="ID_254117288" MODIFIED="1688515092923" TEXT="Epochen-Operationen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1688515094346" ID="ID_1027706144" MODIFIED="1688515110180" TEXT="Epoche finden oder erstellen"/>
|
||||
<node CREATED="1688515126831" ID="ID_1528998679" MODIFIED="1688515184828" TEXT="Epoche aktiv oder obsolet"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688394889309" ID="ID_1132827905" MODIFIED="1688398856923" TEXT="ExtentFamily_test">
|
||||
<linktarget COLOR="#eb4070" DESTINATION="ID_1132827905" ENDARROW="Default" ENDINCLINATION="-593;73;" ID="Arrow_ID_709934622" SOURCE="ID_504623704" STARTARROW="None" STARTINCLINATION="-214;-18;"/>
|
||||
|
|
@ -78519,14 +78563,14 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1688258639519" ID="ID_253828146" MODIFIED="1688337591520" TEXT="Async-IO dagegen braucht zwingend einen aktiv-Zähler">
|
||||
<node CREATED="1688258639519" ID="ID_253828146" MODIFIED="1688512561410" TEXT="Async-IO dagegen braucht zwingend einen aktiv-Zähler">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
Es handelt sich hierbei um ein <b>grundsätzliches Problem</b>. Es liegt in der Natur von IO, daß eine solche Operation eine unbestimmte Zeit dauern kann; und diese Zeit kann ganz erheblich sein, wenn das IO-Subsystem überlastet wird. Es gibt keine Möglichkeit, eine IO-Operation abzubrechen; vielmehr kommen <i>die Daten irgendwann an, und landen dann in dem dafür vorgesehenen Buffer. </i>Und solange das nicht passiert ist, muß der Buffer und der Callback im Speicher bereitliegen. Ich sehe keine andere Möglichkeit, als für jede Epoche einen Zähler aller schwebenden IO-Operationen mitzuführen. Mithilfe der »post«, »notify« und »guard«-Activities ließe sich das jedoch single-threaded verwirklichen — Synchronisations-Effekte treten daher nur für Threads, die grade eine IO-Operation abgeschlossen haben, sowie den Thread, der das GroomingToken hält
|
||||
Es handelt sich hierbei um ein <b>grundsätzliches Problem</b>. Es liegt in der Natur von IO, daß eine solche Operation eine unbestimmte Zeit dauern kann; und diese Zeit kann ganz erheblich sein, wenn das IO-Subsystem überlastet wird. Es gibt keine Möglichkeit, eine IO-Operation abzubrechen; vielmehr kommen <i>die Daten irgendwann an, und landen dann in dem dafür vorgesehenen Buffer. </i>Und solange das nicht passiert ist, muß der Buffer und der Callback im Speicher bereitliegen. Ich sehe keine andere Möglichkeit, als für jede Epoche einen Zähler aller schwebenden IO-Operationen mitzuführen. Mithilfe der »post«, »notify« und »gate«-Activities ließe sich das jedoch single-threaded verwirklichen — Synchronisations-Effekte treten daher nur für Threads, die grade eine IO-Operation abgeschlossen haben, sowie den Thread, der das GroomingToken hält
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
|
|
@ -78590,7 +78634,24 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1688435528483" ID="ID_8576020" MODIFIED="1688435554882" TEXT="Entscheidung: es wird ein Payload-Typ für den Inhalt der Extents festgelegt">
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1688432504244" ID="ID_1241185228" MODIFIED="1688434715080" TEXT="Extent (Storage)">
|
||||
<node COLOR="#338800" CREATED="1688556402446" ID="ID_811991749" MODIFIED="1688556460629" TEXT="Extent (Typ-Definition für den client)">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1688556417133" ID="ID_619844510" MODIFIED="1688556419712" TEXT="ein array<T,siz>"/>
|
||||
<node CREATED="1688556421587" ID="ID_1207535788" MODIFIED="1688556445023">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
nested Typedef <font face="Monospaced" color="#2727b8">Payload</font>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1688556449759" ID="ID_389613064" MODIFIED="1688556458098" TEXT="rein virtuell (per cast erzeugt)"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1688432504244" ID="ID_1241185228" MODIFIED="1688556470257" TEXT="Storage (privat)">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688432516234" ID="ID_615463720" MODIFIED="1688432527931" TEXT="Anfroderung: keine Initialisierung">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
|
|
@ -78604,29 +78665,32 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node CREATED="1688432677832" ID="ID_409669482" MODIFIED="1688432698306" TEXT="Syntax: kein Initialiser, und ein impliziter default-ctor"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1688437935976" ID="ID_518652809" MODIFIED="1688438261107" TEXT="Entscheidung: vom Payload-Typ abhängig machen">
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1688437935976" ID="ID_518652809" MODIFIED="1688556367223" TEXT="Entscheidung: forced-cast von char[]">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
das heißt: es findet zwar eine default-Initialisierung statt, aber für einen Objekt-Typ bedeutet das <i>value-Initialisierung der Member.</i> Nur falls der Payload-Typ ein POD ist, findet keine Initialisierung statt — und ich hoffe, daß der Optimizer das checkt
|
||||
das heißt: es findet zwar eine default-Initialisierung statt, aber für einen Objekt-Typ mit implizitem default-ctor bedeutet das <i>default-Initialisierung der Member.</i> Nach meinem Verständnis hat std::array einen impliziten default-ctor und als einziges Member ein Array, und dafür wiederum erfolgt dann <i>default-Initialisierung jedes einzelnen Elements. Und da das Element ein base-value (char) ist, erfolgt überhaupt keine Initialisierung.</i>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<linktarget COLOR="#b85283" DESTINATION="ID_518652809" ENDARROW="Default" ENDINCLINATION="587;31;" ID="Arrow_ID_463215029" SOURCE="ID_1531653683" STARTARROW="None" STARTINCLINATION="897;-29;"/>
|
||||
<linktarget COLOR="#b85283" DESTINATION="ID_518652809" ENDARROW="Default" ENDINCLINATION="594;42;" ID="Arrow_ID_463215029" SOURCE="ID_1531653683" STARTARROW="None" STARTINCLINATION="897;-29;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1688432712542" ID="ID_849183361" MODIFIED="1688435612692" TEXT="Basis std::unique_ptr<array<T,siz>>">
|
||||
<node CREATED="1688432712542" ID="ID_849183361" MODIFIED="1688556395243" TEXT="Basis std::unique_ptr<char[]>">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1688433893319" ID="ID_666220506" MODIFIED="1688434720661" TEXT="default-ctor macht sofort die Allokation">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1688556494841" ID="ID_293642055" MODIFIED="1688556513015" TEXT="access() ⟶ cast auf Extent">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1688432864248" ID="ID_1390525681" MODIFIED="1688435636832" TEXT="Extents gehalten als vector<unique_ptr<...>>">
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1688432864248" ID="ID_1390525681" MODIFIED="1688556491574" TEXT="Extents gehalten als vector<Storage> (also uniqe_ptr)">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -78634,6 +78698,25 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1688437541022" ID="ID_1493417420" MODIFIED="1688437566889" TEXT="kann man überhaupt iterieren ohne einen TransformIterator zu verwenden?">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1688509701330" ID="ID_1512622255" MODIFIED="1688509710564" TEXT="ja: ganz banal">
|
||||
<icon BUILTIN="ksmiletris"/>
|
||||
</node>
|
||||
<node CREATED="1688509711550" ID="ID_868274901" MODIFIED="1688509754176" TEXT="mit eine IterAdapter">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
genau für sowas war der gedacht ☻
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1688509796132" ID="ID_361634809" MODIFIED="1688509960392" TEXT="fragt sich bloß: wird überhaupt ein Iterator gebraucht?">
|
||||
<arrowlink COLOR="#7e3acf" DESTINATION="ID_836380061" ENDARROW="Default" ENDINCLINATION="47;-174;" ID="Arrow_ID_166794449" STARTARROW="None" STARTINCLINATION="-280;14;"/>
|
||||
<icon BUILTIN="hourglass"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688398893220" ID="ID_675575195" MODIFIED="1688398901316" TEXT="belegen / freigeben">
|
||||
|
|
@ -78653,6 +78736,124 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688509829145" HGAP="36" ID="ID_836380061" MODIFIED="1688514802412" TEXT="benötigte high-Level-Operationen identifizieren">
|
||||
<arrowlink COLOR="#eb4070" DESTINATION="ID_1454374119" ENDARROW="Default" ENDINCLINATION="-596;80;" ID="Arrow_ID_208594716" STARTARROW="None" STARTINCLINATION="-331;-16;"/>
|
||||
<linktarget COLOR="#7e3acf" DESTINATION="ID_836380061" ENDARROW="Default" ENDINCLINATION="47;-174;" ID="Arrow_ID_166794449" SOURCE="ID_361634809" STARTARROW="None" STARTINCLINATION="-280;14;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688510160724" ID="ID_915708936" MODIFIED="1688510165585" TEXT="Action allozieren">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1688510169558" ID="ID_435186748" MODIFIED="1688510256314" TEXT="werden grundsätzlich einzeln behandelt">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
...selbst wenn es Zusammenhänge gibt — notfalls wird die Aktion in die nächst nachfolgende Epoche geschoben (welche stets länger lebt)
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688510299817" ID="ID_1750265058" MODIFIED="1688510436943" TEXT="benötigt: Deadline-Info"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688510405600" ID="ID_974318886" MODIFIED="1688510436943" TEXT="⟼ liefert: Slot für Placement-New">
|
||||
<node CREATED="1688511764027" ID="ID_494303010" MODIFIED="1688511780582" TEXT="den frühest möglichen der diese Deadline unterstützt"/>
|
||||
<node CREATED="1688511807398" ID="ID_160731598" MODIFIED="1688511817680" TEXT="erzeugt implizit alle Epochen dazwischen"/>
|
||||
<node CREATED="1688511820828" ID="ID_1443383285" MODIFIED="1688511836189" TEXT="kann scheitern wenn zu weit in der Zukunft ⟼ nullptr"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1688559559278" ID="ID_27532065" MODIFIED="1688560429832" TEXT="unklar: wenn zu weit in der Zukunft">
|
||||
<arrowlink COLOR="#fd1a6e" DESTINATION="ID_1315709817" ENDARROW="Default" ENDINCLINATION="21;-31;" ID="Arrow_ID_1483237280" STARTARROW="None" STARTINCLINATION="-202;16;"/>
|
||||
<icon BUILTIN="flag-pink"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688560442660" ID="ID_143148462" MODIFIED="1688560448084" TEXT="Activity placement-New">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688511891911" ID="ID_604517829" MODIFIED="1688511905225" TEXT="späteste derzeit unterstützte Deadline">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688512195210" ID="ID_455793213" MODIFIED="1688512207091" TEXT="Aufräumen vor gegebener Zeit">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1688512231159" ID="ID_960172052" MODIFIED="1688512246837" TEXT="gegeben: eine aktuell behandelte (Start)Zeit"/>
|
||||
<node CREATED="1688512252777" ID="ID_831223782" MODIFIED="1688512279796">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
jede Deadline <i>vor</i> dieser Zeit ist damit <i>grundsätzlich obsolet</i>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1688512304121" ID="ID_304428860" MODIFIED="1688513681351" TEXT="die Gates aller Epochen durchprüfen">
|
||||
<node CREATED="1688513728333" ID="ID_276339587" MODIFIED="1688513740995" TEXT="Gate sitzt im ersten Slot einer Epoche"/>
|
||||
<node CREATED="1688513742667" ID="ID_849223562" LINK="#ID_1088341634" MODIFIED="1688513840525" TEXT="Gate dient in diesem Fall nur als komplexe Bedingung"/>
|
||||
</node>
|
||||
<node CREATED="1688513876713" ID="ID_1973420609" MODIFIED="1688513883828" TEXT="obsolete Epochen verwerfen"/>
|
||||
<node CREATED="1688513885200" ID="ID_47111804" MODIFIED="1688513903849" TEXT="auf der ersten nicht-obsoleten Epoche stehen bleiben"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688515962746" HGAP="25" ID="ID_468510160" MODIFIED="1688559368790" TEXT="Strukturen" VSHIFT="4">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688515974697" ID="ID_1054833524" MODIFIED="1688516009303" TEXT="hält eine ExtentFamily<Action,siz>">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688555107931" ID="ID_285024973" MODIFIED="1688555140175" TEXT="Datentyp: Epoch">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688555141913" ID="ID_406773800" MODIFIED="1688555169035" TEXT="als Subtyp der Extent-Storage">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688516187452" ID="ID_843039397" MODIFIED="1688516195292" TEXT="Zusatz-Infos zu verwalten">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688516199288" ID="ID_1824919687" MODIFIED="1688516212258" TEXT="Epochen-Deadline">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1688516220648" ID="ID_1169377280" MODIFIED="1688516237353" TEXT="steht in einem Gate im 1.Slot"/>
|
||||
<node CREATED="1688553471328" ID="ID_262514506" MODIFIED="1688553490999" TEXT="dafür eigenen Sub-Typ anliegen: EpochGate"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688554963598" ID="ID_708490850" MODIFIED="1688554971708" TEXT="Füllstand der Epoche">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1688554972581" ID="ID_278561305" MODIFIED="1688554979689" TEXT="wird auch im EpochGate abgelegt"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1688555006558" ID="ID_11354677" MODIFIED="1688555057586" TEXT="Beschluß: KISS">
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1688555021190" ID="ID_1624305559" MODIFIED="1688555026714" TEXT="keine logarithmische Suche"/>
|
||||
<node CREATED="1688555027213" ID="ID_1516151909" MODIFIED="1688555031529" TEXT="kein separater Index"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688555032021" ID="ID_1157610750" MODIFIED="1688555050479" TEXT="die EpochGate als LInked-List verwenden">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688559356693" HGAP="9" ID="ID_1823374976" MODIFIED="1688559375797" TEXT="Grenzfälle" VSHIFT="7">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1688559379394" ID="ID_1315709817" MODIFIED="1688560429832" TEXT="zu weit in der Zukunft">
|
||||
<linktarget COLOR="#fd1a6e" DESTINATION="ID_1315709817" ENDARROW="Default" ENDINCLINATION="21;-31;" ID="Arrow_ID_1483237280" SOURCE="ID_27532065" STARTARROW="None" STARTINCLINATION="-202;16;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1688559400839" ID="ID_980233005" MODIFIED="1688559420337" TEXT="problematisch: es kann nicht wirklich alloziert werden"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1688559421309" ID="ID_498818717" MODIFIED="1688559505993">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p style="text-align: center">
|
||||
zwar wird ein POST geplant,
|
||||
</p>
|
||||
<p style="text-align: center">
|
||||
aber die angehängten Activities werden
|
||||
</p>
|
||||
<p style="text-align: center">
|
||||
dafür später kopiert (Addresse ändert sich)
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="clanbomber"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681347244544" ID="ID_444443795" MODIFIED="1681347486789" TEXT="Basis: Operational Control">
|
||||
|
|
@ -79412,7 +79613,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1688438184671" ID="ID_1971690047" MODIFIED="1688438194457" TEXT="Prüfen / messen">
|
||||
<icon BUILTIN="bell"/>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1688438197846" ID="ID_1531653683" MODIFIED="1688438261107" TEXT="findet für POD tatsächlich keine value-Initialisierung der Storage statt?">
|
||||
<arrowlink COLOR="#b85283" DESTINATION="ID_518652809" ENDARROW="Default" ENDINCLINATION="587;31;" ID="Arrow_ID_463215029" STARTARROW="None" STARTINCLINATION="897;-29;"/>
|
||||
<arrowlink COLOR="#b85283" DESTINATION="ID_518652809" ENDARROW="Default" ENDINCLINATION="594;42;" ID="Arrow_ID_463215029" STARTARROW="None" STARTINCLINATION="897;-29;"/>
|
||||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
|
|||
Loading…
Reference in a new issue