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:
parent
6f3bfb5ff3
commit
773325f1bc
3 changed files with 237 additions and 217 deletions
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -81662,8 +81662,8 @@ Date:   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ützliches Konzept"/>
|
||||
|
|
@ -81707,10 +81707,10 @@ Date:   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öchte Elemente verdrahten"/>
|
||||
|
|
@ -81728,7 +81728,7 @@ Date:   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:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1718064513825" ID="ID_1012833549" MODIFIED="1718064534602" TEXT="Spread auf das nächst größ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:   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 — eben grade nicht">
|
||||
|
|
@ -82009,9 +82009,10 @@ Date:   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<X>">
|
||||
<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<X>">
|
||||
<node CREATED="1716904775435" ID="ID_1732099625" MODIFIED="1716904782191" TEXT="ist bereits vollständig spezifiziert"/>
|
||||
<node CREATED="1716904783055" ID="ID_1106871402" MODIFIED="1716904792309" TEXT="alle leeren Severals sind äquivalent"/>
|
||||
<node CREATED="1716904793417" ID="ID_628691116" MODIFIED="1716905172320" TEXT="polymorphes Verhalten steckt im ArrayBucket"/>
|
||||
|
|
@ -82029,7 +82030,7 @@ Date:   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<I,POL>">
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#651a92" CREATED="1716904812326" ID="ID_21128659" MODIFIED="1718073736482" TEXT="SeveralBuilder<I,POL>">
|
||||
<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<I> - Basiscontainer"/>
|
||||
|
|
@ -82039,7 +82040,7 @@ Date:   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<I>">
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#651a92" CREATED="1716906944780" ID="ID_1643896091" MODIFIED="1718073736482" TEXT="ArrayBucket<I>">
|
||||
<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:   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ß einen Funktions-Pointer auf eine Delete-Funktion bereitstellen"/>
|
||||
<node CREATED="1717595512394" ID="ID_1248004805" MODIFIED="1717595535123" TEXT="diese Funktion muß „irgendwo residieren“"/>
|
||||
|
|
@ -82221,9 +82222,11 @@ Date:   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() ⟶ _M_default_append(size_type n)">
|
||||
<node CREATED="1716991624080" ID="ID_1771047546" MODIFIED="1716991629388" TEXT="wenn avail > 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:   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:   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önnen wir auch">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1717536689923" ID="ID_57717387" MODIFIED="1718073831823" TEXT="Also: das kö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:   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 ↯">
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1717538242090" FOLDED="true" ID="ID_1593041374" MODIFIED="1718073864993" TEXT="Zielkonflikt ↯">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<node CREATED="1717538269574" ID="ID_417300580" MODIFIED="1717538300972" TEXT="beliebige Sub-Typen variabler Größe handhaben"/>
|
||||
<node CREATED="1717538301896" ID="ID_1296824039" MODIFIED="1717538399557" TEXT="re-Alloc-Verschiebung sauber via move-Konstruktor machen"/>
|
||||
|
|
@ -82407,11 +82413,11 @@ Date:   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ößen"/>
|
||||
|
|
@ -82428,9 +82434,10 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1717542702415" ID="ID_1473880478" MODIFIED="1717545646724" TEXT="canAdjust ⟵ 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ä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ären: wie wird er konkret verwendet?">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1717546388726" ID="ID_1089262988" MODIFIED="1717546407495" TEXT="muß einen Pointer auf ein Trampolin speichern können"/>
|
||||
<node CREATED="1717546408121" ID="ID_1274735212" MODIFIED="1717546425197" TEXT="muß den Allokator mit einbinden">
|
||||
|
|
@ -82492,8 +82499,8 @@ Date:   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üssen in das Trampolin">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#435e98" CREATED="1717632477490" ID="ID_83921320" MODIFIED="1718073086646" TEXT="beide Aufgaben mü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:   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ösung (elaboriert)">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
|
|
@ -82542,9 +82549,9 @@ Date:   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ämlich generische Boilerplate"/>
|
||||
<node CREATED="1717715255933" ID="ID_261113900" MODIFIED="1717715273774" TEXT="damit könnte auch das Thema »durchreichen des Basis-Allokators« generisch gelö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:   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 "template"-Präfix vor jeder Methode) und speziell das Deleter-λ kann nun direkt auf die geerbte Factory mit dem eingebetteten Allokator durchgreifen; ja der Code ist inzwischen riesengroß, aber alles hängt irgendwie mit allem zusammen, und ich sehe nicht, wie ich hier eine Teilkomponente so extrahieren könnte, daß 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:   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ützt auch die normale (initiale) Allokation"/>
|
||||
|
|
@ -82677,8 +82701,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node COLOR="#435e98" CREATED="1717980924344" ID="ID_599080738" MODIFIED="1717980947745" TEXT="Lösung: auch die AllocationPolicy zusätzlich auf E templaten">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1717894127145" ID="ID_774641997" MODIFIED="1717894180642" TEXT="andere Fälle werden nicht zugelassen">
|
||||
<icon BUILTIN="flag-pink"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1717894127145" ID="ID_774641997" MODIFIED="1718073590404" TEXT="andere Fä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üft?">
|
||||
<icon BUILTIN="help"/>
|
||||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1717894328830" ID="ID_1955150114" MODIFIED="1717894371012">
|
||||
|
|
@ -82736,14 +82760,14 @@ Date:   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ß 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ß 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ügt werden"/>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1717942762161" ID="ID_1712399838" MODIFIED="1717942772934" TEXT="Knackpunkt: kann sich der Deleter ändern?">
|
||||
<node COLOR="#435e98" CREATED="1717942762161" ID="ID_1712399838" MODIFIED="1718073388598" TEXT="Knackpunkt: kann sich der Deleter ändern?">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1717942774837" ID="ID_927074944" MODIFIED="1717943198780" TEXT="Regeln fü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:   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ß ggfs konkreten Allokator einbinden">
|
||||
<node COLOR="#435e98" CREATED="1717943344630" ID="ID_115481539" MODIFIED="1718073423305" TEXT="muß 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 ≙ de-Allokation ⟹ 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 ≙ de-Allokation ⟹ an die Policy delegiert">
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1717943727408" ID="ID_398573642" MODIFIED="1717943750861" TEXT="Konsequenz: Destruktor ≠ de-Allokation">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
|
|
@ -82792,6 +82809,25 @@ Date:   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 »Zweistufigkeit«"/>
|
||||
<node CREATED="1718073482321" ID="ID_1354135269" MODIFIED="1718073503220" TEXT="es genü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 ⟹ <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ß er beim realloc weitergegeben wird" VSHIFT="-1">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
|
|
@ -82814,7 +82850,7 @@ Date:   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öße der Basis-Allokation">
|
||||
<node COLOR="#435e98" CREATED="1717770993835" ID="ID_1878698297" MODIFIED="1718073615124" TEXT="Problem: Größ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önnte....">
|
||||
|
|
@ -82934,8 +82970,8 @@ Date:   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ü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ät"/>
|
||||
|
|
@ -82954,7 +82990,7 @@ Date:   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ät">
|
||||
<node COLOR="#435e98" CREATED="1717871024427" ID="ID_554783908" MODIFIED="1718073620943" TEXT="Aufteilung der Funktionalitä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öße"/>
|
||||
|
|
@ -83018,7 +83054,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1717893657320" ID="ID_1877336986" MODIFIED="1717893750263" TEXT="die eigentliche Logik zur Kapazitätssteuerung ⟶ 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ß vorher für den notwendigen Platz sorgen"/>
|
||||
|
|
@ -83204,12 +83240,12 @@ Date:   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:   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">
|
||||
|
|
|
|||
Loading…
Reference in a new issue