Library: rearrange strategy code

Parts of the decision logic for element handling was packaged
as separate »strategy« class — but this turned out to be neither
a real abstraction, nor configurable in any way. Thus it is better
to simplify the structure and turn these type predicates into simple
private member functions of the SeveralBuilder itself
This commit is contained in:
Fischlurch 2024-06-11 02:48:23 +02:00
parent 6f3bfb5ff3
commit 773325f1bc
3 changed files with 237 additions and 217 deletions

View file

@ -89,7 +89,13 @@ namespace lib {
using util::max;
using util::min;
using util::_Fmt;
using std::is_trivially_move_constructible_v;
using std::is_trivially_destructible_v;
using std::has_virtual_destructor_v;
using std::is_trivially_copyable_v;
using std::is_same_v;
using lib::meta::is_Subclass;
/**
* Helper to determine the »spread« required to hold
@ -187,7 +193,6 @@ namespace lib {
};
};
using std::is_trivially_copyable_v;
template<class I, class E, template<typename> class ALO>
struct AllocationPolicy
@ -217,51 +222,6 @@ namespace lib {
catch(...)
{ newBucket->destroy(); }
return newBucket;
/*
size_t buffSiz{data? data->buffSiz : 0};
if (demand == buffSiz)
return data;
if (demand > buffSiz)
{// grow into exponentially expanded new allocation
size_t spread = data? data->spread : sizeof(I);
size_t safetyLim = LUMIERA_MAX_ORDINAL_NUMBER * spread;
size_t expandAlloc = min (safetyLim
,max (2*buffSiz, demand));
if (expandAlloc < demand)
throw err::State{_Fmt{"Storage expansion for Several-collection "
"exceeds safety limit of %d bytes"} % safetyLim
,LERR_(SAFETY_LIMIT)};
// allocate new storage block...
size_t newCnt = demand / spread;
if (newCnt * spread < demand) ++newCnt;
Bucket* newBucket = Fac::create (newCnt, spread);
// move (or copy) existing data...
size_t cnt = data? data->cnt : 0;
for (size_t idx=0; idx<cnt; ++idx)
Fac::template createAt<I> (newBucket, idx
,std::move_if_noexcept (data->subscript(idx)));
////////////////////////////////////////////////////////OOO schee... aba mia brauchn E, ned I !!!!!
// discard old storage
if (data)
Fac::template destroy<I> (data);
return newBucket;
}
else
{// shrink into precisely fitting new allocation
Bucket* newBucket{nullptr};
if (data)
{
size_t cnt{data->cnt};
ASSERT (cnt > 0);
newBucket = Fac::create (cnt, data->spread);
for (size_t idx=0; idx<cnt; ++idx)
Fac::template createAt<I> (newBucket, idx
,std::move_if_noexcept (data->subscript(idx))); ////////////OOO selbes Problem: E hier
Fac::template destroy<I> (data);
}
return newBucket;
}
*/
}
void
@ -286,91 +246,8 @@ namespace lib {
template<class I, class E>
using HeapOwn = AllocationPolicy<I, E, std::allocator>;
using std::is_trivially_move_constructible_v;
using std::is_trivially_destructible_v;
using std::has_virtual_destructor_v;
using std::is_trivially_copyable_v;
using std::is_same_v;
using lib::meta::is_Subclass;
template<class I, class E>
struct HandlingStrategy
{
enum DestructionMethod{ UNKNOWN
, TRIVIAL
, ELEMENT
, VIRTUAL
};
static Literal
render (DestructionMethod m)
{
switch (m)
{
case TRIVIAL: return "trivial";
case ELEMENT: return "fixed-element-type";
case VIRTUAL: return "virtual-baseclass";
default:
throw err::Logic{"unknown DestructionMethod"};
}
}
DestructionMethod destructor{UNKNOWN};
bool lock_move{false};
/** mark that we're about to accept an otherwise unknown type,
* which can not be trivially moved. This irrevocably disables
* relocations by low-level `memove` for this container instance */
template<typename TY>
void
probeMoveCapability()
{
if (not (is_same_v<TY,E> or is_trivially_copyable_v<TY>))
lock_move = true;
}
bool
canWildMove()
{
return is_trivially_copyable_v<E> and not lock_move;
}
template<typename TY, class FAC>
typename ArrayBucket<I>::Deleter
selectDestructor (FAC const& factory)
{
if (is_Subclass<TY,I>() and has_virtual_destructor_v<I>)
{
__ensureMark<TY> (VIRTUAL);
return [factory](ArrayBucket<I>* bucket){ unConst(factory).template destroy<I> (bucket); };
}
if (is_trivially_destructible_v<TY>)
{
__ensureMark<TY> (TRIVIAL);
return [factory](ArrayBucket<I>* bucket){ unConst(factory).template destroy<TY> (bucket); };
}
if (is_same_v<TY,E> and is_Subclass<E,I>())
{
__ensureMark<TY> (ELEMENT);
return [factory](ArrayBucket<I>* bucket){ unConst(factory).template destroy<E> (bucket); };
}
throw err::Invalid{_Fmt{"Unsupported kind of destructor for element type %s."}
% util::typeStr<TY>()};
}
template<typename TY>
void
__ensureMark (DestructionMethod expectedKind)
{
if (destructor != UNKNOWN and destructor != expectedKind)
throw err::Invalid{_Fmt{"Unable to handle destructor for element type %s, "
"since this container has been primed to use %s-deleters."}
% util::typeStr<TY>() % render(expectedKind)};
destructor = expectedKind;
}
};
}
}//(End)implementation details
/**
* Wrap a vector holding objects of a subtype and
@ -387,7 +264,8 @@ namespace lib {
{
using Coll = Several<I>;
HandlingStrategy<I,E> handling_{};
using Bucket = ArrayBucket<I>;
using Deleter = typename Bucket::Deleter;
public:
SeveralBuilder() = default;
@ -400,6 +278,8 @@ namespace lib {
{ }
/* ===== Builder API ===== */
SeveralBuilder&&
reserve (size_t cntElm)
{
@ -415,6 +295,12 @@ namespace lib {
return move(*this);
}
/**
* Terminal Builder: complete and lock the collection contents.
* @note the SeveralBuilder is sliced away, effectively
* returning only the pointer to the ArrayBucket.
*/
Several<I>
build()
{
@ -435,10 +321,10 @@ namespace lib {
emplaceElm (ARGS&& ...args)
{
// mark when target type is not trivially movable
handling_.template probeMoveCapability<TY>();
probeMoveCapability<TY>();
// ensure sufficient element capacity or the ability to adapt element spread
if (Coll::spread() < reqSiz<TY>() and not (Coll::empty() or handling_.canWildMove()))
if (Coll::spread() < reqSiz<TY>() and not (Coll::empty() or canWildMove()))
throw err::Invalid{_Fmt{"Unable to place element of type %s (size=%d)"
"into container for element size %d."}
% util::typeStr<TY>() % reqSiz<TY>() % Coll::spread()};
@ -446,7 +332,7 @@ namespace lib {
// ensure sufficient storage or verify the ability to re-allocate
if (not (Coll::hasReserve(reqSiz<TY>())
or POL::canExpand(reqSiz<TY>())
or not handling_.lock_move))
or canDynGrow()))
throw err::Invalid{_Fmt{"Unable to accommodate further element of type %s "}
% util::typeStr<TY>()};
@ -465,8 +351,7 @@ namespace lib {
ensureDeleter()
{
// ensure clean-up can be handled properly
typename POL::Fac& factory(*this);
typename ArrayBucket<I>::Deleter deleterFunctor = handling_.template selectDestructor<TY> (factory);
Deleter deleterFunctor = selectDestructor<TY>();
if (Coll::data_->deleter) return;
Coll::data_->deleter = deleterFunctor;
}
@ -493,15 +378,18 @@ namespace lib {
Coll::data_ = POL::realloc (Coll::data_, newCnt,spread);
}
ENSURE (Coll::data_);
if (handling_.canWildMove() and spread != Coll::spread())
if (canWildMove() and spread != Coll::spread())
adjustSpread (spread);
}
void
fitStorage()
{
if (handling_.lock_move or not Coll::data_)
if (not Coll::data)
return;
if (not canDynGrow())
throw err::Invalid{"Unable to shrink storage for Several-collection, "
"since at least one element can not be moved."};
Coll::data_ = POL::realloc (Coll::data_, Coll::size(), Coll::spread());
}
@ -537,6 +425,102 @@ namespace lib {
newPos += idx * newSpread;
std::memmove (newPos, oldPos, util::min (oldSpread,newSpread));
}
/* ==== Logic do decide about possible element handling ==== */
enum DestructionMethod{ UNKNOWN
, TRIVIAL
, ELEMENT
, VIRTUAL
};
static Literal
render (DestructionMethod m)
{
switch (m)
{
case TRIVIAL: return "trivial";
case ELEMENT: return "fixed-element-type";
case VIRTUAL: return "virtual-baseclass";
default:
throw err::Logic{"unknown DestructionMethod"};
}
}
DestructionMethod destructor{UNKNOWN};
bool lock_move{false};
/**
* Select a suitable method for invoking the element destructors
* and build a λ-object to be stored as deleter function alongside
* with the data; this includes a _copy_ of the embedded allocator,
* which in many cases is a monostate empty base class.
* @note this collection is _primed_ by the first element added,
* causing to lock into one of the possible destructor schemes;
* the reason is, we do not retain the information of the individual
* element types and thus we must employ one coherent scheme for all.
*/
template<typename TY>
Deleter
selectDestructor ()
{
typename POL::Fac& factory(*this);
if (is_Subclass<TY,I>() and has_virtual_destructor_v<I>)
{
__ensureMark<TY> (VIRTUAL);
return [factory](ArrayBucket<I>* bucket){ unConst(factory).template destroy<I> (bucket); };
}
if (is_trivially_destructible_v<TY>)
{
__ensureMark<TY> (TRIVIAL);
return [factory](ArrayBucket<I>* bucket){ unConst(factory).template destroy<TY> (bucket); };
}
if (is_same_v<TY,E> and is_Subclass<E,I>())
{
__ensureMark<TY> (ELEMENT);
return [factory](ArrayBucket<I>* bucket){ unConst(factory).template destroy<E> (bucket); };
}
throw err::Invalid{_Fmt{"Unsupported kind of destructor for element type %s."}
% util::typeStr<TY>()};
}
template<typename TY>
void
__ensureMark (DestructionMethod expectedKind)
{
if (destructor != UNKNOWN and destructor != expectedKind)
throw err::Invalid{_Fmt{"Unable to handle destructor for element type %s, "
"since this container has been primed to use %s-deleters."}
% util::typeStr<TY>() % render(expectedKind)};
destructor = expectedKind;
}
/** mark that we're about to accept an otherwise unknown type,
* which can not be trivially moved. This irrevocably disables
* relocations by low-level `memove` for this container instance */
template<typename TY>
void
probeMoveCapability()
{
if (not (is_same_v<TY,E> or is_trivially_copyable_v<TY>))
lock_move = true;
}
bool
canWildMove()
{
return is_trivially_copyable_v<E> and not lock_move;
}
bool
canDynGrow()
{
return not lock_move;
}
};

View file

@ -116,8 +116,8 @@ namespace test{
/** @test TODO demonstrate basic behaviour
* @todo WIP 6/24 define 🔁 implement
/** @test demonstrate basic behaviour
* @todo WIP 6/24 define implement
*/
void
simpleUsage()

View file

@ -81662,8 +81662,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1715627195825" ID="ID_40203233" MODIFIED="1715627201745" TEXT="Details festlegen">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1715627195825" ID="ID_40203233" MODIFIED="1718073928659" TEXT="Details festlegen">
<icon BUILTIN="forward"/>
<node CREATED="1716856805949" ID="ID_792128264" MODIFIED="1716856808446" TEXT="Design">
<node CREATED="1716903878763" ID="ID_1194580959" MODIFIED="1716903884972" TEXT="der Container ist general-purpose">
<node CREATED="1716903981442" ID="ID_1597569499" MODIFIED="1716903997087" TEXT="es handelt sich um ein generell n&#xfc;tzliches Konzept"/>
@ -81707,10 +81707,10 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1716861408733" ID="ID_526137450" MODIFIED="1716861420560" TEXT="Iteration per Lumiera-Iterator"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1716861706141" ID="ID_32527710" MODIFIED="1716861721964" TEXT="knifflige technische Details">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1716861725635" ID="ID_1822785959" MODIFIED="1716861768215" TEXT="festlegen des Element-Spread">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1716861706141" ID="ID_32527710" MODIFIED="1718073921132" TEXT="knifflige technische Details">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1716861725635" ID="ID_1822785959" MODIFIED="1718073775948" TEXT="festlegen des Element-Spread">
<icon BUILTIN="button_ok"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#360bbc" CREATED="1716861791476" ID="ID_1153264423" MODIFIED="1718034898633" TEXT="Zielkonflikt">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1716861799273" ID="ID_521198508" MODIFIED="1716861807996" TEXT="man m&#xf6;chte Elemente verdrahten"/>
@ -81728,7 +81728,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="idea"/>
</node>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1718034857705" ID="ID_725324060" MODIFIED="1718034872054" TEXT="Alignment beachten">
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#4e3b7f" CREATED="1718034857705" FOLDED="true" ID="ID_725324060" MODIFIED="1718073781365" TEXT="Alignment beachten">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1718035817292" ID="ID_908227037" MODIFIED="1718035826853" TEXT="Verwendungen von sizeof(TY)">
<icon BUILTIN="idea"/>
@ -81776,8 +81776,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1718064513825" ID="ID_1012833549" MODIFIED="1718064534602" TEXT="Spread auf das n&#xe4;chst gr&#xf6;&#xdf;ere Vielfache des Element-Alignments aufrunden"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1718064594684" ID="ID_1754699530" MODIFIED="1718064617404" TEXT="Subskript und Platzierung korrekt machen">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1718064594684" ID="ID_1754699530" MODIFIED="1718073758858" TEXT="Subskript und Platzierung korrekt machen">
<icon BUILTIN="button_ok"/>
<node CREATED="1718064618803" ID="ID_371062072" MODIFIED="1718064688256">
<richcontent TYPE="NODE"><html>
<head>
@ -81839,8 +81839,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1716901426183" ID="ID_1212967398" MODIFIED="1716901442101" TEXT="Element-Zugriff und Iteration">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1716901426183" FOLDED="true" ID="ID_1212967398" MODIFIED="1718073753857" TEXT="Element-Zugriff und Iteration">
<icon BUILTIN="button_ok"/>
<node COLOR="#5b280f" CREATED="1716901483423" ID="ID_609493193" MODIFIED="1716901839026" TEXT="Element-Spread wird ein Template-Parameter">
<icon BUILTIN="button_cancel"/>
<node CREATED="1716901840209" ID="ID_594866593" MODIFIED="1716901869287" TEXT="Nein &#x2014; eben grade nicht">
@ -82009,9 +82009,10 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1716901733807" ID="ID_955318801" MODIFIED="1716901736839" TEXT="Typdefinition">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1716904763479" ID="ID_128910376" MODIFIED="1716907418032" TEXT="Several&lt;X&gt;">
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1716901733807" ID="ID_955318801" MODIFIED="1718073722360" TEXT="Typdefinition">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="info"/>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#651a92" CREATED="1716904763479" ID="ID_128910376" MODIFIED="1718073736477" TEXT="Several&lt;X&gt;">
<node CREATED="1716904775435" ID="ID_1732099625" MODIFIED="1716904782191" TEXT="ist bereits vollst&#xe4;ndig spezifiziert"/>
<node CREATED="1716904783055" ID="ID_1106871402" MODIFIED="1716904792309" TEXT="alle leeren Severals sind &#xe4;quivalent"/>
<node CREATED="1716904793417" ID="ID_628691116" MODIFIED="1716905172320" TEXT="polymorphes Verhalten steckt im ArrayBucket"/>
@ -82029,7 +82030,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1716904812326" ID="ID_21128659" MODIFIED="1716907418033" TEXT="SeveralBuilder&lt;I,POL&gt;">
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#651a92" CREATED="1716904812326" ID="ID_21128659" MODIFIED="1718073736482" TEXT="SeveralBuilder&lt;I,POL&gt;">
<node CREATED="1716904860512" ID="ID_1156798049" MODIFIED="1716904866131" TEXT="I : der Interface-Typ"/>
<node CREATED="1716904866967" ID="ID_806748628" MODIFIED="1716904877146" TEXT="POL : eingemischte Policy-Klasse"/>
<node CREATED="1716905087336" ID="ID_292950135" MODIFIED="1716905314680" TEXT="erbt vom Several&lt;I&gt; - Basiscontainer"/>
@ -82039,7 +82040,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1716906944780" ID="ID_1643896091" MODIFIED="1716912449577" TEXT="ArrayBucket&lt;I&gt;">
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#651a92" CREATED="1716906944780" ID="ID_1643896091" MODIFIED="1718073736482" TEXT="ArrayBucket&lt;I&gt;">
<node CREATED="1716907277198" ID="ID_104268426" MODIFIED="1716907281769" TEXT="Subklasse von Bucket"/>
<node CREATED="1716907260424" ID="ID_214476532" MODIFIED="1716912475418" TEXT="liegt am Anfang der Element-Storage"/>
<node CREATED="1716907312241" ID="ID_835337350" MODIFIED="1716912483271" TEXT="umspannt den Anfang vom Storage-Array"/>
@ -82108,7 +82109,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node COLOR="#435e98" CREATED="1717595132644" ID="ID_450689056" MODIFIED="1718038718704" TEXT="spezielle Probleme verbleiben...">
<node COLOR="#435e98" CREATED="1717595132644" FOLDED="true" ID="ID_450689056" MODIFIED="1718073690517" TEXT="spezielle Probleme verbleiben...">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1717595496517" ID="ID_1721370451" MODIFIED="1717595511854" TEXT="man mu&#xdf; einen Funktions-Pointer auf eine Delete-Funktion bereitstellen"/>
<node CREATED="1717595512394" ID="ID_1248004805" MODIFIED="1717595535123" TEXT="diese Funktion mu&#xdf; &#x201e;irgendwo residieren&#x201c;"/>
@ -82221,9 +82222,11 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1716937138104" ID="ID_1463751078" MODIFIED="1716937157438" TEXT="aber: std::realloc gibt den alten Puffer sofort frei"/>
</node>
</node>
<node COLOR="#435e98" CREATED="1716937163164" ID="ID_1513844512" MODIFIED="1717536682524" TEXT="wie geht std::vector damit um?">
<node COLOR="#435e98" CREATED="1716937163164" ID="ID_1513844512" MODIFIED="1718073800702" TEXT="wie geht std::vector damit um?">
<icon BUILTIN="help"/>
<node CREATED="1716990764896" ID="ID_1932292038" MODIFIED="1716990768697" TEXT="Code lesen...">
<icon BUILTIN="info"/>
<node CREATED="1716990764896" FOLDED="true" ID="ID_1932292038" MODIFIED="1718073806810" TEXT="Code lesen...">
<icon BUILTIN="list"/>
<node CREATED="1716990770901" ID="ID_765989351" MODIFIED="1716990794828" TEXT="resize() &#x27f6; _M_default_append(size_type n)">
<node CREATED="1716991624080" ID="ID_1771047546" MODIFIED="1716991629388" TEXT="wenn avail &gt; n">
<node CREATED="1716991641557" ID="ID_1450865359" MODIFIED="1716991679022" TEXT="std::__uninitialized_default_n_a(M_finish, n, _M_get_Tp_allocator());"/>
@ -82304,7 +82307,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node CREATED="1717536199658" ID="ID_1563046053" MODIFIED="1717536544630" TEXT="Fazit">
<node COLOR="#435e98" CREATED="1717536199658" ID="ID_1563046053" MODIFIED="1718073838671" TEXT="Fazit">
<arrowlink COLOR="#62789e" DESTINATION="ID_57717387" ENDARROW="Default" ENDINCLINATION="-21;-195;" ID="Arrow_ID_659541479" STARTARROW="None" STARTINCLINATION="-158;46;"/>
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="forward"/>
<node CREATED="1717536203729" ID="ID_105709507" MODIFIED="1717536524915" TEXT="verwendet kein realloc">
<richcontent TYPE="NOTE"><html>
@ -82332,7 +82337,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1717536689923" ID="ID_57717387" MODIFIED="1717536696459" TEXT="Also: das k&#xf6;nnen wir auch">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1717536689923" ID="ID_57717387" MODIFIED="1718073831823" TEXT="Also: das k&#xf6;nnen wir auch">
<linktarget COLOR="#62789e" DESTINATION="ID_57717387" ENDARROW="Default" ENDINCLINATION="-21;-195;" ID="Arrow_ID_659541479" SOURCE="ID_1563046053" STARTARROW="None" STARTINCLINATION="-158;46;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1717536711508" ID="ID_1202794334" MODIFIED="1717536719580" TEXT="und zwar zweischichtig">
<icon BUILTIN="yes"/>
@ -82340,7 +82346,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1717536736572" ID="ID_489657411" MODIFIED="1717536754798" TEXT="ggfs Zusammenspiel mit dem AllocationCluster"/>
<node CREATED="1717536777230" ID="ID_305862937" MODIFIED="1717536801703" TEXT="max-size: hier ggfs durch den Allocation-Cluster vorgegeben"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1717538242090" ID="ID_1593041374" MODIFIED="1717538261355" TEXT="Zielkonflikt &#x21af;">
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1717538242090" FOLDED="true" ID="ID_1593041374" MODIFIED="1718073864993" TEXT="Zielkonflikt &#x21af;">
<icon BUILTIN="broken-line"/>
<node CREATED="1717538269574" ID="ID_417300580" MODIFIED="1717538300972" TEXT="beliebige Sub-Typen variabler Gr&#xf6;&#xdf;e handhaben"/>
<node CREATED="1717538301896" ID="ID_1296824039" MODIFIED="1717538399557" TEXT="re-Alloc-Verschiebung sauber via move-Konstruktor machen"/>
@ -82407,11 +82413,11 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1717542409083" ID="ID_252983857" MODIFIED="1717542417791" TEXT="Strategy aufbauen">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1717542814132" ID="ID_1446789676" MODIFIED="1717542831827" TEXT="komplett vom Allokator trennen!">
<node COLOR="#338800" CREATED="1717542409083" ID="ID_252983857" MODIFIED="1718073328011" TEXT="Strategy aufbauen">
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1717542814132" FOLDED="true" ID="ID_1446789676" MODIFIED="1718073860751" TEXT="komplett vom Allokator trennen!">
<icon BUILTIN="yes"/>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1717722066869" HGAP="45" ID="ID_1393193544" MODIFIED="1717722085492" TEXT="will nicht recht gelingen" VSHIFT="-7">
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1717722066869" HGAP="45" ID="ID_1393193544" MODIFIED="1718073338469" TEXT="will nicht recht gelingen" VSHIFT="-7">
<icon BUILTIN="smiley-angry"/>
<node CREATED="1717722088033" ID="ID_1385471831" MODIFIED="1717722110690" TEXT="ich will verschiedene Belange zugleich abdecken"/>
<node CREATED="1717722112617" ID="ID_129641323" MODIFIED="1717722144214" TEXT="einerseits habe ich ein realloc() rein auf Basis von byte-Gr&#xf6;&#xdf;en"/>
@ -82428,9 +82434,10 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1717542702415" ID="ID_1473880478" MODIFIED="1717545646724" TEXT="canAdjust &#x27f5; wild-move-Flag"/>
</node>
<node CREATED="1717543060128" ID="ID_1973537913" MODIFIED="1717543071098" TEXT="Handler">
<node CREATED="1717543072032" ID="ID_1791379026" MODIFIED="1717942738739" TEXT="getDeleter()">
<arrowlink COLOR="#e1073d" DESTINATION="ID_1412900866" ENDARROW="Default" ENDINCLINATION="336;-46;" ID="Arrow_ID_453255140" STARTARROW="Default" STARTINCLINATION="344;0;"/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1717546372010" ID="ID_231852526" MODIFIED="1717596420967" TEXT="kl&#xe4;ren: wie wird er konkret verwendet?">
<node COLOR="#338800" CREATED="1717543072032" FOLDED="true" ID="ID_1791379026" MODIFIED="1718073897141" TEXT="selectDestructor()">
<arrowlink COLOR="#2407e1" DESTINATION="ID_1412900866" ENDARROW="Default" ENDINCLINATION="336;-46;" ID="Arrow_ID_453255140" STARTARROW="Default" STARTINCLINATION="283;268;"/>
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1717546372010" FOLDED="true" ID="ID_231852526" MODIFIED="1718073099562" TEXT="kl&#xe4;ren: wie wird er konkret verwendet?">
<icon BUILTIN="help"/>
<node CREATED="1717546388726" ID="ID_1089262988" MODIFIED="1717546407495" TEXT="mu&#xdf; einen Pointer auf ein Trampolin speichern k&#xf6;nnen"/>
<node CREATED="1717546408121" ID="ID_1274735212" MODIFIED="1717546425197" TEXT="mu&#xdf; den Allokator mit einbinden">
@ -82492,8 +82499,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1717632444817" ID="ID_362040312" MODIFIED="1717632448869" TEXT="Speicher freigeben"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1717632477490" ID="ID_83921320" MODIFIED="1717710899555" TEXT="beide Aufgaben m&#xfc;ssen in das Trampolin">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#435e98" CREATED="1717632477490" ID="ID_83921320" MODIFIED="1718073086646" TEXT="beide Aufgaben m&#xfc;ssen in das Trampolin">
<icon BUILTIN="yes"/>
<node CREATED="1717632816553" ID="ID_719956571" MODIFIED="1717632856947" TEXT="geht leider nicht anders...">
<richcontent TYPE="NOTE"><html>
<head/>
@ -82511,8 +82518,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<font NAME="SansSerif" SIZE="10"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1717976409462" ID="ID_1970199405" MODIFIED="1717976419858" TEXT="Darstellung Delter-Trampolin">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1717976409462" FOLDED="true" ID="ID_1970199405" MODIFIED="1718073105957" TEXT="Darstellung Delter-Trampolin">
<icon BUILTIN="button_ok"/>
<node CREATED="1717976432490" ID="ID_1286685499" MODIFIED="1717976455971" TEXT="ein reiner Funktions-Pointer kann keine Instanzen darstellen"/>
<node COLOR="#5b280f" CREATED="1717976482929" ID="ID_185745331" MODIFIED="1717976489323" TEXT="L&#xf6;sung (elaboriert)">
<icon BUILTIN="button_cancel"/>
@ -82542,9 +82549,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1717710755310" ID="ID_342640598" MODIFIED="1717973310165" TEXT="sinnvollerweise mit einer Object-Factory hinterlegen">
<node COLOR="#338800" CREATED="1717710755310" FOLDED="true" ID="ID_342640598" MODIFIED="1718073110052" TEXT="sinnvollerweise mit einer Object-Factory hinterlegen">
<arrowlink COLOR="#687a8b" DESTINATION="ID_310099304" ENDARROW="Default" ENDINCLINATION="-927;146;" ID="Arrow_ID_1881268863" STARTARROW="None" STARTINCLINATION="-199;-12;"/>
<icon BUILTIN="flag-yellow"/>
<icon BUILTIN="button_ok"/>
<node CREATED="1717710901355" ID="ID_718524980" MODIFIED="1717715225349" TEXT="das Meiste ist n&#xe4;mlich generische Boilerplate"/>
<node CREATED="1717715255933" ID="ID_261113900" MODIFIED="1717715273774" TEXT="damit k&#xf6;nnte auch das Thema &#xbb;durchreichen des Basis-Allokators&#xab; generisch gel&#xf6;st werden"/>
<node CREATED="1717980461670" ID="ID_1121455521" MODIFIED="1717980515297" TEXT="speichere direkt eine capture-by-value der Factory/Policy">
@ -82568,27 +82575,44 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="button_cancel"/>
</node>
</node>
<node COLOR="#338800" CREATED="1718073125829" ID="ID_1874275472" MODIFIED="1718073323782" TEXT="Anordnung">
<icon BUILTIN="button_ok"/>
<node CREATED="1718073136703" ID="ID_1748624313" MODIFIED="1718073143770" TEXT="war erst eine Strategy-Klasse"/>
<node CREATED="1718073144358" ID="ID_1791928342" MODIFIED="1718073320994" TEXT="jetzt direkt in die SeveralBuilder-Implementierung integriert">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
...das mach die Verwendung einfacher (kein &quot;template&quot;-Pr&#228;fix vor jeder Methode) und speziell das Deleter-&#955; kann nun direkt auf die geerbte Factory mit dem eingebetteten Allokator durchgreifen; ja der Code ist inzwischen riesengro&#223;, aber alles h&#228;ngt irgendwie mit allem zusammen, und ich sehe nicht, wie ich hier eine Teilkomponente so extrahieren k&#246;nnte, da&#223; der Code wirklich einfacher wird. Jedenfalls die separate Strategy-Klasse ist es nicht...
</p>
</body>
</html>
</richcontent>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1717777101317" ID="ID_826816346" MODIFIED="1717777105434" TEXT="konkret einbinden">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1717777109755" ID="ID_1395035594" MODIFIED="1718038551155" TEXT="neue Elemente erstellen">
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1717777101317" ID="ID_826816346" MODIFIED="1718073676455" TEXT="konkret einbinden">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1717777109755" ID="ID_1395035594" MODIFIED="1718073670145" TEXT="neue Elemente erstellen">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1717777153193" ID="ID_626770308" MODIFIED="1718038519856" TEXT="Element-Typ">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1718038522062" ID="ID_380204485" LINK="#ID_1037000737" MODIFIED="1718038545847" TEXT="getestet"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1717777157905" ID="ID_1190162917" MODIFIED="1717777164089" TEXT="beliebiger Typ">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1717777157905" ID="ID_1190162917" MODIFIED="1718073659584" TEXT="beliebiger Typ">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1717777167167" ID="ID_893092417" MODIFIED="1718038515333" TEXT="Festlegung auf die korrekte Destruktor-Variante">
<icon BUILTIN="button_ok"/>
</node>
<node CREATED="1717777223888" ID="ID_1213625055" MODIFIED="1718038486239" TEXT="die wild-move-Sperre ggfs setzen"/>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1717777186269" ID="ID_473170944" MODIFIED="1717777213678" TEXT="can Destroy?">
<icon BUILTIN="flag-pink"/>
<node COLOR="#338800" CREATED="1717777186269" ID="ID_473170944" MODIFIED="1718073667641" TEXT="can Destroy?">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1717777198480" ID="ID_158380654" MODIFIED="1717777204412" TEXT="canDynGrow?">
<icon BUILTIN="flag-pink"/>
<node COLOR="#338800" CREATED="1717777198480" ID="ID_158380654" MODIFIED="1718073669049" TEXT="canDynGrow?">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1717777116726" ID="ID_1692491444" MODIFIED="1717777127002" TEXT="resize mit Element-Typ">
@ -82624,9 +82648,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="idea"/>
<node CREATED="1717723580796" ID="ID_453265164" MODIFIED="1717796591123" TEXT="der Builder erbt von dieser (Policy Mix-In)"/>
<node CREATED="1717723599686" ID="ID_1353907596" MODIFIED="1717723615688" TEXT="sie mischt ihrerseits eine ElementFactory ein"/>
<node CREATED="1717723625139" ID="ID_1954915705" MODIFIED="1717723635781" TEXT="Adapter-Methoden">
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1717723636675" ID="ID_1612255322" MODIFIED="1717803199017" TEXT="realloc">
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1717723625139" ID="ID_1954915705" MODIFIED="1718073605616" TEXT="Adapter-Methoden">
<node COLOR="#338800" CREATED="1717723636675" ID="ID_1612255322" MODIFIED="1718073597212" TEXT="realloc">
<icon BUILTIN="button_ok"/>
<node CREATED="1717723720004" ID="ID_456348135" MODIFIED="1717723723226" TEXT="Anforderungen">
<node CREATED="1717723724203" ID="ID_54813391" MODIFIED="1717801571693" TEXT="entscheidet intelligent ob und was zu tun ist"/>
<node CREATED="1717723734527" ID="ID_184980735" MODIFIED="1717723746074" TEXT="unterst&#xfc;tzt auch die normale (initiale) Allokation"/>
@ -82677,8 +82701,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node COLOR="#435e98" CREATED="1717980924344" ID="ID_599080738" MODIFIED="1717980947745" TEXT="L&#xf6;sung: auch die AllocationPolicy zus&#xe4;tzlich auf E templaten">
<icon BUILTIN="idea"/>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1717894127145" ID="ID_774641997" MODIFIED="1717894180642" TEXT="andere F&#xe4;lle werden nicht zugelassen">
<icon BUILTIN="flag-pink"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1717894127145" ID="ID_774641997" MODIFIED="1718073590404" TEXT="andere F&#xe4;lle werden nicht zugelassen">
<icon BUILTIN="bell"/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1717894315160" ID="ID_1788527715" MODIFIED="1717894325877" TEXT="auf welcher Ebene wird das gepr&#xfc;ft?">
<icon BUILTIN="help"/>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1717894328830" ID="ID_1955150114" MODIFIED="1717894371012">
@ -82736,14 +82760,14 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1717723649872" ID="ID_1412900866" MODIFIED="1717942738739" TEXT="Deleter einbinden">
<linktarget COLOR="#e1073d" DESTINATION="ID_1412900866" ENDARROW="Default" ENDINCLINATION="336;-46;" ID="Arrow_ID_453255140" SOURCE="ID_1791379026" STARTARROW="Default" STARTINCLINATION="344;0;"/>
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1717894220868" HGAP="34" ID="ID_1883351365" MODIFIED="1717942742521" TEXT="mu&#xdf; passieren sobald wir ein ArrayBucket erstellen" VSHIFT="44">
<node COLOR="#338800" CREATED="1717723649872" ID="ID_1412900866" MODIFIED="1718073552284" TEXT="Deleter einbinden">
<linktarget COLOR="#2407e1" DESTINATION="ID_1412900866" ENDARROW="Default" ENDINCLINATION="336;-46;" ID="Arrow_ID_453255140" SOURCE="ID_1791379026" STARTARROW="Default" STARTINCLINATION="283;268;"/>
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1717894220868" FOLDED="true" HGAP="34" ID="ID_1883351365" MODIFIED="1718073565886" TEXT="mu&#xdf; passieren sobald wir ein ArrayBucket erstellen" VSHIFT="44">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1717942010130" ID="ID_1773419398" MODIFIED="1717942017651" TEXT="systematisch wird schwierig..."/>
<node CREATED="1717942018222" ID="ID_1128164934" MODIFIED="1717942030673" TEXT="pragmatisch: dort wo neue Objekte hinzugef&#xfc;gt werden"/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1717942762161" ID="ID_1712399838" MODIFIED="1717942772934" TEXT="Knackpunkt: kann sich der Deleter &#xe4;ndern?">
<node COLOR="#435e98" CREATED="1717942762161" ID="ID_1712399838" MODIFIED="1718073388598" TEXT="Knackpunkt: kann sich der Deleter &#xe4;ndern?">
<icon BUILTIN="help"/>
<node CREATED="1717942774837" ID="ID_927074944" MODIFIED="1717943198780" TEXT="Regeln f&#xfc;r Deleter-Art">
<arrowlink COLOR="#6172af" DESTINATION="ID_1746173014" ENDARROW="Default" ENDINCLINATION="165;696;" ID="Arrow_ID_28316112" STARTARROW="None" STARTINCLINATION="-72;-321;"/>
@ -82756,19 +82780,12 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1717943344630" ID="ID_115481539" MODIFIED="1717943372882" TEXT="mu&#xdf; ggfs konkreten Allokator einbinden">
<node COLOR="#435e98" CREATED="1717943344630" ID="ID_115481539" MODIFIED="1718073423305" TEXT="mu&#xdf; ggfs konkreten Allokator einbinden">
<icon BUILTIN="yes"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1717943385927" ID="ID_662106434" MODIFIED="1717943434357" TEXT="Deleter-Erstellung wird damit stets zweistufig">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1717943398172" ID="ID_474906646" MODIFIED="1717943434357" TEXT="und findet nur einmal statt (wenn es noch keinen gibt)">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1717943412882" ID="ID_1368104122" MODIFIED="1717943434358" TEXT="damit wird auch die Variante des Element-Typs festgelegt">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1717943441718" ID="ID_1930279043" MODIFIED="1717943474267" TEXT="2.Stufe &#x2259; de-Allokation &#x27f9; an die Policy delegiert">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1717943385927" ID="ID_662106434" MODIFIED="1718073419846" TEXT="Deleter-Erstellung wird damit stets zweistufig"/>
<node CREATED="1717943398172" ID="ID_474906646" MODIFIED="1718073419850" TEXT="und findet nur einmal statt (wenn es noch keinen gibt)"/>
<node CREATED="1717943412882" ID="ID_1368104122" MODIFIED="1718073419849" TEXT="damit wird auch die Variante des Element-Typs festgelegt"/>
<node CREATED="1717943441718" ID="ID_1930279043" MODIFIED="1718073419848" TEXT="2.Stufe &#x2259; de-Allokation &#x27f9; an die Policy delegiert">
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1717943727408" ID="ID_398573642" MODIFIED="1717943750861" TEXT="Konsequenz: Destruktor &#x2260; de-Allokation">
<icon BUILTIN="messagebox_warning"/>
</node>
@ -82792,6 +82809,25 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="idea"/>
</node>
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1718073440103" ID="ID_943867726" MODIFIED="1718073467329" TEXT="Ha! die Factory::delete() ruft ja bereits die Destrukoren auf">
<icon BUILTIN="idea"/>
<node CREATED="1718073469082" ID="ID_1903072390" MODIFIED="1718073481596" TEXT="da haben wir bereits die &#xbb;Zweistufigkeit&#xab;"/>
<node CREATED="1718073482321" ID="ID_1354135269" MODIFIED="1718073503220" TEXT="es gen&#xfc;gt, diese delete()-Funktion in ein Lambda zu packen"/>
<node CREATED="1718073503837" ID="ID_187787677" MODIFIED="1718073530823">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
Trick: capture der factory per value &#10233; <b>Kopie des Allokators</b>
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="forward"/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1717942044777" HGAP="36" ID="ID_1959983303" MODIFIED="1717942720203" TEXT="sicherstellen da&#xdf; er beim realloc weitergegeben wird" VSHIFT="-1">
<icon BUILTIN="button_ok"/>
@ -82814,7 +82850,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1717770993835" ID="ID_1878698297" MODIFIED="1717894070187" TEXT="Problem: Gr&#xf6;&#xdf;e der Basis-Allokation">
<node COLOR="#435e98" CREATED="1717770993835" ID="ID_1878698297" MODIFIED="1718073615124" TEXT="Problem: Gr&#xf6;&#xdf;e der Basis-Allokation">
<linktarget COLOR="#6045d8" DESTINATION="ID_1878698297" ENDARROW="Default" ENDINCLINATION="13;-122;" ID="Arrow_ID_605494253" SOURCE="ID_916393989" STARTARROW="None" STARTINCLINATION="-437;29;"/>
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1717771028662" ID="ID_1266328566" MODIFIED="1717771040728" TEXT="diese k&#xf6;nnte....">
@ -82934,8 +82970,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1717857952662" ID="ID_151747312" MODIFIED="1717858054385" TEXT="adjustStorage">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1717857952662" ID="ID_151747312" MODIFIED="1718073629966" TEXT="adjustStorage">
<icon BUILTIN="button_ok"/>
<node CREATED="1717858103112" ID="ID_665641447" MODIFIED="1717858118107" TEXT="Einstieg f&#xfc;r Storage-Anpassungen">
<node CREATED="1717858205276" ID="ID_1237762599" MODIFIED="1717858215918" TEXT="wird bei Bedarf aufgerufen"/>
<node CREATED="1717858386974" ID="ID_319057950" MODIFIED="1717858400465" TEXT="bekommt nur noch die geforderte Zielkapazit&#xe4;t"/>
@ -82954,7 +82990,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="yes"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1717871024427" ID="ID_554783908" MODIFIED="1717871036535" TEXT="Aufteilung der Funktionalit&#xe4;t">
<node COLOR="#435e98" CREATED="1717871024427" ID="ID_554783908" MODIFIED="1718073620943" TEXT="Aufteilung der Funktionalit&#xe4;t">
<icon BUILTIN="yes"/>
<node CREATED="1717871092594" ID="ID_207458820" MODIFIED="1717871140551" TEXT="Basis-Aktionen">
<node CREATED="1717871217897" ID="ID_925096747" MODIFIED="1717871229116" TEXT="Festlegen Zielpuffergr&#xf6;&#xdf;e"/>
@ -83018,7 +83054,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1717893657320" ID="ID_1877336986" MODIFIED="1717893750263" TEXT="die eigentliche Logik zur Kapazit&#xe4;tssteuerung &#x27f6; SeveralBuilder::adjustStorage()"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1717857964116" ID="ID_1398927698" MODIFIED="1717858080950" TEXT="spread-Erweiterung korrekt handhaben">
<node COLOR="#435e98" CREATED="1717857964116" ID="ID_1398927698" MODIFIED="1718073627126" TEXT="spread-Erweiterung korrekt handhaben">
<linktarget COLOR="#494890" DESTINATION="ID_1398927698" ENDARROW="Default" ENDINCLINATION="-414;28;" ID="Arrow_ID_834912184" SOURCE="ID_1036114720" STARTARROW="None" STARTINCLINATION="389;36;"/>
<icon BUILTIN="yes"/>
<node CREATED="1717858131668" ID="ID_1076555932" MODIFIED="1717858160950" TEXT="mu&#xdf; vorher f&#xfc;r den notwendigen Platz sorgen"/>
@ -83204,12 +83240,12 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1715625082614" ID="ID_1575150785" MODIFIED="1715625089779" TEXT="SeveralBuilder_test">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1716857382440" ID="ID_46730448" MODIFIED="1718037989238" TEXT="simpleUsage">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1716857382440" ID="ID_46730448" MODIFIED="1718073046966" TEXT="simpleUsage">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1717980996623" ID="ID_644007892" MODIFIED="1718037983007" TEXT="Several mit sieben Fibonacci-Zahlen">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1717981006247" ID="ID_1037000737" MODIFIED="1718037985334" TEXT="wieder darauf zugreifen (subscript)">
<node COLOR="#338800" CREATED="1717981006247" FOLDED="true" ID="ID_1037000737" MODIFIED="1718073050249" TEXT="wieder darauf zugreifen (subscript)">
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1717981016452" ID="ID_406273640" MODIFIED="1718035010797" STYLE="fork" TEXT="double free">
<font NAME="SansSerif" SIZE="12"/>
@ -83276,8 +83312,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1718037991596" ID="ID_1929820397" MODIFIED="1718037999077" TEXT="Iteration">
<icon BUILTIN="flag-pink"/>
<node COLOR="#338800" CREATED="1718037991596" ID="ID_1929820397" MODIFIED="1718073046103" TEXT="Iteration">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1716857382441" ID="ID_748929457" MODIFIED="1716857402102" TEXT="check_Builder">