Block-Flow: consider data storage for render activities

- decision to favour small memory footprint
- rather use several Activity records to express invocation
- design Activity record as »POD with constructor«
- conceptually, Activity is polymorphic, but on implementation
  level, this is "folded down" into union-based data storage,
  layering accessor functions on top
This commit is contained in:
Fischlurch 2023-07-06 16:35:42 +02:00
parent 4ac995548a
commit f34ecafa1a
5 changed files with 416 additions and 19 deletions

View file

@ -47,6 +47,8 @@
#include "vault/common.hpp"
#include "vault/gear/job.h"
#include "lib/time/timevalue.hpp"
//#include "lib/symbol.hpp"
//#include "lib/util.hpp"
@ -56,33 +58,130 @@
namespace vault{
namespace gear {
using lib::time::TimeValue;
using lib::time::TimeVar;
// using util::isnil;
// using std::string;
/**
* Wrapper to hold Time values in trivially constructible union.
* By an unfortunate design decision, lib::time::Time values are
* non-copyable, which prevents placing them into POD data
*
* @todo 7/2023 this decision should be reverted //////////////////////////////////////////////////////////TICKET #1261 : reconsider (im)mutability of time entities
*/
class Instant
{
int64_t microTick_;
public:
Instant() =default; // @suppress("Class members should be properly initialized")
Instant(TimeValue time)
: microTick_{_raw(time)}
{ }
operator TimeVar() const
{
return TimeValue{microTick_};
}
// default copy acceptable
};
/**
* Term to describe an Activity,
* to happen within the Scheduler's control flow.
* @note Activity is a »POD with constructor«
* - trivially *destructible*
* - trivially *copyable*
* - standard layout
*/
class Activity
{
public:
enum Verb {INVOKE ///< dispatches a JobFunctor into a worker thread
,DEPEND ///< verify a given number of dependencies has been satisfied
/** All possible kinds of activities */
enum Verb {INVOKE ///< dispatch a JobFunctor into a worker thread
,TIMESTART ///< signal start of some processing (for timing measurement)
,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
,FEED ///< supply additional payload data for a preceding Activity
,POST ///< post a message providing a chain of further time-bound Activities
,TICK ///< internal engine »heart beat« for internal maintenance hook(s)
};
const Verb verb_;
/**
* Activities are organised into _chains_
* to represent _relations_ based on verbs.
*/
Activity* next;
/* === Activity Data Arguments === */
/** Payload data to provide */
struct Feed
{
size_t one;
size_t two;
};
/** Timing observation to propagate */
struct Timing
{
Instant instant;
size_t quality;
};
/** Access gate condition to evaluate */
struct Condition
{
int rest; ///< alive while rest > 0
Instant dead; ///< alive while time < dead
};
/** Time window to define for activation */
struct TimeWindow
{
Instant life;
Instant dead;
};
/** External work functor to activate */
struct Invocation
{
JobFunctor* task;
Instant time;
};
/** Notification towards another Activity */
struct Notification
{
Activity* target;
size_t report;
};
/** Storage of Argument data dependent on Activity::verb_ */
union ArgumentData
{
Feed feed;
Timing timing;
Condition condition;
TimeWindow timeWindow;
Invocation invocation;
Notification notification;
};
ArgumentData data_;
explicit
Activity (Verb verb)
: verb_{verb}
, next{nullptr}
{ }
// using default copy/assignment

View file

@ -62,8 +62,8 @@ namespace gear {
/**
* Scheduler Layer-2 : invocation.
*
* @see SomeSystem
* @see NA_test
* @see Scheduler
* @see SchedulerInvocation_test
*/
class SchedulerInvocation
: util::NonCopyable

View file

@ -39,7 +39,7 @@ using test::Test;
namespace vault{
namespace mem {
namespace gear {
namespace test {
// using lib::time::FrameRate;
@ -72,6 +72,10 @@ namespace test {
void
simpleUsage()
{
// Activities are »POD with constructor«
Activity tick(Activity::TICK);
CHECK (tick.verb_ == Activity::TICK);
CHECK (tick.next == nullptr);
}
@ -99,4 +103,4 @@ namespace test {
}}} // namespace vault::mem::test
}}} // namespace vault::gear::test

View file

@ -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="202307042331" tags="Rendering spec draft" changecount="5">
<div title="RenderActivity" creator="Ichthyostega" modifier="Ichthyostega" created="202304140145" modified="202307061410" tags="Rendering spec draft" changecount="9">
<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«.
@ -6861,21 +6861,28 @@ The [[Scheduler]] maintains the ability to perform these Activities, in a time-b
;invoke
:dispatches a JobFunctor into an appropriate worker thread, based on the job definition's execution spec
:no further dependency checks; Activities attached to the job are re-dispatched after the job function's completion
;depend
:verify a given number of dependencies has been satisfied, otherwise inhibit the indicated target Activity
;timestart
:signal start of some processing -- for the purpose of timing measurement, but also to detect crashed tasks
;timestop
:correspondingly signal end of some processing
;notify
: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
;feed
:supply additional payload data for a preceding Activity
;post
:post a message providing a chain of further time-bound Activities
;tick
:internal engine »heart beat« -- invoke internal maintenance hook(s)
</pre>
!Data organisation
Activities are processed within a //performance critical part of the application// -- and are thus subject to [[Scheduler memory management|SchedulerMemory]].
While Activities are logically polymorphic, they are implemented as »POD with constructor« -- meaning that they are classes with [[standard layout|https://en.cppreference.com/w/cpp/named_req/StandardLayoutType]] and at least a [[trivial destructor|https://en.cppreference.com/w/cpp/language/destructor#Trivial_destructor]], allowing to just place them into a memory block and forget about them (without need to call any non-trivial functions). The ''Argument data'' depends on the //actual verb// and is thus placed into a union, with access functions to ensure proper usage of the data fields (while it is always possible to access the data field directly). Since Activities are allocated a lot, small memory footprint is favoured, and thus some significant information -- notably the //time window// for activation of each Activity -- is defined //contextually.//
Activities are organised into ''chains'', allowing to express relations based on their respective verbs.
There are //standard usage patters,// hard coded into the {{{ActivityLang}}} and expected by the {{{SchedulerCommutator}}}, to express all relevant patterns of operational logic necessary to represent time-bound and dependent playback and render tasks.
</pre>
</div>
<div title="RenderDrive" creator="Ichthyostega" modifier="Ichthyostega" created="202306122212" tags="spec Player draft" changecount="1">
<pre>//the active core of each [[calculation stream|CalcStream]]//

View file

@ -74659,6 +74659,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node COLOR="#435e98" CREATED="1685986766172" HGAP="28" ID="ID_491497133" MODIFIED="1686498858490" TEXT="Nein! besser direkt als Pointer durchschieben" VSHIFT="-5">
<arrowlink COLOR="#3e3f9b" DESTINATION="ID_666925478" ENDARROW="Default" ENDINCLINATION="426;-58;" ID="Arrow_ID_1306644139" STARTARROW="None" STARTINCLINATION="311;19;"/>
<arrowlink COLOR="#3e3f9b" DESTINATION="ID_1078372838" ENDARROW="Default" ENDINCLINATION="426;-58;" ID="Arrow_ID_1700206774" STARTARROW="None" STARTINCLINATION="311;19;"/>
</node>
</node>
<node COLOR="#338800" CREATED="1685987502422" FOLDED="true" ID="ID_1001471344" MODIFIED="1686581362539" TEXT="Segmentation-Spec erweitern">
@ -76539,7 +76540,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685802605380" ID="ID_1316148159" MODIFIED="1685802617500" TEXT="aber schon mal die ben&#xf6;tigten Daten analysieren">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685802625130" ID="ID_148642807" MODIFIED="1685802642496" TEXT="Kernproblem: welche Daten f&#xfc;r den Einzelfall">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685802625130" ID="ID_148642807" MODIFIED="1688601316599" TEXT="Kernproblem: welche Daten f&#xfc;r den Einzelfall">
<arrowlink COLOR="#fe3665" DESTINATION="ID_1442656492" ENDARROW="Default" ENDINCLINATION="-1161;156;" ID="Arrow_ID_1073485120" STARTARROW="None" STARTINCLINATION="-478;30;"/>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685802655901" ID="ID_554344836" MODIFIED="1685802665981" TEXT="nomineller Zeitpunkt">
<icon BUILTIN="flag-yellow"/>
@ -77462,6 +77464,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685987007275" ID="ID_953619048" MODIFIED="1685987465547" TEXT="daher per Pointer auf den Calc-Stream verweisen">
<arrowlink COLOR="#4b3ea5" DESTINATION="ID_87044302" ENDARROW="Default" ENDINCLINATION="248;-35;" ID="Arrow_ID_594271482" STARTARROW="None" STARTINCLINATION="669;36;"/>
<arrowlink COLOR="#4b3ea5" DESTINATION="ID_1078372838" ENDARROW="Default" ENDINCLINATION="416;-39;" ID="Arrow_ID_209843242" STARTARROW="None" STARTINCLINATION="669;36;"/>
<icon BUILTIN="flag-yellow"/>
</node>
<node COLOR="#435e98" CREATED="1687217341462" ID="ID_877655155" MODIFIED="1687218491894" TEXT="Problem: API-Design und Builder-Operationen">
@ -77644,7 +77647,38 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
<node CREATED="1681086385917" ID="ID_1193213661" MODIFIED="1681086416077" TEXT="leichtgewichtig, kopierbar, stateful, Scheduler-impl-owned"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681425144493" ID="ID_1404753000" MODIFIED="1681425214239" TEXT="Support f&#xfc;r engine::Activity">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685802625130" ID="ID_1442656492" MODIFIED="1688601316599" TEXT="Job-Daten-Record">
<linktarget COLOR="#fe3665" DESTINATION="ID_1442656492" ENDARROW="Default" ENDINCLINATION="-1161;156;" ID="Arrow_ID_1073485120" SOURCE="ID_148642807" STARTARROW="None" STARTINCLINATION="-478;30;"/>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685802711785" ID="ID_97201971" MODIFIED="1688601092211" TEXT="JobFunctor">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685802655901" ID="ID_570451449" MODIFIED="1685802665981" TEXT="nomineller Zeitpunkt">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685802759365" ID="ID_1501130954" MODIFIED="1685802764857" TEXT="InstanceID">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685986803653" ID="ID_1078372838" MODIFIED="1688601155076" TEXT="Functor-Argumente">
<richcontent TYPE="NOTE"><html>
<head></head>
<body>
<p>
werden vom jeweiligen Funktor flexibel interpretiert (ggfs auch als
void*); der wichtigste Funktor ist der f&#252;r das eigentliche Rendern &#55358;&#56370;
dieser speichert hier die ExitNode und das DataSink
</p>
</body>
</html></richcontent>
<linktarget COLOR="#3e3f9b" DESTINATION="ID_1078372838" ENDARROW="Default" ENDINCLINATION="426;-58;" ID="Arrow_ID_1700206774" SOURCE="ID_491497133" STARTARROW="None" STARTINCLINATION="311;19;"/>
<linktarget COLOR="#4b3ea5" DESTINATION="ID_1078372838" ENDARROW="Default" ENDINCLINATION="416;-39;" ID="Arrow_ID_209843242" SOURCE="ID_953619048" STARTARROW="None" STARTINCLINATION="669;36;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1688600921177" ID="ID_1002134574" MODIFIED="1688600925684" TEXT="size_t strcArg"/>
<node CREATED="1688600926480" ID="ID_57908906" MODIFIED="1688600930635" TEXT="size_t sinkArg"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681425144493" ID="ID_1404753000" MODIFIED="1688601418353" TEXT="einbetten in engine::Activity">
<linktarget COLOR="#dd7f91" DESTINATION="ID_1404753000" ENDARROW="Default" ENDINCLINATION="1062;104;" ID="Arrow_ID_153253143" SOURCE="ID_1605268671" STARTARROW="None" STARTINCLINATION="779;-154;"/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
@ -77835,6 +77869,31 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</body>
</html></richcontent>
</node>
<node CREATED="1688644877010" ID="ID_112915141" MODIFIED="1688644891972" TEXT="feed">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
supply additional payload data for a preceding Activity
</p>
</body>
</html></richcontent>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1688603910393" ID="ID_1991714442" MODIFIED="1688644872705" TEXT="post">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
post a message providing a chain of further time-bound Activities
</p>
</body>
</html></richcontent>
<icon BUILTIN="help"/>
</node>
<node CREATED="1684980900588" ID="ID_1729066993" MODIFIED="1684980976835" TEXT="tick">
<richcontent TYPE="NOTE"><html>
<head>
@ -77853,7 +77912,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node CREATED="1684980982361" ID="ID_1863198468" MODIFIED="1684980987321" TEXT="Themen">
<node CREATED="1684980991406" ID="ID_1812192430" MODIFIED="1684981025601" TEXT="Timings nachf&#xfc;hren">
<arrowlink COLOR="#705783" DESTINATION="ID_1565158605" ENDARROW="Default" ENDINCLINATION="223;-15;" ID="Arrow_ID_516157232" STARTARROW="None" STARTINCLINATION="338;47;"/>
<arrowlink COLOR="#705783" DESTINATION="ID_1565158605" ENDARROW="Default" ENDINCLINATION="223;-15;" ID="Arrow_ID_516157232" STARTARROW="None" STARTINCLINATION="372;51;"/>
</node>
</node>
</node>
@ -77878,6 +77937,112 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="info"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688599645418" ID="ID_290814679" MODIFIED="1688599769276" TEXT="Repr&#xe4;sentation Argument-Daten">
<linktarget COLOR="#fd476e" DESTINATION="ID_290814679" ENDARROW="Default" ENDINCLINATION="-1095;85;" ID="Arrow_ID_1644257444" SOURCE="ID_1520469413" STARTARROW="None" STARTINCLINATION="676;32;"/>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1688646827878" ID="ID_683405596" MODIFIED="1688648419999" TEXT="Activity soll ein POD-artiger Daten-Record sein">
<arrowlink COLOR="#534e96" DESTINATION="ID_464419365" ENDARROW="Default" ENDINCLINATION="-729;124;" ID="Arrow_ID_1095556572" STARTARROW="None" STARTINCLINATION="-1826;106;"/>
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/>
<node CREATED="1688648423563" ID="ID_1822457812" MODIFIED="1688648431846" TEXT="tats&#xe4;chlich ist es etwas komplexer">
<icon BUILTIN="ksmiletris"/>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1688648433016" ID="ID_12211665" MODIFIED="1688648464015" TEXT="Activity mu&#xdf; trivial destruierbar sein">
<icon BUILTIN="yes"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1688648487864" ID="ID_429483541" MODIFIED="1688648500159" TEXT="au&#xdf;erdem sollte es standard-Layout sein">
<icon BUILTIN="yes"/>
</node>
<node BACKGROUND_COLOR="#c6c8db" COLOR="#435e98" CREATED="1688648552904" HGAP="18" ID="ID_1142231252" MODIFIED="1688648658935" STYLE="bubble" TEXT="&#x27f9; &#xbb;POD mit Konstruktor&#xab;" VSHIFT="12">
<edge COLOR="#5b26b8"/>
<font NAME="SansSerif" SIZE="16"/>
</node>
</node>
<node CREATED="1688599871372" ID="ID_280220141" MODIFIED="1688599874528" TEXT="ben&#xf6;tigt">
<node CREATED="1688599875731" ID="ID_1691021100" MODIFIED="1688599878178" TEXT="stets">
<node CREATED="1688599879355" ID="ID_937537110" MODIFIED="1688599893566" TEXT="next-Pointer"/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1688599920366" ID="ID_519528587" MODIFIED="1688602346298">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
<font face="Monospaced">startTime </font>
</p>
<p>
<font face="Monospaced">deadline</font>
</p>
</body>
</html></richcontent>
<icon BUILTIN="help"/>
<node CREATED="1688602901632" HGAP="42" ID="ID_1108696445" MODIFIED="1688602935788" TEXT="k&#xf6;nnte man kontextuell bereitstellen" VSHIFT="-5">
<icon BUILTIN="idea"/>
</node>
</node>
</node>
<node CREATED="1688599961752" ID="ID_1476155017" MODIFIED="1688599964244" TEXT="invoke">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688599981240" ID="ID_1605268671" MODIFIED="1688601467122" TEXT="Job-Daten">
<arrowlink COLOR="#dd7f91" DESTINATION="ID_1404753000" ENDARROW="Default" ENDINCLINATION="1062;104;" ID="Arrow_ID_153253143" STARTARROW="None" STARTINCLINATION="779;-154;"/>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688601470768" HGAP="39" ID="ID_973557978" MODIFIED="1688602978000" TEXT="leider ziemlich viel Daten" VSHIFT="17">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1688601569851" ID="ID_567583834" MODIFIED="1688601591196" TEXT="Ptr + Time + LUID + 2*size_t"/>
<node CREATED="1688601604198" ID="ID_1026682492" MODIFIED="1688601662698" TEXT="&#x27f9; 3 &#xbb;slots&#xab; + 3*64bit"/>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1688602957054" HGAP="59" ID="ID_1822229878" MODIFIED="1688602975417" TEXT="in mehrere Pakete aufteilen">
<icon BUILTIN="flag-pink"/>
</node>
</node>
</node>
<node CREATED="1688601865955" ID="ID_1274992770" MODIFIED="1688601871022" TEXT="timestart|stop">
<node CREATED="1688601873323" ID="ID_1142615782" MODIFIED="1688601877397" TEXT="Time"/>
<node CREATED="1688602420417" ID="ID_186416345" MODIFIED="1688602445794" TEXT="observable-ID"/>
</node>
<node CREATED="1688601937242" ID="ID_1645818816" MODIFIED="1688601939806" TEXT="notify">
<node CREATED="1688601944873" ID="ID_1656108981" MODIFIED="1688601966553" TEXT="ptr &#x27f6; target-Activity"/>
</node>
<node CREATED="1688601984418" ID="ID_1068955148" MODIFIED="1688601986335" TEXT="gate">
<node CREATED="1688601991523" ID="ID_1519691813" MODIFIED="1688602001213" TEXT="deadline"/>
<node CREATED="1688602002513" ID="ID_1687808112" MODIFIED="1688602012044" TEXT="counter"/>
</node>
<node CREATED="1688603899403" ID="ID_1940894045" MODIFIED="1688603926576" TEXT="post">
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1688604014499" ID="ID_1612409519" MODIFIED="1688604027981" TEXT="unklar ob notwendig">
<icon BUILTIN="help"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688604029521" ID="ID_1078704694" MODIFIED="1688604053304" TEXT="k&#xf6;nnte kontextuelle Info transportieren">
<icon BUILTIN="idea"/>
</node>
</node>
<node CREATED="1688602042892" ID="ID_603067058" MODIFIED="1688602044951" TEXT="tick"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688642849216" ID="ID_1226380123" MODIFIED="1688642857095" TEXT="Entscheidung">
<icon BUILTIN="yes"/>
<node CREATED="1688642858447" ID="ID_186671270" MODIFIED="1688642868113" TEXT="kleine Datenbl&#xf6;cke bevorzugt">
<node CREATED="1688643081577" ID="ID_1868543513" MODIFIED="1688643112138" TEXT="der Hebel f&#xfc;r unbenutzte Felder ist gro&#xdf;">
<icon BUILTIN="messagebox_warning"/>
</node>
<node CREATED="1688643122564" ID="ID_1945639655" MODIFIED="1688643136109" TEXT="das wiegt eine zus&#xe4;tzliche Activity schnell auf">
<icon BUILTIN="idea"/>
</node>
</node>
<node CREATED="1688642872398" ID="ID_1043417945" MODIFIED="1688642947743" TEXT="Job-Argumente in eine Kette von Datenbl&#xf6;cken legen"/>
<node CREATED="1688642986094" ID="ID_1753772146" MODIFIED="1688643010373" TEXT="Zeitfenster-Angaben nach M&#xf6;glichkeit kontextuell bereitstellen"/>
<node CREATED="1688643151608" ID="ID_1226022994" MODIFIED="1688643202164">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
<u>Richtwert</u>: <font color="#016258">2 * 64bit + next-Ptr</font>
</p>
</body>
</html></richcontent>
<icon BUILTIN="info"/>
</node>
</node>
</node>
</node>
</node>
</node>
@ -78295,7 +78460,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1684980732965" ID="ID_1914429002" MODIFIED="1684980742528" TEXT="Thema: Timing-Updates">
<icon BUILTIN="hourglass"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1684980744406" ID="ID_1565158605" LINK="https://issues.lumiera.org/ticket/1302" MODIFIED="1684981025601" TEXT="#1302 maintain consistent job timings">
<linktarget COLOR="#705783" DESTINATION="ID_1565158605" ENDARROW="Default" ENDINCLINATION="223;-15;" ID="Arrow_ID_516157232" SOURCE="ID_1812192430" STARTARROW="None" STARTINCLINATION="338;47;"/>
<linktarget COLOR="#705783" DESTINATION="ID_1565158605" ENDARROW="Default" ENDINCLINATION="223;-15;" ID="Arrow_ID_516157232" SOURCE="ID_1812192430" STARTARROW="None" STARTINCLINATION="372;51;"/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
@ -78701,7 +78866,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<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">
<node CREATED="1688509711550" ID="ID_868274901" MODIFIED="1688509754176" TEXT="mit einem IterAdapter">
<richcontent TYPE="NOTE"><html>
<head>
@ -78767,6 +78932,13 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688560442660" ID="ID_143148462" MODIFIED="1688560448084" TEXT="Activity placement-New">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1688599586802" ID="ID_13764637" MODIFIED="1688599611052" TEXT="wie &#xfc;bergibt man hier flexible Argumente (abh&#xe4;ngig vom Verb)?">
<icon BUILTIN="help"/>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1688599613103" ID="ID_1520469413" MODIFIED="1688599769276" TEXT="was mu&#xdf; &#xfc;berhaupt in jeder Activity gespeichert werden?">
<arrowlink COLOR="#fd476e" DESTINATION="ID_290814679" ENDARROW="Default" ENDINCLINATION="-1095;85;" ID="Arrow_ID_1644257444" STARTARROW="None" STARTINCLINATION="676;32;"/>
<icon BUILTIN="help"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688511891911" ID="ID_604517829" MODIFIED="1688511905225" TEXT="sp&#xe4;teste derzeit unterst&#xfc;tzte Deadline">
@ -84010,6 +84182,121 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
<node CREATED="1482365415326" HGAP="71" ID="ID_886002365" MODIFIED="1557498707240" TEXT="Standard C++" VSHIFT="-25">
<node CREATED="1688646174430" ID="ID_1246578113" MODIFIED="1688646186652" TEXT="base language knowledge">
<icon BUILTIN="info"/>
<node CREATED="1688646188508" ID="ID_464419365" MODIFIED="1688648419999" TEXT="POD and unions">
<linktarget COLOR="#534e96" DESTINATION="ID_464419365" ENDARROW="Default" ENDINCLINATION="-729;124;" ID="Arrow_ID_1095556572" SOURCE="ID_683405596" STARTARROW="None" STARTINCLINATION="-1826;106;"/>
<node CREATED="1688646230670" ID="ID_1200807820" MODIFIED="1688646259534" TEXT="POD &#x27fa; &#x201e;no compiler magic happens&#x201c;">
<node CREATED="1688646260810" ID="ID_1731163706" LINK="https://stackoverflow.com/a/146589" MODIFIED="1688646437208" TEXT="basic built-in types and aggretates thereof"/>
<node CREATED="1688646300048" ID="ID_1520004791" LINK="https://stackoverflow.com/a/7189821" MODIFIED="1688646422060" TEXT="in C strikter als in C++ / private Funktionen und ptr-to-member sind erlaubt"/>
</node>
<node CREATED="1688646442954" ID="ID_1586820596" MODIFIED="1688646451700" TEXT="unions can be POD or non-POD">
<node CREATED="1688646471639" ID="ID_904815410" MODIFIED="1688646481455" TEXT="rekursive Definition">
<icon BUILTIN="idea"/>
</node>
<node CREATED="1688646482526" ID="ID_269065631" MODIFIED="1688646518786" TEXT="nichttriviale Logik &#x27f9; kann kein POD mehr sein"/>
<node CREATED="1688646519679" ID="ID_30562198" MODIFIED="1688646596687">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
wenn ein Member eine nichttriviale Funktion hat,
</p>
<p>
dann mu&#223; die gleiche Funktion f&#252;r die unition explizit geschrieben werden
</p>
<ul>
<li>
ctor (auch default)
</li>
<li>
copy-ctor
</li>
<li>
assignment
</li>
<li>
dtor
</li>
<li>
vtable
</li>
</ul>
</body>
</html></richcontent>
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
<node CREATED="1688646774405" ID="ID_1671950490" MODIFIED="1688646809035">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
im Zweifelsfall: <font face="Monospaced" color="#4a3ecd">std::is_pod&lt;TY&gt;()</font>&#160;fragen
</p>
</body>
</html></richcontent>
<icon BUILTIN="ksmiletris"/>
</node>
<node CREATED="1688647296784" ID="ID_710545394" MODIFIED="1688647352432">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
<u><font color="#b80225">Achtung</font></u>: der Begriff &#187;POD&#171; is <font face="Monospaced" color="#9c5709">@deprecated</font>
</p>
</body>
</html></richcontent>
<node CREATED="1688647397946" ID="ID_1763884111" LINK="https://en.cppreference.com/w/cpp/named_req/StandardLayoutType" MODIFIED="1688647548910" TEXT="std::is_standard_layout">
<node CREATED="1688648333494" ID="ID_1238201043" MODIFIED="1688648339305" TEXT="rekursiv definiert">
<icon BUILTIN="idea"/>
</node>
<node CREATED="1688648375312" ID="ID_378721631" MODIFIED="1688648389446" TEXT="Objekt besteht aus nichts au&#xdf;er den Datenelementen">
<icon BUILTIN="info"/>
</node>
<node CREATED="1688648359798" ID="ID_386098441" MODIFIED="1688648362570" TEXT="keine VTable"/>
<node CREATED="1688648340428" ID="ID_1831676232" MODIFIED="1688648358845" TEXT="kein Padding findet statt"/>
<node CREATED="1688648363841" ID="ID_864980607" MODIFIED="1688648369812" TEXT="offsetof() kann verwendet werden"/>
</node>
<node CREATED="1688647404527" ID="ID_1112859987" LINK="https://en.cppreference.com/w/cpp/named_req/TrivialType" MODIFIED="1688647454010" TEXT="std::is_trivial">
<node CREATED="1688648206419" ID="ID_1701153211" MODIFIED="1688648241387">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
&#8222;trivial&#8220; &#10233; der Compiler mu&#223; <i>nix Spezielles</i>&#160; machen
</p>
</body>
</html></richcontent>
<icon BUILTIN="idea"/>
</node>
<node CREATED="1688647905286" ID="ID_740091299" MODIFIED="1688647912297" TEXT="trivially_copyable">
<node CREATED="1688647922148" ID="ID_1365927097" MODIFIED="1688647939032" TEXT="copy, move, assignment und dtor sind trivial"/>
<node CREATED="1688648190416" ID="ID_1986330338" MODIFIED="1688648294481" TEXT="das hei&#xdf;t: kann stattdessen std::memove verwenden">
<icon BUILTIN="info"/>
</node>
<node CREATED="1688648300441" ID="ID_924956250" MODIFIED="1688648325010" TEXT="trivial dtor: es passiert gar nichts (au&#xdf;er de-Allocation)"/>
</node>
<node CREATED="1688647912797" ID="ID_1339407010" MODIFIED="1688647918511" TEXT="hat einen trivial default-ctor">
<node CREATED="1688648248344" ID="ID_1793228843" MODIFIED="1688648284218" TEXT="es findet keinerlei explizitie Initialisierung statt">
<icon BUILTIN="info"/>
</node>
<node CREATED="1688648266062" ID="ID_1386655083" MODIFIED="1688648279595" TEXT="Vorsicht: kein Member darf einen default-Initialiser haben">
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
</node>
</node>
</node>
</node>
<node CREATED="1482365430484" ID="ID_1414724077" MODIFIED="1557498707240" TEXT="chrono">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1482365434203" ID="ID_1026694670" MODIFIED="1557498707240" TEXT="lernen">
<icon BUILTIN="flag-yellow"/>