Invocation: handle default case with disabled ''parameter functor''

Some further tweaks to the logic to allow using the `FeedPrototype` in the default setup,
where ''nothing shall be done with parameters...''

Provide the basic constructors and a type constructor in FeedManifold,
so that it is possible to install a ''processing functor'' into the prototype
and then drop off a copy into each new `FeedManifold`

With this additions, can now **demonstrate simple usage**

__Remark__: using the `DiagnosticBufferProvider` developed several years ago;
Seems to work well; however, when creating a new instance in the next test case,
we get a hard failure when the previous test case did not discard all buffers.
Not sure what to think about that
 * for one, it is good to get an alarm, since actually there should not be any leak
 * but on the other hand, `reset()` does imply IMHO „I want a clean slate“
Adding some code thus to clean out memory blocks marked as used.
When a test wants to check that all memory was released, there are tools to do so.
This commit is contained in:
Fischlurch 2024-12-20 01:47:40 +01:00
parent 479ab8cb15
commit 8923d0f7b5
6 changed files with 359 additions and 64 deletions

View file

@ -67,6 +67,8 @@ namespace engine {
TrackingHeapBlockProvider&
DiagnosticBufferProvider::reset()
{
if (pImpl_)
pImpl_->markAllEmitted();
pImpl_.reset(new TrackingHeapBlockProvider());
return *pImpl_;
}

View file

@ -115,6 +115,7 @@ namespace engine {
using lib::meta::is_Structured;
using lib::meta::forEachIDX;
using lib::meta::ElmTypes;
using lib::meta::NullType;
using lib::meta::Tagged;
using lib::meta::TySeq;
using std::declval;
@ -265,7 +266,10 @@ namespace engine {
using Param = std::conditional_t<hasParam(), typename _Proc::ArgP, std::tuple<>>;
template<class PF>
using isSuitable = std::is_constructible<Param, decltype(std::declval<PF> (std::declval<TurnoutSystem&>()))>;
using Res = typename _Fun<PF>::Ret;
template<class PF>
using isSuitable = std::is_constructible<Param, Res<PF>>;
template<class PF>
using isConfigurable = std::is_constructible<bool, PF&>;
@ -282,12 +286,25 @@ namespace engine {
}
return false;
}
template<class PF>
static constexpr bool isParamFun() { return isSuitable<PF>(); }
template<class PF>
static constexpr bool canActivate() { return isSuitable<PF>() and isConfigurable<PF>(); }
};
/// a function of total void
struct _Disabled
{
void operator() (void) const {/*I do make a difference, I really do!*/}
};
}//(End)Introspection helpers.
template<class FUN, class PAM =_Disabled>
class FeedPrototype;
/**
* Configuration context for a FeedManifold.
@ -330,7 +347,9 @@ namespace engine {
{
Param param;
ParamStorage() = default;
ParamStorage()
: param{}
{ }
template<typename...INIT>
ParamStorage (INIT&& ...paramInit)
@ -356,7 +375,7 @@ namespace engine {
using enable_if_hasParam = typename lib::meta::enable_if_c<_ProcFun<F>::hasParam()>::type;
template<class X>
using NotProvided = Tagged<lib::meta::NullType, X>;
using NotProvided = Tagged<NullType, X>;
template<bool yes, class B>
using Provide_if = std::conditional_t<yes, B, NotProvided<B>>;
@ -459,6 +478,14 @@ namespace engine {
static constexpr bool hasParam() { return _S::hasParam(); }
/**
* cross-builder: _Prototype_ can be used to attach parameter-provider-functors
* and then to create several further FeedManifold instances.
*/
using Prototype = FeedPrototype<FUN>;
template<size_t i, class ARG>
auto&
accessArg (ARG& arg)
@ -519,7 +546,7 @@ namespace engine {
* The Processing-Functor will be copied into the actual FeedManifold instance
* for each Node invocation.
* @tparam FUN type of the data processing-functor
* @tparam PAM type of an optional parameter-setup functor
* @tparam PAM type of an optional parameter-setup functor (defaults to deactivated)
*/
template<class FUN, class PAM>
class FeedPrototype
@ -531,15 +558,33 @@ namespace engine {
FUN procFun_;
PAM paramFun_;
public:
FeedPrototype (FUN&& proc)
: procFun_{move (proc)}
, paramFun_{}
{ }
FeedPrototype (FUN&& proc, PAM&& par)
: procFun_{move (proc)}
, paramFun_{move (par)}
{ }
// default move acceptable : pass pre-established setup
static constexpr bool hasParam() { return _Trait::hasParam(); }
static constexpr bool hasParamFun() { return _Trait::template isParamFun<PAM>(); }
static constexpr bool canActivate() { return _Trait::template canActivate<PAM>(); }
/**
* build suitable Feed(Manifold) for processing Node invocation
*/
Feed
createFeed (TurnoutSystem& turnoutSys)
{
if constexpr (_Trait::hasParam())
if constexpr (hasParamFun())
if (_Trait::isActivated(paramFun_))
return Feed{paramFun_(turnoutSys), procFun_};
return Feed{procFun_};
}
///////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1386 : elaborate setup / binding for parameter-creation
};

View file

@ -43,7 +43,7 @@ namespace engine {
using Buff = StreamType::ImplFacade::DataBuffer;
namespace { // implementation helpers...
namespace { // implementation helpers...
inline Buff*
asBuffer(void* mem)
@ -130,11 +130,19 @@ namespace engine {
"allocation pool. This might lead to Segfault and memory leaks.");
}
/** mark all managed blocks as disposed */
void
discard()
{
if (blockList_)
for (Block& block : *blockList_)
block.markReleased();
}
uint
uint
prepare_for (uint number_of_expected_buffers)
{
if (maxAllocCount_ &&
if (maxAllocCount_ &&
maxAllocCount_ < blockList_->size() + number_of_expected_buffers)
{
ASSERT (maxAllocCount_ >= blockList_->size());
@ -155,7 +163,7 @@ namespace engine {
Block*
find (void* blockLocation)
{
return pick_Block_by_storage (*blockList_, blockLocation);
return pick_Block_by_storage (*blockList_, blockLocation);
}
@ -205,8 +213,8 @@ namespace engine {
};
}
namespace { // Details of allocation and accounting
const uint MAX_BUFFERS = 50;
@ -282,7 +290,14 @@ namespace engine {
{
return outSeq_.size();
}
void
TrackingHeapBlockProvider::markAllEmitted()
{
for (auto& [_, blockPool] : *pool_)
blockPool.discard();
}
diagn::Block&
TrackingHeapBlockProvider::access_emitted (uint bufferID)
{

View file

@ -120,7 +120,7 @@ namespace engine {
: public BufferProvider
{
unique_ptr<diagn::PoolTable> pool_;
ScopedPtrVect<diagn::Block> outSeq_;
ScopedPtrVect<diagn::Block> outSeq_;
public:
/* === BufferProvider interface === */
@ -141,11 +141,13 @@ namespace engine {
template<typename TY>
TY& accessAs (uint bufferID);
void markAllEmitted();
private:
bool withinOutputSequence (uint bufferID) const;
diagn::BlockPool& getBlockPoolFor (HashVal typeID);
diagn::Block* locateBlock (HashVal typeID, void*);
diagn::Block* searchInOutSeqeuence (void* storage);
diagn::Block* searchInOutSeqeuence (void* storage);
};

View file

@ -62,6 +62,7 @@ namespace test {
seedRand();
verify_TurnoutSystem();
verify_FeedManifold();
verify_FeedPrototype();
UNIMPLEMENTED ("build a simple render node and then activate it");
}
@ -288,7 +289,7 @@ namespace test {
//______________________________________
// Example-5: simple parameter and output
auto fun_singleParamOut = [&](short param, Buffer* buff) { *buff = param-1; };
auto fun_singleParamOut = [](short param, Buffer* buff) { *buff = param-1; };
using M5 = FeedManifold<decltype(fun_singleParamOut)>;
CHECK (not M5::hasInput());
CHECK ( M5::hasParam());
@ -310,6 +311,49 @@ namespace test {
m5.invoke();
CHECK (*oa1 == r2 - 1); // processing has placed result based on param into output buffer
// done with these buffers
buffI0.release();
buffI1.release();
buffI2.release();
buffO0.release();
buffO1.release();
}
/** @test Setup of a FeeManifold to attach parameter-functors
*/
void
verify_FeedPrototype()
{
// Prepare setup to build a suitable FeedManifold...
long r1 = rani(100);
using Buffer = long;
BufferProvider& provider = DiagnosticBufferProvider::build();
BuffHandle buff = provider.lockBufferFor<Buffer> (-55);
auto fun_singleParamOut = [](short param, Buffer* buff) { *buff = param-1; };
using M1 = FeedManifold<decltype(fun_singleParamOut)>;
using P1 = M1::Prototype;
CHECK ( P1::hasParam());
CHECK (not P1::hasParamFun());
CHECK (not P1::canActivate());
P1 p1{move (fun_singleParamOut)};
CHECK (sizeof(p1) <= sizeof(void*));
TurnoutSystem turSys{Time::NEVER};
M1 m1 = p1.createFeed(turSys);
CHECK (m1.param == short{});
m1.outBuff.createAt(0, buff);
CHECK (buff.accessAs<long>() == -55);
m1.connect();
CHECK (*m1.outArgs == -55);
m1.invoke();
CHECK (*m1.outArgs == 0 - 1);
CHECK (buff.accessAs<long>() == 0 - 1);
}
};

View file

@ -26631,9 +26631,7 @@
<node CREATED="1553907087204" ID="ID_752287871" MODIFIED="1563469756375" TEXT="zust&#xe4;ndig f&#xfc;r das Einh&#xe4;ngen und das vertikale Scrolling"/>
<node CREATED="1678026759149" ID="ID_1362126122" MODIFIED="1678026778735" TEXT="k&#xfc;nftig ggfs. auch f&#xfc;r globale Belange">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
z.B. Folding
@ -27392,9 +27390,7 @@
</node>
<node COLOR="#435e98" CREATED="1677426194737" ID="ID_465793703" MODIFIED="1677426300779" TEXT="mache aber die umgekehrte Ordnung im Kommentar klar">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...das ist n&#228;mlich potentiell verwirrend: der <i>Au&#223;enbogen</i>&#160; bildet die <i>Innenkontur<b>&#160;</b></i>der Klammer, weil der Schwung von der Klammer weg nach oben bzw. unten geht
@ -27953,9 +27949,7 @@
<node CREATED="1677548906490" ID="ID_1334871412" MODIFIED="1677548924251" TEXT="aber was genau ist dann &quot;font-size&quot;?">
<node CREATED="1677549097512" ID="ID_1309259825" MODIFIED="1677549382705" TEXT="warum kann man das nicht einfach explizit und klar sagen, Leute?">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
Die ganze Doku, sowohl in GTK, alsauch die CSS Spec liest sich so, als wollte man sich vor einer Festlegung dr&#252;cken. M&#246;glicherweise hatte man Sorge, die dummen Leute w&#252;rden zu einfache Schlu&#223;folgerungen ziehen, und darob die Aufl&#246;sung des Bildschirms &#252;bersehen &#8212; 96dpi ist ja nur ein <i>Default, </i>und ob 1pt= 1/72 inch wirklich gilt, darauf m&#246;chte sich niemand festnageln lasse, vermute ich (es h&#228;ngt n&#228;mlich davon ab, da&#223; Monitor und Grafikkarte diesen Wert richtig reporten)
@ -28747,9 +28741,7 @@
</node>
<node CREATED="1555947482051" ID="ID_814853878" MODIFIED="1557498707228" TEXT="...und produziert den gleichen Compiler-Fehler">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
wenn ich das Tupel als Referenz anliefere
@ -29107,9 +29099,7 @@
<node CREATED="1557590299574" ID="ID_1634972448" MODIFIED="1557590314138" TEXT="rein zuf&#xe4;llig delegiere ich bereits &#xfc;ber zwei Konstrukturen"/>
<node COLOR="#338800" CREATED="1557590314884" ID="ID_1086686390" MODIFIED="1557590420718" TEXT="also einfach die Argument-Typen vom Funktions-Handler nehmen">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
anstatt, wie es die bisherige (naive) implementierung macht,
@ -29930,9 +29920,7 @@
<icon BUILTIN="help"/>
<node CREATED="1674402620527" ID="ID_1633544285" MODIFIED="1674402871728" TEXT="sie bricht den strikten Bezug auf Canvas-Koordinaten und jeweils einen Track">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
das Pr&#228;ludium geh&#246;rt nicht zum Track, und f&#252;r alle sonstigen Gr&#246;&#223;enangaben gilt ein unmittelbarer Bezug auf die Canvas-Koordinaten; diese gelten <i>lokal f&#252;r den Canvas</i>
@ -31773,9 +31761,7 @@
</node>
<node COLOR="#338800" CREATED="1563117696328" ID="ID_1599825097" MODIFIED="1576282358048" TEXT="Konzeptioneller Fehler beim Z&#xe4;hlen gefixt">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
nicht nur die Ruler, auch das Prelude selber ist ein solches gePinntes Element (selbst wenn es leer ist)
@ -33116,9 +33102,7 @@
<icon BUILTIN="yes"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1679072150446" HGAP="99" ID="ID_1559178425" MODIFIED="1679072189402" VSHIFT="2">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
sollte <i>theoretisch</i>&#160;funktionieren....
@ -33446,9 +33430,7 @@
</node>
<node CREATED="1611481905544" ID="ID_269249582" MODIFIED="1611482248833" TEXT="aber: ViewHooks &#x2015; keine generische Quer-Beweglichkeit">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...trotzdem wurde die Idee eines generischen UI-Layout-Frameworks nach gr&#252;ndlicher Untersuchung aufgegeben; dies System der ViewHooks stiftet uns also &quot;nur&quot; ein Baumuster, und wir beschr&#228;nken uns auf die bekannte kleine Zahl der konkreten F&#228;lle, welche weitgehend im DisplayFrame geb&#252;ndelt sind. Deshalb gibt es nun hilfsweise das Zugangs-Interface ViewHooks, von dem man alle relevanten, speziell getypten ViewHook, bzw. Canvas-Hook eben <i>im aktuellen Display-Frame</i>&#160;(relatives Koordinatensystem) beziehen kann.
@ -34379,9 +34361,7 @@
<node CREATED="1479602341777" ID="ID_1610807382" MODIFIED="1557498707231" TEXT="empf&#xe4;ngt DisplayStrategy"/>
<node CREATED="1479602382195" ID="ID_1504834509" MODIFIED="1557498707231">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
kann sich selbst
@ -34880,9 +34860,7 @@
</node>
<node COLOR="#821a26" CREATED="1586383188716" ID="ID_1268226317" MODIFIED="1586383420749" TEXT="mu&#xdf; daher komplett im Clip gespeichert werden">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
<font color="#e12e2e"><b>Vorsicht Falle</b></font>: es reicht nicht, nur die auf Pixel quantisierte Position zu speichern, denn diese wird bei geringem Zoom relativ ungenau. Es w&#228;re leicht m&#246;glich, durch Heraus- und wieder Hereinscrollen die sichtbare Position eines Clip massiv zu verschieben.
@ -35162,9 +35140,7 @@
<node CREATED="1612474248183" ID="ID_1920258813" MODIFIED="1612474254178" TEXT="Neben-Constraint: Storage">
<node CREATED="1612474255953" ID="ID_1180938524" MODIFIED="1612474796077" TEXT="den Pointer auf den View habe ich zwangsl&#xe4;ufig">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
Das ist eine Konsequenz aus dem Design des Diff-Framework; genauer, aus der konkreten Form, die die Implementierung des Diff-Framework bekommen hat: Und zwar, da&#223; ein generischer Container gebunden wird. Das bedeutet, da&#223; die Elemente im Container wie Werte behandelt werden. Und deshalb m&#252;ssen sich Widgets selbst&#228;ndig vom Canvas abmelden. Die Alternative dazu w&#228;re, da&#223; der Parent den Diff interpretiert, und seine Kinder direkt manipuliert. Dann w&#228;ren diese Kinder aber auch Widgets, und nicht nochmal indirekt als Presenter angebunden. K&#246;nnte man machen, habe ich aber ein mulmiges Gef&#252;hl. Da nehme ich dann doch lieber ein smart-Handle und einen Back-Pointer in Kauf.
@ -81559,7 +81535,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1713793648079" ID="ID_907714892" MODIFIED="1730829794903" TEXT="vorhandener Code kann auf elementarer Ebene mitverwendet werden">
<icon BUILTIN="idea"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1713795084878" ID="ID_900623108" MODIFIED="1713795152331" TEXT="das Buffer-Protocol gilt als gesetzt">
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1713795084878" ID="ID_900623108" MODIFIED="1734654127744" TEXT="das Buffer-Protocol gilt als gesetzt">
<arrowlink COLOR="#263bd0" DESTINATION="ID_1121467988" ENDARROW="Default" ENDINCLINATION="168;345;" ID="Arrow_ID_1021571849" STARTARROW="None" STARTINCLINATION="16;273;"/>
<linktarget COLOR="#3c61b7" DESTINATION="ID_900623108" ENDARROW="Default" ENDINCLINATION="-475;-40;" ID="Arrow_ID_245920004" SOURCE="ID_267762321" STARTARROW="None" STARTINCLINATION="-218;8;"/>
<icon BUILTIN="yes"/>
<node COLOR="#435e98" CREATED="1721958694600" ID="ID_769985598" MODIFIED="1721958851624" TEXT="dokumentiert durch: nur BufferProviderProtocol_test">
@ -88744,6 +88721,100 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<linktarget COLOR="#f70b4e" DESTINATION="ID_1455684253" ENDARROW="Default" ENDINCLINATION="-91;-6;" ID="Arrow_ID_490366864" SOURCE="ID_1569263616" STARTARROW="None" STARTINCLINATION="-130;10;"/>
<icon BUILTIN="broken-line"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1734652629957" ID="ID_367075117" MODIFIED="1734657730391" TEXT="mu&#xdf; BuffHandle am Ende aufr&#xe4;umen">
<icon BUILTIN="messagebox_warning"/>
<node BACKGROUND_COLOR="#f8cbe0" COLOR="#a50125" CREATED="1734652654612" ID="ID_615803574" MODIFIED="1734652734403" TEXT="&#xd83d;&#xdc80; sonst gibts &#xc4;rger">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
ERR: tracking-heap-block-provider.cpp:129: ~BlockPool: Block actively in use while shutting down BufferProvider allocation pool. This might lead to Segfault and memory leaks.
</p>
</body>
</html></richcontent>
</node>
<node BACKGROUND_COLOR="#c59b8e" COLOR="#690f14" CREATED="1734652908335" ID="ID_1168268714" MODIFIED="1734654458032">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
wirkt alles noch <i>latent unfertig hier....</i>
</p>
</body>
</html></richcontent>
<arrowlink COLOR="#9b696f" DESTINATION="ID_1210803090" ENDARROW="Default" ENDINCLINATION="-1935;134;" ID="Arrow_ID_1515343755" STARTARROW="None" STARTINCLINATION="-1174;81;"/>
<arrowlink COLOR="#cc6e7f" DESTINATION="ID_159987338" ENDARROW="Default" ENDINCLINATION="-37;-657;" ID="Arrow_ID_717618496" STARTARROW="None" STARTINCLINATION="827;61;"/>
<icon BUILTIN="smiley-neutral"/>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1734652739509" ID="ID_401481499" MODIFIED="1734654463446" TEXT="es fehlt eine Funktion zum pauschalen Aufr&#xe4;umen">
<icon BUILTIN="messagebox_warning"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1734654476636" ID="ID_296907744" MODIFIED="1734654566337">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
auch Implementierung von <font face="Monospaced" color="#750db9">all_buffers_released</font><font face="Monospaced">()</font>&#160;fehlt
</p>
</body>
</html>
</richcontent>
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Glorreich &#8212; <i>testgetriebene Entwicklung</i>&#160;und dann den wichtigen zentralen Test &gt;10 Jahre lang auskommentiert rumstehen lassen
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="smiley-angry"/>
</node>
<node COLOR="#862e72" CREATED="1734657284816" ID="ID_273646931" MODIFIED="1734657328403" TEXT="Hilfe! alles ziemlich komplex ... verstehe nur ungef&#xe4;hr...">
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="smily_bad"/>
</node>
</node>
<node COLOR="#435e98" CREATED="1734657373286" ID="ID_661785602" MODIFIED="1734657708951" TEXT="zumindest sollte es m.E. keinen Alarm geben aus reset()">
<icon BUILTIN="yes"/>
<node CREATED="1734657399795" ID="ID_1074735164" MODIFIED="1734657440927" TEXT="DiagnosticBufferProvider::build() &#x27f9; &#x201e;ich will neu anfangen&#x201c;"/>
<node CREATED="1734657443028" ID="ID_37759896" MODIFIED="1734657496986" TEXT="aber reset() l&#xf6;scht einen bestehenden TrackingHeapBlockProvider weg"/>
<node CREATED="1734657498036" ID="ID_1891657061" MODIFIED="1734657506693" TEXT="und der verwirft dann seine PoolTable"/>
<node CREATED="1734657507757" ID="ID_1948993429" MODIFIED="1734657532777" TEXT="und diese wiederum terminiert mit einem Alarm &#x2014; falls Bl&#xf6;cke offen h&#xe4;ngen"/>
<node COLOR="#338800" CREATED="1734657561989" ID="ID_1002603938" MODIFIED="1734657676493" TEXT="TrackingHeapBlockProvider::markAllEmitted()">
<icon BUILTIN="forward"/>
<node CREATED="1734657576620" ID="ID_547379561" MODIFIED="1734657587934" TEXT="im BlockPool h&#xe4;ngen die noch offenen Bl&#xf6;cke"/>
<node CREATED="1734657589009" ID="ID_1122938755" MODIFIED="1734657608475" TEXT="was durch das Protokoll durch ist, geht in die outSeq_"/>
<node CREATED="1734657609543" ID="ID_1931883679" MODIFIED="1734657644489">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
also mu&#223; ich im BlockPool alles als <i>released</i>&#160;markieren
</p>
</body>
</html>
</richcontent>
</node>
</node>
<node CREATED="1734657650997" ID="ID_597301148" MODIFIED="1734657671746" TEXT="die BufferMetadat-Registry zeigt auch noch eine Warnung an">
<icon BUILTIN="idea"/>
<node CREATED="1734657680261" ID="ID_514547250" MODIFIED="1734657685362" TEXT="das ist m.E. in Ordnung"/>
<node CREATED="1734657686334" ID="ID_1651262657" MODIFIED="1734657700402">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
schlie&#223;lich <i>soll man ja sauber arbeiten</i>
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1734657714210" ID="ID_1768481204" MODIFIED="1734657728086" TEXT="au&#xdf;erdem: im Test selber explizit alle Handles releasen">
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1734310359146" ID="ID_1656582564" MODIFIED="1734536053863" TEXT="aufrufen">
<icon BUILTIN="button_ok"/>
@ -88755,6 +88826,18 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node COLOR="#338800" CREATED="1734631471232" ID="ID_1048829589" MODIFIED="1734631527235" TEXT="Feed-Prototype: Parameter-Behandlung zeigen">
<linktarget COLOR="#406cd3" DESTINATION="ID_1048829589" ENDARROW="Default" ENDINCLINATION="-675;40;" ID="Arrow_ID_58841322" SOURCE="ID_1416331336" STARTARROW="None" STARTINCLINATION="-3038;178;"/>
<icon BUILTIN="button_ok"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734646019529" ID="ID_332184252" MODIFIED="1734646090013" TEXT="Setup: FeedManifold mit einfachem Output-Buffer...">
<icon BUILTIN="flag-yellow"/>
</node>
<node CREATED="1734657744165" ID="ID_241443684" MODIFIED="1734657761772" TEXT="erst mal einfachst m&#xf6;gliche Processing-Function">
<icon BUILTIN="yes"/>
<node COLOR="#338800" CREATED="1734657776472" ID="ID_1334839474" MODIFIED="1734657800976" TEXT="FeedManifold instantiieren">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1734657789598" ID="ID_452572995" LINK="#ID_189910811" MODIFIED="1734658019920" TEXT="aufrufen ohne Parameter">
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1733525831136" ID="ID_1553180375" MODIFIED="1733527489987" TEXT="NodeBuilder_test">
@ -92291,17 +92374,38 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1734571114213" ID="ID_43601788" MODIFIED="1734571251260" TEXT="beide Funktoren explizit per Value gegeben"/>
<node CREATED="1734571350714" ID="ID_108774551" MODIFIED="1734571363533" TEXT="nur der Proc-Functor explizit per Value gegeben">
<node CREATED="1734572263295" ID="ID_1485061295" MODIFIED="1734572273442" TEXT="das entspricht der aktuell implementieren L&#xf6;sung"/>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1734572275188" ID="ID_534914797" MODIFIED="1734572295035" TEXT="der Proc-Functor mu&#xdf; dann default-konstruierbar sein">
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1734572275188" ID="ID_534914797" MODIFIED="1734658353181" TEXT="der Proc-Functor mu&#xdf; dann default-konstruierbar sein">
<arrowlink DESTINATION="ID_1351680476" ENDARROW="Default" ENDINCLINATION="105;7;" ID="Arrow_ID_1208887635" STARTARROW="None" STARTINCLINATION="5;59;"/>
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734572306537" ID="ID_1442022066" MODIFIED="1734572315772" TEXT="Implementierung schrittweise aufbauen">
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734572306537" ID="ID_1442022066" MODIFIED="1734646146983" TEXT="Implementierung schrittweise aufbauen">
<arrowlink COLOR="#3490d0" DESTINATION="ID_1561585107" ENDARROW="Default" ENDINCLINATION="-19;-46;" ID="Arrow_ID_1276202297" STARTARROW="None" STARTINCLINATION="-184;12;"/>
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734572424754" ID="ID_1186353623" MODIFIED="1734582798770" TEXT="Typ anlegen mit zwei Funktor-Parametern">
<icon BUILTIN="pencil"/>
<node COLOR="#435e98" CREATED="1734658230227" ID="ID_1351680476" MODIFIED="1734658432581" TEXT="brauche eine &#xbb;Deaktiviert&#xab;-Default-Funktion">
<linktarget COLOR="#a9b4c1" DESTINATION="ID_1351680476" ENDARROW="Default" ENDINCLINATION="105;7;" ID="Arrow_ID_1208887635" SOURCE="ID_534914797" STARTARROW="None" STARTINCLINATION="5;59;"/>
<icon BUILTIN="yes"/>
<node COLOR="#5b280f" CREATED="1734658373113" ID="ID_1386239021" MODIFIED="1734658387775" TEXT="void oder ein Marker-Typ ist ungeschickt">
<icon BUILTIN="button_cancel"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1734658355554" ID="ID_49627513" MODIFIED="1734658414475" TEXT="leeres &#x3bb; gen&#xfc;gt nicht">
<icon BUILTIN="messagebox_warning"/>
</node>
<node COLOR="#435e98" CREATED="1734658392893" HGAP="23" ID="ID_1393452414" MODIFIED="1734658425075" TEXT="Hilfsfunktion _Disabled" VSHIFT="-41">
<icon BUILTIN="idea"/>
</node>
</node>
<node COLOR="#338800" CREATED="1734658272806" ID="ID_232133673" MODIFIED="1734658313456" TEXT="ohne weitere Konfiguration &#x27f9; nur Processing-Function weitergeben">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1734658315096" ID="ID_901672624" MODIFIED="1734658328646" TEXT="Parameter-Tupel wird dann default-Konstruiert">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734572571310" ID="ID_762884176" MODIFIED="1734642685926" TEXT="Traits-Template f&#xfc;r Parmeter-Funktor vorsehen">
<icon BUILTIN="pencil"/>
@ -92317,8 +92421,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
....das hei&#223;t, alle wichtigen Eigenschaften aus _ProcFun&lt;FUN&gt; m&#252;ssen delegiert bereitgestellt werden...
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<icon BUILTIN="button_ok"/>
</node>
</node>
@ -92335,8 +92438,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
valide&#160;&#160;&#10233;&#160;&#160;Funktor ist <i>brauchbar</i>
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
</node>
<node COLOR="#435e98" CREATED="1734640447354" ID="ID_1513968039" MODIFIED="1734642552192" TEXT="ist dieser Funktor dynamisch aktivierbar?">
@ -92351,6 +92453,13 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1734642450134" ID="ID_21738548" MODIFIED="1734642472763" TEXT="sicherheitshalber doch auch die Param-Funktion dann deaktiveren"/>
</node>
</node>
<node CREATED="1734658122509" ID="ID_925008538" MODIFIED="1734658210400" TEXT="hasParamFun(): hat tats&#xe4;chlich nutzbaren Funktor">
<linktarget COLOR="#5b88bd" DESTINATION="ID_925008538" ENDARROW="Default" ENDINCLINATION="-190;10;" ID="Arrow_ID_927679188" SOURCE="ID_1713601568" STARTARROW="None" STARTINCLINATION="220;15;"/>
<icon BUILTIN="info"/>
</node>
<node CREATED="1734658155485" ID="ID_1572271675" MODIFIED="1734658185062" TEXT="canActivate(): zus&#xe4;tzlich ist dieser Funktor zur Laufzeit aktivier/deaktivierbar">
<icon BUILTIN="info"/>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1734572439920" ID="ID_955026014" MODIFIED="1734642701637" TEXT="createFeed (TurnoutSystem&amp;) implementieren">
<linktarget COLOR="#d35582" DESTINATION="ID_955026014" ENDARROW="Default" ENDINCLINATION="-620;38;" ID="Arrow_ID_278216824" SOURCE="ID_112390056" STARTARROW="None" STARTINCLINATION="1203;53;"/>
@ -92389,6 +92498,30 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node CREATED="1734645843309" ID="ID_860706642" MODIFIED="1734645923949" TEXT="im Test-Setup pr&#xfc;fen">
<linktarget COLOR="#418d52" DESTINATION="ID_860706642" ENDARROW="Default" ENDINCLINATION="-562;73;" ID="Arrow_ID_581949487" SOURCE="ID_1506431608" STARTARROW="None" STARTINCLINATION="-475;32;"/>
<node CREATED="1734645927394" ID="ID_1561585107" LINK="#ID_332184252" MODIFIED="1734646140375" TEXT="NodeBase_test::verify_FeedPrototype()">
<linktarget COLOR="#3490d0" DESTINATION="ID_1561585107" ENDARROW="Default" ENDINCLINATION="-19;-46;" ID="Arrow_ID_1276202297" SOURCE="ID_1442022066" STARTARROW="None" STARTINCLINATION="-184;12;"/>
<icon BUILTIN="info"/>
</node>
<node CREATED="1734657891873" ID="ID_691202560" MODIFIED="1734657902719" TEXT="FeedPrototype erstellen">
<node COLOR="#338800" CREATED="1734657905943" ID="ID_1031794967" LINK="#ID_189910811" MODIFIED="1734658482968" TEXT="FeedManifold ohne Parameter-Funktor">
<icon BUILTIN="button_ok"/>
<node BACKGROUND_COLOR="#d8e0aa" COLOR="#0f6469" CREATED="1734657925045" ID="ID_189910811" MODIFIED="1734657972489" TEXT="wie &#xfc;blich ... ein paar kleine Bugs">
<icon BUILTIN="ksmiletris"/>
</node>
<node COLOR="#435e98" CREATED="1734658058658" ID="ID_1713601568" MODIFIED="1734658214396" TEXT="neues Status-Pr&#xe4;dikat: hasParamFun">
<arrowlink COLOR="#5b88bd" DESTINATION="ID_925008538" ENDARROW="Default" ENDINCLINATION="-190;10;" ID="Arrow_ID_927679188" STARTARROW="None" STARTINCLINATION="220;15;"/>
<icon BUILTIN="info"/>
</node>
<node COLOR="#338800" CREATED="1734658447294" ID="ID_277685500" MODIFIED="1734658473657" TEXT="pr&#xfc;fen...">
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1734658454301" ID="ID_704330240" MODIFIED="1734658478814" TEXT="tats&#xe4;chlich default-konstruiert"/>
<node COLOR="#435e98" CREATED="1734658464595" ID="ID_1811872585" MODIFIED="1734658478814" TEXT="Parameter wird verwendet"/>
</node>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734196584853" ID="ID_1949228582" MODIFIED="1734283386060" TEXT="Anordnung des Parameters f&#xfc;r den Param-Funktor bedenken">
<icon BUILTIN="flag-yellow"/>
@ -92785,6 +92918,10 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node COLOR="#338800" CREATED="1734556219075" ID="ID_1910303400" LINK="#ID_1059351113" MODIFIED="1734556349702" TEXT="Ha: komplexe gemischte Buffer-Parameter funktionieren auf Anhieb">
<icon BUILTIN="ksmiletris"/>
</node>
<node CREATED="1734645695088" ID="ID_1506431608" LINK="#ID_1048829589" MODIFIED="1734645923948" TEXT="Einbindung in FeedPrototype austesten">
<arrowlink COLOR="#418d52" DESTINATION="ID_860706642" ENDARROW="Default" ENDINCLINATION="-562;73;" ID="Arrow_ID_581949487" STARTARROW="None" STARTINCLINATION="-475;32;"/>
<icon BUILTIN="yes"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734133400400" ID="ID_1364724277" MODIFIED="1734141875620" TEXT="zus&#xe4;tzlichen Funktor f&#xfc;r die Parameter akzeptieren">
@ -96798,6 +96935,11 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1731890254602" ID="ID_447051297" MODIFIED="1734388971845" TEXT="brauche Buffer">
<arrowlink COLOR="#bb4c6b" DESTINATION="ID_1319945622" ENDARROW="Default" ENDINCLINATION="-663;35;" ID="Arrow_ID_542692149" STARTARROW="None" STARTINCLINATION="745;112;"/>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1734653165700" HGAP="21" ID="ID_159987338" MODIFIED="1734654458033" TEXT="unklar wie weit BufferProvider entwickelt ist" VSHIFT="51">
<linktarget COLOR="#cc6e7f" DESTINATION="ID_159987338" ENDARROW="Default" ENDINCLINATION="-37;-657;" ID="Arrow_ID_717618496" SOURCE="ID_1168268714" STARTARROW="None" STARTINCLINATION="827;61;"/>
<linktarget COLOR="#cc6e7f" DESTINATION="ID_159987338" ENDARROW="Default" ENDINCLINATION="677;44;" ID="Arrow_ID_544228779" SOURCE="ID_1155618733" STARTARROW="Default" STARTINCLINATION="128;-1039;"/>
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728785939337" ID="ID_642847753" MODIFIED="1728785947978" TEXT="einfachste Berechnung direkt verifizieren">
@ -98747,8 +98889,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<linktarget COLOR="#ca3e80" DESTINATION="ID_1795755773" ENDARROW="Default" ENDINCLINATION="333;-16;" ID="Arrow_ID_778082175" SOURCE="ID_1238813567" STARTARROW="None" STARTINCLINATION="-512;47;"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1713824325760" ID="ID_1661035289" MODIFIED="1721958851624" TEXT="BufferProviderProtocol_test">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1713824325760" ID="ID_1661035289" MODIFIED="1734654073268" TEXT="BufferProviderProtocol_test">
<linktarget COLOR="#5387dc" DESTINATION="ID_1661035289" ENDARROW="Default" ENDINCLINATION="-1176;-93;" ID="Arrow_ID_1311080426" SOURCE="ID_769985598" STARTARROW="None" STARTINCLINATION="-1176;64;"/>
<linktarget COLOR="#5387dc" DESTINATION="ID_1661035289" ENDARROW="Default" ENDINCLINATION="-1176;-93;" ID="Arrow_ID_728270522" SOURCE="ID_173016592" STARTARROW="None" STARTINCLINATION="-1222;49;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1713824328087" ID="ID_1065671274" MODIFIED="1713824335184" TEXT="Standard-Fall fertigstellen"/>
</node>
@ -98964,8 +99107,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="hourglass"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1711548381477" ID="ID_664146362" MODIFIED="1711552950392" TEXT="Buffer-Manager">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1711548381477" ID="ID_664146362" MODIFIED="1734654370564" TEXT="Buffer-Manager">
<linktarget COLOR="#fec499" DESTINATION="ID_664146362" ENDARROW="Default" ENDINCLINATION="-1409;197;" ID="Arrow_ID_616778881" SOURCE="ID_722733788" STARTARROW="None" STARTINCLINATION="-794;96;"/>
<linktarget COLOR="#5a4f77" DESTINATION="ID_664146362" ENDARROW="Default" ENDINCLINATION="-493;1406;" ID="Arrow_ID_297212964" SOURCE="ID_1433806835" STARTARROW="None" STARTINCLINATION="-1768;-2925;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1719249646221" ID="ID_403017464" MODIFIED="1719249923835" TEXT="Begriffe klarstellen">
<arrowlink COLOR="#4b5a6c" DESTINATION="ID_1263834914" ENDARROW="Default" ENDINCLINATION="-668;-90;" ID="Arrow_ID_767640863" STARTARROW="None" STARTINCLINATION="-873;115;"/>
@ -98987,6 +99131,31 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1711548732719" ID="ID_1723099061" MODIFIED="1715438041053" TEXT="erster Entwurf von 2011">
<icon BUILTIN="help"/>
<node BACKGROUND_COLOR="#c59b8e" COLOR="#690f14" CREATED="1734652908335" HGAP="112" ID="ID_1155618733" MODIFIED="1734653938102" TEXT="wie ist hier eigentlich der Stand??" VSHIFT="52">
<arrowlink COLOR="#9b696f" DESTINATION="ID_1210803090" ENDARROW="Default" ENDINCLINATION="-1935;134;" ID="Arrow_ID_965284194" STARTARROW="None" STARTINCLINATION="-1174;81;"/>
<arrowlink COLOR="#cc6e7f" DESTINATION="ID_159987338" ENDARROW="Default" ENDINCLINATION="677;44;" ID="Arrow_ID_544228779" STARTARROW="Default" STARTINCLINATION="128;-1039;"/>
<icon BUILTIN="help"/>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1734654001763" ID="ID_1121467988" MODIFIED="1734654178000">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
das Buffer-Protocol von <b>2012</b>
</p>
<p>
betrachte ich als verbindlich
</p>
</body>
</html></richcontent>
<linktarget COLOR="#263bd0" DESTINATION="ID_1121467988" ENDARROW="Default" ENDINCLINATION="168;345;" ID="Arrow_ID_1021571849" SOURCE="ID_900623108" STARTARROW="None" STARTINCLINATION="16;273;"/>
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/>
<node BACKGROUND_COLOR="#c5ac9e" COLOR="#435e98" CREATED="1721958694600" HGAP="37" ID="ID_173016592" MODIFIED="1734654190420" TEXT="Dokumentation: BufferProviderProtocol_test + BufferMetadata_test" VSHIFT="61">
<arrowlink COLOR="#5387dc" DESTINATION="ID_1661035289" ENDARROW="Default" ENDINCLINATION="-1176;-93;" ID="Arrow_ID_728270522" STARTARROW="None" STARTINCLINATION="-1222;49;"/>
<icon BUILTIN="list"/>
</node>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1711548848847" ID="ID_1937204740" MODIFIED="1711552414384" TEXT="Verbindung &#x27f7; low-level-Model">
@ -139760,6 +139929,10 @@ std::cout &lt;&lt; tmpl.render({&quot;what&quot;, &quot;World&quot;}) &lt;&lt; s
<linktarget COLOR="#454059" DESTINATION="ID_1595450559" ENDARROW="Default" ENDINCLINATION="-1036;-77;" ID="Arrow_ID_1704085390" SOURCE="ID_127710483" STARTARROW="None" STARTINCLINATION="-161;430;"/>
</node>
<node CREATED="1720994208167" ID="ID_985068668" MODIFIED="1720994229990" TEXT="BufferProvider">
<node CREATED="1734654248346" ID="ID_1433806835" MODIFIED="1734654378412" TEXT="erstmals wirklich genutzt: &#xbb;Playback Vertical Slice&#xab;">
<arrowlink COLOR="#5a4f77" DESTINATION="ID_664146362" ENDARROW="Default" ENDINCLINATION="-493;1406;" ID="Arrow_ID_297212964" STARTARROW="None" STARTINCLINATION="-1768;-2925;"/>
<icon BUILTIN="list"/>
</node>
<node CREATED="1720994687447" ID="ID_1402038286" MODIFIED="1720994796501" TEXT="f&#xfc;r die RenderEngine relevante BufferProvider">
<linktarget COLOR="#522544" DESTINATION="ID_1402038286" ENDARROW="Default" ENDINCLINATION="-657;-39;" ID="Arrow_ID_1160732485" SOURCE="ID_735498857" STARTARROW="None" STARTINCLINATION="-609;54;"/>
</node>
@ -149998,13 +150171,27 @@ unsigned int ThreadIdAsInt = *static_cast&lt;unsigned int*&gt;(static_cast&lt;vo
</node>
</node>
</node>
<node CREATED="1570812308345" FOLDED="true" ID="ID_595212266" MODIFIED="1582333970566" TEXT="Review">
<node CREATED="1570812308345" FOLDED="true" ID="ID_595212266" MODIFIED="1734652811311" TEXT="Review">
<icon BUILTIN="bell"/>
<node CREATED="1570812319615" ID="ID_587624101" MODIFIED="1570812352560" TEXT="buffhandle.hpp">
<arrowlink COLOR="#6997ce" DESTINATION="ID_572329221" ENDARROW="Default" ENDINCLINATION="-312;0;" ID="Arrow_ID_558667540" STARTARROW="None" STARTINCLINATION="241;-25;"/>
<node CREATED="1570812358786" ID="ID_1531404447" MODIFIED="1570812369421" TEXT="2019-10">
<node CREATED="1570812369993" ID="ID_1647231897" MODIFIED="1570812373524" TEXT="noch nicht verwendet"/>
<node CREATED="1570812373920" ID="ID_1210803090" MODIFIED="1570812385603" TEXT="Testcode (TrackingHeapBlockProvider) sauber"/>
<node CREATED="1570812373920" ID="ID_1210803090" MODIFIED="1734653131163" TEXT="Testcode (TrackingHeapBlockProvider)">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
sieht aber soweit sauber aus...
</p>
<p>
Wenngleich auch ziemlich elaboriert; all diese Tracking-Funktionalität war seinerzeit angelegt worden, aber nur oberflächlich getestet, weil der Render-Engine-Entwurf von 2012 letztlich steckengeblieben ist. Jetzt, 2024 beginne ich, den TrackingHeapBlockProvider zu für Tests zu nutzen, einfach weil er da ist — und stelle fest, daß einige Details unfertig und etwas unausgereift wirken....
</p>
</body>
</html></richcontent>
<linktarget COLOR="#9b696f" DESTINATION="ID_1210803090" ENDARROW="Default" ENDINCLINATION="-1935;134;" ID="Arrow_ID_1515343755" SOURCE="ID_1168268714" STARTARROW="None" STARTINCLINATION="-1174;81;"/>
<linktarget COLOR="#9b696f" DESTINATION="ID_1210803090" ENDARROW="Default" ENDINCLINATION="-1935;134;" ID="Arrow_ID_965284194" SOURCE="ID_1155618733" STARTARROW="None" STARTINCLINATION="-1174;81;"/>
</node>
</node>
</node>
<node CREATED="1570812625135" ID="ID_126301727" MODIFIED="1570815492913" TEXT="typed-allocation-manager.hpp">