Library: lib::Several complete and tested (see #473)

As a replacement for the `RefArray` a new generic container
has been implemented and tested, in interplay with `AllocationCluster`
 * the front-end container `lib::Several<I>` exposes only a reference
   to the ''interface type'' `I`, while hiding any storage details
 * data can only be populated through the `lib::SeveralBuilder`
 * a lot of flexibility is allowed for the actual element data types
 * element storage is maintained in a storage extent, managed through
   a custom allocator (defaulting to `std::allocator` ⟹ heap storage)
This commit is contained in:
Fischlurch 2024-06-19 19:40:03 +02:00
parent cf6abf6a3b
commit f632701f48
5 changed files with 247 additions and 184 deletions

View file

@ -366,7 +366,7 @@ namespace lib {
{
if (not bucket) return false;
size_t currSize = bucket->getAllocSize();
size_t delta = request - bucket->buffSiz;
long delta = long(request) - long(bucket->buffSiz);
return this->mother_->canAdjust (bucket,currSize, currSize+delta);
}

View file

@ -49,24 +49,24 @@
** data storage, especially when the payload data type has alignment requirements
** beyond `alignof(void*)`, which is typically used by the standard heap allocator;
** additional headroom is added proactively in this case, to be able to shift the
** storage buffer ahead to the next alignment boundrary.
** storage buffer ahead to the next alignment boundary.
**
** # Handling of data elements
**
** The ability to emplace a mixture of data types into the storage exposed through
** the lib::Several front-end creates some complexities related to element handling.
** The implementation relies on a rules and criteria based approach to decide on
** The implementation uses generic rules and criteria based approach to decide on
** a case by case base if some given data content is still acceptable. This allows
** for rather tricky low-level usages, but has the downside to detect errors only
** at runtime which in this case is ameliorated by the limitation that elements
** must be provided completely up-front, through the SeveralBuilder.
** - in order to handle any data element, we must be able to invoke its destructor
** - an arbitrary mixture of types can thus only be accepted if either we can
** - an arbitrary mixture of types can thus only be accepted if we can either
** rely on a common virtual base class destructor, or if all data elements
** are trivially destructible; these properties can be detected at compile
** time with the help of the C++ `<type_traits>` library
** - this container can accommodate _non-copyable_ data types, under the proviso
** that the complete storage required is pre-allocated (using `reserve()` from
** that the all the necessary storage is pre-allocated (using `reserve()` from
** the builder API)
** - otherwise, data can be filled in dynamically, expanding the storage as needed,
** given that all existing elements can be safely re-located by move or copy
@ -92,9 +92,8 @@
** relevant when the _interface type_ has only lower alignment requirement,
** but an individual element is added with higher alignment requirements.
** In this case, while the spread is increased, still the placement of
** the interface-type is used as anchor, possibly leading to misalignment.
** the element-type \a E is used as anchor, possibly leading to misalignment.
** @see several-builder-test.cpp
**
*/
@ -166,6 +165,7 @@ namespace lib {
return req;
}
/** determine size of a reserve buffer to place with proper alignment */
size_t inline constexpr
alignRes (size_t alignment)
{
@ -173,6 +173,13 @@ namespace lib {
}
/**
* Generic factory to manage objects within an ArrayBucket<I> storage,
* delegating to a custom allocator \a ALO for memory handling.
* - #create a storage block for a number of objects
* - #createAt construct a single payload object at index position
* - #destroy a storage block with proper clean-up (invoke dtors)
*/
template<class I, template<typename> class ALO>
class ElementFactory
: protected ALO<std::byte>
@ -220,7 +227,7 @@ namespace lib {
using BucketAlloT = typename AlloT::template rebind_traits<Bucket>;
auto bucketAllo = adaptAllocator<Bucket>();
// Step-2 : construct the Bucket metadata | ▽ ArrayBucket ctor arg ▽
// Step-2 : construct the Bucket metadata | ▽ ArrayBucket ctor arg ▽
try { BucketAlloT::construct (bucketAllo, bucket, storageBytes, offset, spread); }
catch(...)
{
@ -274,6 +281,12 @@ namespace lib {
};
/**
* Policy Mix-In used to adapt to the ElementFactory and Allocator.
* @tparam I Interface type (also used in the lib::Several<I> front-end
* @tparam E a common _element type_ to use by default
* @tparam ALO custom allocator template
*/
template<class I, class E, template<typename> class ALO>
struct AllocationPolicy
: ElementFactory<I, ALO>
@ -286,6 +299,7 @@ namespace lib {
/** by default assume that memory is practically unlimited... */
size_t static constexpr ALLOC_LIMIT = size_t(-1) / sizeof(E);
/// Extension point: able to adjust dynamically to the requested size?
bool canExpand(Bucket*, size_t){ return false; }
Bucket*
@ -335,15 +349,35 @@ namespace lib {
}
};
/** Default configuration to use heap memory for lib::Several */
template<class I, class E>
using HeapOwn = AllocationPolicy<I, E, std::allocator>;
}//(End)implementation details
/**
* Wrap a vector holding objects of a subtype and
* provide array-like access using the interface type.
/*************************************************//**
* Builder to create and populate a lib::Several<I>.
* Content elements can be of the _interface type_ \a I,
* or the _default element type_ \a E. When possible, even
* elements of an ad-hoc given, unrelated type can be used.
* The expected standard usage is to place elements of a
* subclass of \a I but in fact the only limitation is that
* later, when using the created lib::Several, all content
* will be accessed through a (forced) cast to type \a I.
* Data (and metadata) will be placed into an _extent,_ which
* lives at a different location, as managed by an Allocator
* (With default configuration, data is heap allocated).
* The expansion behaviour is similar to std::vector, meaning
* that the buffer grows with exponential stepping. However,
* other than std::vector, even non-copyable objects can be
* handled, using #reserve to prepare a suitable allocation.
* @warning due to the flexibility and possible low-level usage
* patterns, consistency checks may throw at runtime,
* when attempting to add an unsuitable element.
*/
template<class I ///< Interface or base type visible on resulting Several<I>
,class E =I ///< a subclass element element type (relevant when not trivially movable and destructible)
@ -370,6 +404,7 @@ namespace lib {
{ }
/* ===== Builder API ===== */
/** cross-builder to use a custom allocator for the lib::Several container */
@ -392,6 +427,18 @@ namespace lib {
return move(*this);
}
/** discard excess reserve capacity.
* @warning typically this requires re-allocation and copy
*/
SeveralBuilder&&
shrinkFit()
{
if (not Coll::empty()
or size() < capacity())
fitStorage();
return move(*this);
}
/** append copies of one or several arbitrary elements */
template<typename VAL, typename...VALS>
SeveralBuilder&&
@ -444,7 +491,7 @@ namespace lib {
}
/**
/***********************************************************//**
* Terminal Builder: complete and lock the collection contents.
* @note the SeveralBuilder is sliced away, effectively
* returning only the pointer to the ArrayBucket.
@ -461,7 +508,7 @@ namespace lib {
size_t capReserve() const { return capacity() - size(); }
private:
private: /* ========= Implementation of element placement ================ */
template<class IT>
void
emplaceCopy (IT& dataSrc)
@ -475,7 +522,7 @@ namespace lib {
emplaceNewElm (ARGS&& ...args)
{
static_assert (is_object_v<TY> and not (is_const_v<TY> or is_volatile_v<TY>));
probeMoveCapability<TY>(); // mark when target type is not (trivially) movable
ensureElementCapacity<TY>(); // sufficient or able to adapt spread
ensureStorageCapacity<TY>(); // sufficient or able to grow buffer
@ -520,7 +567,7 @@ namespace lib {
{
if (not (Coll::empty()
or Coll::hasReserve (requiredSiz, newElms)
or POL::canExpand (Coll::data_, requiredSiz*newElms)
or POL::canExpand (Coll::data_, requiredSiz*(Coll::size() + newElms))
or canDynGrow()))
throw err::Invalid{_Fmt{"Several-container is unable to accommodate further element of type %s; "
"storage reserve (%d bytes ≙ %d elms) exhausted and unable to move "
@ -565,9 +612,9 @@ namespace lib {
void
fitStorage()
{
if (not Coll::data)
return;
if (not canDynGrow())
REQUIRE (not Coll::empty());
if (not (POL::canExpand (Coll::data_, Coll::size())
or 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());
@ -751,6 +798,8 @@ namespace lib {
* `ALO<std::byte>` to create and destroy the memory buffer for content data
* @param args optional dependency wiring arguments, to be passed to the allocator
* @return a new empty SeveralBuilder, configured to use the custom allocator.
* @see lib::AllocationCluster (which provides a custom adaptation)
* @see SeveralBuilder_test::check_CustomAllocator()
*/
template<class I, class E, class POL>
template<template<typename> class ALO, typename...ARGS>

View file

@ -52,8 +52,6 @@
** The container is single-ownership (move-asignable); some additional metadata
** and the data storage reside within an `ArrayBucket<I>`, managed by the allocator.
** In its simplest form, this storage is heap allocated and automatically deleted.
**
** @warning WIP-WIP in rework 6/2025
** @see several-builder.hpp
*/
@ -256,8 +254,6 @@ namespace lib {
return data_
and data_->buffSiz >= size()*spread() + extraSize;
}
private:
};

View file

@ -31,7 +31,6 @@
#include "lib/test/tracking-allocator.hpp"
#include "lib/test/test-coll.hpp"
#include "lib/test/test-helper.hpp"
#include "lib/test/diagnostic-output.hpp"////////////////TODO
#include "lib/allocation-cluster.hpp"
#include "lib/iter-explorer.hpp"
#include "lib/format-util.hpp"
@ -39,11 +38,9 @@
#include "lib/several-builder.hpp"
#include <vector>
#include <array>
using ::test::Test;
using std::vector;
using std::array;
using std::rand;
@ -58,7 +55,7 @@ using util::join;
namespace lib {
namespace test{
namespace { // diagnostic test types
namespace { // invocation tracking diagnostic subclass...
/**
* Instance tracking sub-dummy
@ -85,7 +82,7 @@ namespace test{
{
setVal (getVal() - explore(ext_).resultSum());
}
long
calc (int ii) override
{
@ -163,7 +160,6 @@ namespace test{
/** @test demonstrate basic behaviour
* @todo WIP 6/24 define implement
*/
void
simpleUsage()
@ -184,12 +180,11 @@ namespace test{
* *unchecked wild cast* will happen on access; while certainly dangerous,
* this behaviour allows for special low-level data layout tricks.
* - the results from an iterator can be used to populate by copy
* @todo WIP 6/24 define implement
*/
void
check_Builder()
{
// prepare to verify proper invocation of all constructors / destructors
// prepare to verify proper invocation of all constructors / destructors
Dummy::checksum() = 0;
{ // Scenario-1 : Baseclass and arbitrary subclass elements
@ -274,7 +269,6 @@ namespace test{
* grow dynamically.
* - all these failure conditions are handled properly, including exceptions emanating
* from element constructors; the container remains sane and no memory is leaked.
* @todo WIP 6/24 define implement
*/
void
check_ErrorHandling()
@ -472,6 +466,7 @@ namespace test{
}
/** @test verify correct placement of instances within storage
* - use a low-level pointer calculation for this test to
* draw conclusions regarding the spacing of objects accepted
@ -482,7 +477,6 @@ namespace test{
* move-assign the lib::Several container instance; this
* demonstrates that the latter is just a access front-end,
* while the data elements reside in a fixed storage buffer
* @todo WIP 6/24 define implement
*/
void
check_ElementStorage()
@ -553,15 +547,15 @@ namespace test{
/** @test TODO demonstrate integration with a custom allocator
/** @test demonstrate integration with a custom allocator
* - use the TrackingAllocator to verify balanced handling
* of the underlying raw memory allocations
* - use an AllocationCluster instance to manage the storage
* @todo WIP 6/24 🔁 define implement
*/
void
check_CustomAllocator()
{
// Setup-1: use the TrackingAllocator
CHECK (0 == Dummy::checksum());
CHECK (0 == TrackingAllocator::checksum());
@ -607,72 +601,75 @@ namespace test{
CHECK (0 == TrackingAllocator::use_count());
CHECK (0 == TrackingAllocator::checksum());
AllocationCluster clu;
{
auto builder = makeSeveral<Dummy>()
.withAllocator(clu)
.reserve(4) // use a limited pre-reservation
.fillElm(4); // fill all the allocated space with 4 new elements
size_t buffSiz = sizeof(Dummy) * builder.capacity();
size_t headerSiz = sizeof(ArrayBucket<Dummy>);
expectedAlloc = headerSiz + buffSiz;
SHOW_EXPR(expectedAlloc)
SHOW_EXPR(builder.size())
CHECK (4 == builder.size());
SHOW_EXPR(builder.capacity())
CHECK (4 == builder.capacity());
SHOW_EXPR(clu.numExtents())
CHECK (1 == clu.numExtents()); // AllocationCluster has only opened one extent thus far
SHOW_EXPR(clu.numBytes())
CHECK (expectedAlloc == clu.numBytes()); // and the allocated space matches the demand precisely
{// Setup-2: use an AllocationCLuster instance
AllocationCluster clu;
size_t allotted = clu.numBytes();
CHECK (allotted == 0);
{
auto builder = makeSeveral<Dummy>()
.withAllocator(clu)
.reserve(4) // use a limited pre-reservation
.fillElm(4); // fill all the allocated space with 4 new elements
size_t buffSiz = sizeof(Dummy) * builder.capacity();
size_t headerSiz = sizeof(ArrayBucket<Dummy>);
expectedAlloc = headerSiz + buffSiz;
CHECK (4 == builder.size());
CHECK (4 == builder.capacity());
CHECK (1 == clu.numExtents()); // AllocationCluster has only opened one extent thus far
CHECK (expectedAlloc == clu.numBytes()); // and the allocated space matches the demand precisely
builder.append (Dummy{23}); // now request to add just one further element
SHOW_EXPR(builder.capacity())
CHECK (8 == builder.capacity()); // ...which causes the builder to double up the reserve capacity
builder.append (Dummy{23}); // now request to add just one further element
CHECK (8 == builder.capacity()); // ...which causes the builder to double up the reserve capacity
buffSiz = sizeof(Dummy) * builder.capacity();
expectedAlloc = headerSiz + buffSiz;
SHOW_EXPR(buffSiz)
SHOW_EXPR(buffSiz + expectedAlloc)
SHOW_EXPR(buffSiz + headerSiz)
SHOW_EXPR(builder.size())
SHOW_EXPR(builder.capacity())
SHOW_EXPR(clu.numExtents())
CHECK (1 == clu.numExtents()); // However, AllocationCluster was able to adjust allocation in-place
SHOW_EXPR(clu.numBytes())
CHECK (expectedAlloc == clu.numBytes()); // and thus the new increased buffer is still placed in the first extent
buffSiz = sizeof(Dummy) * builder.capacity();
expectedAlloc = headerSiz + buffSiz;
CHECK (1 == clu.numExtents()); // However, AllocationCluster was able to adjust allocation in-place
CHECK (expectedAlloc == clu.numBytes()); // and thus the new increased buffer is still placed in the first extent
// now perform another unrelated allocation
Dummy& extraDummy = clu.create<Dummy>(55);
SHOW_EXPR(clu.numExtents())
CHECK (1 == clu.numExtents());
SHOW_EXPR(clu.numBytes())
CHECK (clu.numBytes() > expectedAlloc + sizeof(Dummy)); // but now we've used some further space behind that point
builder.reserve(9); // ...which means that the AllocationCluster can no longer adjust dynamically
SHOW_EXPR(builder.size())
CHECK (5 == builder.size()); // .....because this is only possible on the latest allocation opened
SHOW_EXPR(builder.capacity())
CHECK (9 <= builder.capacity()); // And while we still got out increased capacity,
SHOW_EXPR(clu.numExtents())
CHECK (2 == clu.numExtents()); // this was only possible by wasting space and copying into a new extent
SHOW_EXPR(clu.numBytes())
buffSiz = sizeof(Dummy) * builder.capacity();
expectedAlloc = headerSiz + buffSiz;
CHECK (expectedAlloc <= AllocationCluster::max_size());
CHECK (clu.numBytes() == AllocationCluster::max_size()
+ expectedAlloc);
elms = builder.build(); // Note: assigning to the existing front-end (which is storage agnostic)
CHECK (5 == elms.size());
// perform another unrelated allocation
Dummy& extraDummy = clu.create<Dummy>(55);
CHECK (1 == clu.numExtents());
CHECK (clu.numBytes() > expectedAlloc+sizeof(Dummy)); // but now we've used some further space behind that point
builder.reserve(9); // ...which means that the AllocationCluster can no longer adjust dynamically
CHECK (5 == builder.size()); // .....because this is only possible on the latest allocation opened
CHECK (9 <= builder.capacity()); // And while we still got the increased capacity as desired,
CHECK (2 == clu.numExtents()); // this was only possible by wasting space and copying into a new extent
buffSiz = sizeof(Dummy) * builder.capacity();
expectedAlloc = headerSiz + buffSiz;
CHECK (expectedAlloc <= AllocationCluster::max_size());
CHECK (clu.numBytes() == AllocationCluster::max_size()
+ expectedAlloc);
allotted = clu.numBytes();
// request to throw away excess reserve
builder.shrinkFit();
CHECK (5 == builder.size());
CHECK (5 == builder.capacity());
CHECK (allotted > clu.numBytes()); // dynamic adjustment was possible, since it is the latest allocation
allotted = clu.numBytes();
elms = builder.build(); // Note: assigning to the existing front-end (which is storage agnostic)
CHECK (5 == elms.size());
CHECK (23 == elms.back().getVal());
CHECK (55 == extraDummy.getVal());
} // Now the Builder and the ExtraDummy is gone...
CHECK (5 == elms.size()); // while all created elements are still there, sitting in the Allocationcluster
CHECK (23 == elms.back().getVal());
CHECK (55 == extraDummy.getVal());
} // Now the Builder and the ExtraDummy is gone...
CHECK (5 == elms.size()); // while all created elements are still there, sitting in the Allocationcluster
CHECK (23 == elms.back().getVal());
CHECK (2 == clu.numExtents());
}
CHECK (2 == clu.numExtents());
CHECK (clu.numBytes() == allotted);
CHECK (Dummy::checksum() > 0);
elms = move(Several<Dummy>{});
CHECK (Dummy::checksum() == 55); // all elements within Several were cleaned-up...
CHECK (2 == clu.numExtents()); // but the base allocation itself lives as long as the AllocationCluster
CHECK (clu.numBytes() == allotted);
}// AllocationCluster goes out of scope...
CHECK (Dummy::checksum() == 0); // now the (already unreachable) extraDummy was cleaned up
} // WARNING: contents in Several would now be dangling (if we haden't killed them)
};

View file

@ -81073,7 +81073,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</html></richcontent>
</node>
</node>
<node CREATED="1714870490954" ID="ID_433835630" MODIFIED="1714870505595" TEXT="Aufr&#xe4;umen">
<node CREATED="1714870490954" ID="ID_433835630" MODIFIED="1718817901262" TEXT="Aufr&#xe4;umen">
<icon BUILTIN="yes"/>
<node CREATED="1714870511447" ID="ID_698798351" MODIFIED="1714870529856" TEXT="NodeGraphAttachment in ExitNode umwandeln"/>
<node CREATED="1714870530945" ID="ID_1030439043" MODIFIED="1714870546389" TEXT="bisherige skizzierte Rolle er ExitNode zur&#xfc;ckbauen"/>
<node CREATED="1714872094981" ID="ID_1665864694" MODIFIED="1714872109269" TEXT="Reste der BuffTable aus dem 1.Entwurf"/>
@ -81081,7 +81082,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<arrowlink DESTINATION="ID_963083918" ENDARROW="Default" ENDINCLINATION="423;38;" ID="Arrow_ID_674451029" STARTARROW="None" STARTINCLINATION="1145;-57;"/>
</node>
<node CREATED="1715523610870" ID="ID_1129364168" MODIFIED="1715523630439" TEXT="Invocation + StateAdapter + TurnoutSystem fallen zusammen"/>
<node CREATED="1715526750604" ID="ID_208674861" MODIFIED="1715526755607" TEXT="RefArray modernisieren">
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1715526750604" ID="ID_208674861" MODIFIED="1718817889363" TEXT="RefArray modernisieren">
<icon BUILTIN="pencil"/>
<node CREATED="1715526756800" ID="ID_364406773" MODIFIED="1715526765735" TEXT="sollte sich Richtung Concept bewegen"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1715526766314" ID="ID_1523408221" MODIFIED="1715526784381" TEXT="Vorsicht: eine Neben-Verwendung in der Session (ElementTracker)">
<icon BUILTIN="messagebox_warning"/>
@ -81337,12 +81339,13 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1715526315140" ID="ID_266709880" MODIFIED="1715526343297" TEXT="der feste Anteil (Node-Network) wird alloziert via AllocationCluster"/>
<node CREATED="1715526344106" ID="ID_1391623056" MODIFIED="1715526355632" TEXT="ein dynamischer Anteil delegiert an einen BufferManager"/>
</node>
<node CREATED="1715526114305" ID="ID_576332674" MODIFIED="1715526929087" TEXT="Several">
<node COLOR="#338800" CREATED="1715526114305" FOLDED="true" ID="ID_576332674" MODIFIED="1718816094986" TEXT="Several">
<linktarget COLOR="#fbfed6" DESTINATION="ID_576332674" ENDARROW="Default" ENDINCLINATION="-670;-163;" ID="Arrow_ID_18042992" SOURCE="ID_1553624646" STARTARROW="None" STARTINCLINATION="525;35;"/>
<icon BUILTIN="button_ok"/>
<node CREATED="1715526375984" ID="ID_466368192" MODIFIED="1715526390634" TEXT="leichtgewichtiges Front-End zu einer Vector-artigen Collection"/>
<node CREATED="1715526412553" ID="ID_1310310561" MODIFIED="1715526457239" TEXT="bietet zus&#xe4;tzlich die F&#xe4;higkeit zur inplace-Allokation"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1715530825487" ID="ID_744922331" MODIFIED="1715530828707" TEXT="Design">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1715530825487" ID="ID_744922331" MODIFIED="1718816075854" TEXT="Design">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1715530839818" FOLDED="true" ID="ID_1299414083" MODIFIED="1718320555733" TEXT="Analyse">
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1715530844562" ID="ID_598901793" MODIFIED="1718320534356" TEXT="warum nicht einen Vector?">
@ -81530,7 +81533,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1715624536080" ID="ID_614918224" MODIFIED="1715624543338" TEXT="Entscheidungen">
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1715624536080" ID="ID_614918224" MODIFIED="1718816072641" TEXT="Entscheidungen">
<icon BUILTIN="yes"/>
<node CREATED="1715624583813" ID="ID_1547806624" MODIFIED="1715624601374" TEXT="einfache begin/end-Pointer - Implementierung">
<node CREATED="1715624604522" ID="ID_1995705427" MODIFIED="1715624613764" TEXT="analog zu std::vector"/>
@ -81564,8 +81567,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node CREATED="1715625068841" ID="ID_273362995" MODIFIED="1715625074791" TEXT="Implementierung">
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1715625094577" ID="ID_1764137888" MODIFIED="1715625115360" TEXT="mu&#xdf; Allocator-Integration kl&#xe4;ren">
<node COLOR="#338800" CREATED="1715625068841" ID="ID_273362995" MODIFIED="1718816081230" TEXT="Implementierung">
<icon BUILTIN="button_ok"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1715625094577" FOLDED="true" ID="ID_1764137888" MODIFIED="1718816065684" TEXT="mu&#xdf; Allocator-Integration kl&#xe4;ren">
<icon BUILTIN="yes"/>
<node CREATED="1715625132676" ID="ID_741455291" MODIFIED="1715625275278" TEXT="bestehende Allocation-Cluster-Impl erscheint nicht ganz passend">
<linktarget COLOR="#fd2206" DESTINATION="ID_741455291" ENDARROW="Default" ENDINCLINATION="371;-21;" ID="Arrow_ID_148841438" SOURCE="ID_748407633" STARTARROW="None" STARTINCLINATION="988;41;"/>
@ -81624,7 +81628,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</html></richcontent>
</node>
</node>
<node CREATED="1715626381670" ID="ID_365556330" MODIFIED="1715626396019" TEXT="Idee: den Allocation-Cluster unter gleichem Namen im Grund neu schreiben">
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1715626381670" ID="ID_365556330" MODIFIED="1718816061948" TEXT="Idee: den Allocation-Cluster unter gleichem Namen im Grund neu schreiben">
<icon BUILTIN="idea"/>
<node CREATED="1715626414697" ID="ID_280677111" MODIFIED="1715626425820" TEXT="durch den Namen w&#xe4;re die Kontinuit&#xe4;t pro Forma gewahrt"/>
<node CREATED="1715626476945" ID="ID_1929954995" MODIFIED="1715626592916" TEXT="es gibt bisher nur minimale / vorbereitende Verwendungen">
@ -81733,9 +81737,11 @@ 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="1718073928659" TEXT="Details festlegen">
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#338800" CREATED="1715627195825" ID="ID_40203233" MODIFIED="1718815998979" TEXT="Details festlegen">
<icon BUILTIN="forward"/>
<node CREATED="1716856805949" ID="ID_792128264" MODIFIED="1716856808446" TEXT="Design">
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1716856805949" ID="ID_792128264" MODIFIED="1718816042269" TEXT="Design">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="info"/>
<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"/>
<node CREATED="1716903997843" ID="ID_835405424" MODIFIED="1716904010573" TEXT="Funktionalit&#xe4;t ist vergleichbar zu ScopedCollection"/>
@ -81767,6 +81773,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1716857432809" ID="ID_976896851" MODIFIED="1716857436700" TEXT="API">
<node CREATED="1716861302691" ID="ID_346534745" MODIFIED="1716861305151" TEXT="Builder">
<node CREATED="1716861306163" ID="ID_1889956528" MODIFIED="1716861327876" TEXT="kann man direkt konstruieren"/>
<node CREATED="1718816017247" ID="ID_890231451" MODIFIED="1718816031234" TEXT="Methoden zum konstruieren, default-konstruieren, anh&#xe4;ngen"/>
<node CREATED="1716861328512" ID="ID_533852363" MODIFIED="1716861336547" TEXT="convenience front-end: makeSeveral">
<node CREATED="1716861337631" ID="ID_1982319827" MODIFIED="1716861345282" TEXT="kann Typ deduzieren"/>
</node>
@ -81778,8 +81785,8 @@ 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="#eef0c5" COLOR="#990000" CREATED="1716861706141" ID="ID_32527710" MODIFIED="1718073921132" TEXT="knifflige technische Details">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1716861706141" FOLDED="true" ID="ID_32527710" MODIFIED="1718816005620" TEXT="knifflige technische Details">
<icon BUILTIN="button_ok"/>
<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">
@ -82016,7 +82023,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node CREATED="1718635034149" ID="ID_1461604114" MODIFIED="1718635037864" TEXT="Daten-Layout">
<node CREATED="1718635040841" ID="ID_175622224" MODIFIED="1718635051335" TEXT="Front-End &#x2259; reiner smart-Ptr"/>
<node CREATED="1718635052043" ID="ID_484909431" MODIFIED="1718635056781" TEXT="Storage: ArrayBucket">
<node CREATED="1718635052043" FOLDED="true" ID="ID_484909431" MODIFIED="1718815967768" TEXT="Storage: ArrayBucket">
<node COLOR="#5b280f" CREATED="1718635061353" ID="ID_807024103" MODIFIED="1718669795382" TEXT="verschiedene Typ-Sichten">
<linktarget COLOR="#fafec9" DESTINATION="ID_807024103" ENDARROW="Default" ENDINCLINATION="241;-200;" ID="Arrow_ID_1895952533" SOURCE="ID_692581133" STARTARROW="None" STARTINCLINATION="-711;55;"/>
<icon BUILTIN="closed"/>
@ -82229,7 +82236,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1716901733807" ID="ID_955318801" MODIFIED="1718073722360" TEXT="Typdefinition">
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1716901733807" FOLDED="true" 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;">
@ -82284,7 +82291,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1716909012702" ID="ID_1876994172" MODIFIED="1716909016713" TEXT="const-correctness">
<node CREATED="1716909019405" ID="ID_1406909807" MODIFIED="1716909042294" TEXT="ein const Several&lt;X&gt; ist ein Several&lt;const X&gt;"/>
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#ff0000" CREATED="1717594749496" ID="ID_390432519" MODIFIED="1718038723473" TEXT="Allokator-Problem gewaltsam l&#xf6;sen">
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#ff0000" CREATED="1717594749496" FOLDED="true" ID="ID_390432519" MODIFIED="1718815943550" TEXT="Allokator-Problem gewaltsam l&#xf6;sen">
<icon BUILTIN="yes"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1717594765625" ID="ID_1189594619" MODIFIED="1717594883249" TEXT="das Problem">
<linktarget COLOR="#982b52" DESTINATION="ID_1189594619" ENDARROW="Default" ENDINCLINATION="-919;-125;" ID="Arrow_ID_1251242601" SOURCE="ID_891863283" STARTARROW="None" STARTINCLINATION="338;767;"/>
@ -82427,7 +82434,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1716936826666" ID="ID_1382882363" MODIFIED="1716936834769" TEXT="Problem: Objekte verschieben">
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1716936826666" FOLDED="true" ID="ID_1382882363" MODIFIED="1718815945091" TEXT="Problem: Objekte verschieben">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1716936845950" ID="ID_715653412" MODIFIED="1716936862044" TEXT="eigentlich darf man das nur bei trivial kopierbaren Objekten">
<node CREATED="1716936929564" ID="ID_707314614" LINK="https://en.cppreference.com/w/cpp/named_req/TriviallyCopyable" MODIFIED="1716936935390" TEXT="TriviallyCopyable"/>
@ -82442,7 +82449,7 @@ 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="1718073800702" TEXT="wie geht std::vector damit um?">
<node COLOR="#435e98" CREATED="1716937163164" FOLDED="true" ID="ID_1513844512" MODIFIED="1718073800702" TEXT="wie geht std::vector damit um?">
<icon BUILTIN="help"/>
<icon BUILTIN="info"/>
<node CREATED="1716990764896" FOLDED="true" ID="ID_1932292038" MODIFIED="1718073806810" TEXT="Code lesen...">
@ -82557,9 +82564,10 @@ 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="1718073831823" TEXT="Also: das k&#xf6;nnen wir auch">
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1717536689923" FOLDED="true" ID="ID_57717387" MODIFIED="1718815931010" 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"/>
<icon BUILTIN="yes"/>
<icon BUILTIN="ksmiletris"/>
<node CREATED="1717536711508" ID="ID_1202794334" MODIFIED="1717536719580" TEXT="und zwar zweischichtig">
<icon BUILTIN="yes"/>
<node CREATED="1717536720952" ID="ID_438837024" MODIFIED="1717536735768" TEXT="Reserve-oder-Verschieben"/>
@ -82807,8 +82815,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</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="1717777101317" ID="ID_826816346" MODIFIED="1718815893362" TEXT="konkret einbinden">
<icon BUILTIN="button_ok"/>
<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">
@ -82835,14 +82843,17 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node COLOR="#338800" CREATED="1717777127619" ID="ID_42350747" MODIFIED="1718320366608" TEXT="resize auf gegebenen Spread">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1717777134500" ID="ID_1083429601" MODIFIED="1717777151106" TEXT="shrink-to-fit">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1717777134500" ID="ID_1083429601" MODIFIED="1718815890152" TEXT="shrink-to-fit">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#b90b8c" CREATED="1718815899224" HGAP="-7" ID="ID_211783347" MODIFIED="1718815925001" TEXT="(war leichter gesagt als getan)" VSHIFT="4">
<font ITALIC="true" NAME="SansSerif" SIZE="11"/>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1717723412216" ID="ID_1483275702" MODIFIED="1717723419487" TEXT="Allokator flexibel einbinden">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1717723412216" ID="ID_1483275702" MODIFIED="1718815863344" TEXT="Allokator flexibel einbinden">
<icon BUILTIN="button_ok"/>
<node CREATED="1717723422166" ID="ID_1525424957" MODIFIED="1717723517420" TEXT="Anforderungen">
<icon BUILTIN="yes"/>
<node CREATED="1717723426670" ID="ID_1964183784" MODIFIED="1717723456378" TEXT="Standardfall: Heap-Allokation &#xd83e;&#xdc32; mu&#xdf; automatisch funktionieren">
@ -82858,21 +82869,24 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="yes"/>
</node>
</node>
<node CREATED="1717723564508" ID="ID_16935134" MODIFIED="1717723623192" TEXT="verwende eine AllocationPolicy">
<node COLOR="#435e98" CREATED="1717723564508" FOLDED="true" ID="ID_16935134" MODIFIED="1718815860990" TEXT="verwende eine AllocationPolicy">
<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 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 COLOR="#435e98" CREATED="1717723720004" ID="ID_456348135" MODIFIED="1718815818324" TEXT="Anforderungen">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="yes"/>
<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"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1717723747298" ID="ID_1111696667" MODIFIED="1717723776089" TEXT="kann mit dem unterliegenden Allokator eine Spezialbehandlung abstimmen">
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1717723747298" ID="ID_1111696667" MODIFIED="1718815852827" TEXT="kann mit dem unterliegenden Allokator eine Spezialbehandlung abstimmen">
<arrowlink COLOR="#fffcd5" DESTINATION="ID_119150059" ENDARROW="Default" ENDINCLINATION="-54;-105;" ID="Arrow_ID_265552892" STARTARROW="None" STARTINCLINATION="-378;14;"/>
<icon BUILTIN="yes"/>
</node>
</node>
<node COLOR="#338800" CREATED="1717776954529" ID="ID_103031227" MODIFIED="1717894195586" TEXT="Basis-Implementierung">
<node COLOR="#338800" CREATED="1717776954529" FOLDED="true" ID="ID_103031227" MODIFIED="1717894195586" TEXT="Basis-Implementierung">
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1717801589821" ID="ID_1293735403" MODIFIED="1717803186231" TEXT="arbeitet explizit mit ArrayBucket">
<icon BUILTIN="yes"/>
@ -82892,7 +82906,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
<node COLOR="#338800" CREATED="1717777049607" ID="ID_184907732" MODIFIED="1717980968358" TEXT="brauche den konkreten Zieltyp hier">
<node COLOR="#338800" CREATED="1717777049607" FOLDED="true" ID="ID_184907732" MODIFIED="1717980968358" TEXT="brauche den konkreten Zieltyp hier">
<arrowlink COLOR="#339199" DESTINATION="ID_584325941" ENDARROW="Default" ENDINCLINATION="167;18;" ID="Arrow_ID_1090340504" STARTARROW="None" STARTINCLINATION="178;0;"/>
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1717858632242" HGAP="52" ID="ID_230351736" MODIFIED="1717980953018" TEXT="korrekte Methode f&#xfc;r Verschiebung w&#xe4;hlen" VSHIFT="62">
@ -82912,9 +82926,9 @@ 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="#e0ceaa" COLOR="#690f14" CREATED="1717894127145" ID="ID_774641997" MODIFIED="1718073590404" TEXT="andere F&#xe4;lle werden nicht zugelassen">
<icon BUILTIN="bell"/>
<node COLOR="#435e98" CREATED="1717894315160" ID="ID_1788527715" MODIFIED="1718206012876" TEXT="auf welcher Ebene wird das gepr&#xfc;ft?">
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1717894127145" ID="ID_774641997" MODIFIED="1718815737414" TEXT="andere F&#xe4;lle werden nicht zugelassen">
<icon BUILTIN="yes"/>
<node COLOR="#435e98" CREATED="1717894315160" FOLDED="true" ID="ID_1788527715" MODIFIED="1718206012876" TEXT="auf welcher Ebene wird das gepr&#xfc;ft?">
<icon BUILTIN="help"/>
<node COLOR="#435e98" CREATED="1717894328830" ID="ID_1955150114" MODIFIED="1718206021517">
<richcontent TYPE="NODE"><html>
@ -83002,16 +83016,20 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1718815743765" ID="ID_172886807" MODIFIED="1718815755893" TEXT="umfangreich im Test verifiziert">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node CREATED="1717893861445" ID="ID_405289980" MODIFIED="1717893885331" TEXT="Kapazit&#xe4;ts-Steuerung ">
</node>
<node COLOR="#338800" CREATED="1717893861445" FOLDED="true" ID="ID_405289980" MODIFIED="1718815832771" TEXT="Kapazit&#xe4;ts-Steuerung ">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1717776973613" ID="ID_1749910669" MODIFIED="1717776980785" TEXT="exponentielle Erweiterung">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1717776981387" ID="ID_631542593" MODIFIED="1717776987939" TEXT="safety-Limit einbauen">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1718807497816" ID="ID_1980443647" MODIFIED="1718807994990" TEXT="hier m&#xf6;gliche Beschr&#xe4;nkung des Allokators ber&#xfc;cksichtigen">
<node COLOR="#338800" CREATED="1718807497816" FOLDED="true" ID="ID_1980443647" MODIFIED="1718807994990" TEXT="hier m&#xf6;gliche Beschr&#xe4;nkung des Allokators ber&#xfc;cksichtigen">
<linktarget COLOR="#313f5b" DESTINATION="ID_1980443647" ENDARROW="Default" ENDINCLINATION="364;849;" ID="Arrow_ID_1834035862" SOURCE="ID_1147918184" STARTARROW="None" STARTINCLINATION="411;-39;"/>
<icon BUILTIN="button_ok"/>
<node CREATED="1718807514255" ID="ID_1358531504" MODIFIED="1718807523426" TEXT="Heap-Allokator">
@ -83041,7 +83059,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</html></richcontent>
</node>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1718807639230" ID="ID_1297078784" MODIFIED="1718810185655" TEXT="Achtung: zus&#xe4;tzclihen Admin-Overhead in der lib::Several-Storage beachten">
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1718807639230" ID="ID_1297078784" MODIFIED="1718815722477" TEXT="Achtung: zus&#xe4;tzclihen Admin-Overhead in der lib::Several-Storage beachten">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1718807680712" ID="ID_1019078083" MODIFIED="1718807687755" TEXT="zum einen die Gr&#xf6;&#xdf;e des ArrayBucket"/>
<node CREATED="1718807690167" ID="ID_915812333" LINK="#ID_728519799" MODIFIED="1718807743585" TEXT="au&#xdf;erdem: brauche Puffer f&#xfc;r over-alligned-types"/>
@ -83104,7 +83122,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1717723649872" ID="ID_1412900866" MODIFIED="1718073552284" TEXT="Deleter einbinden">
<node COLOR="#338800" CREATED="1717723649872" FOLDED="true" ID="ID_1412900866" MODIFIED="1718815846866" 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">
@ -83187,8 +83205,9 @@ 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="1718328808453" ID="ID_119150059" MODIFIED="1718328816482" TEXT="Spezialisierung f&#xfc;r AllocationCluster">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1718328808453" ID="ID_119150059" MODIFIED="1718815852828" TEXT="Spezialisierung f&#xfc;r AllocationCluster">
<linktarget COLOR="#fffcd5" DESTINATION="ID_119150059" ENDARROW="Default" ENDINCLINATION="-54;-105;" ID="Arrow_ID_265552892" SOURCE="ID_1111696667" STARTARROW="None" STARTINCLINATION="-378;14;"/>
<icon BUILTIN="button_ok"/>
<node CREATED="1718328836352" ID="ID_456408300" MODIFIED="1718328872260" TEXT="Trigger: der Standard-Allocator-Adapter von AllocationCluster">
<icon BUILTIN="info"/>
</node>
@ -83203,9 +83222,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</html></richcontent>
<arrowlink COLOR="#45627f" DESTINATION="ID_868614135" ENDARROW="Default" ENDINCLINATION="228;-16;" ID="Arrow_ID_287792352" STARTARROW="None" STARTINCLINATION="655;33;"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1718328650553" ID="ID_1053724868" MODIFIED="1718328832230" TEXT="dynamische Allokations-&#xc4;nderung einbinden">
<node COLOR="#338800" CREATED="1718328650553" ID="ID_1053724868" MODIFIED="1718815715639" TEXT="dynamische Allokations-&#xc4;nderung einbinden">
<arrowlink COLOR="#415ab7" DESTINATION="ID_1869643772" ENDARROW="Default" ENDINCLINATION="-1433;-63;" ID="Arrow_ID_166309661" STARTARROW="None" STARTINCLINATION="1447;92;"/>
<icon BUILTIN="flag-yellow"/>
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
@ -83328,7 +83347,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="yes"/>
</node>
</node>
<node COLOR="#435e98" CREATED="1717871024427" ID="ID_554783908" MODIFIED="1718073620943" TEXT="Aufteilung der Funktionalit&#xe4;t">
<node COLOR="#435e98" CREATED="1717871024427" FOLDED="true" 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"/>
@ -83393,8 +83412,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1717858161497" ID="ID_114984038" MODIFIED="1717858172964" TEXT="kann danach die bestehenden Elemente verschieben"/>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1716914864769" ID="ID_966642586" MODIFIED="1716914906125" TEXT="Builder-Operationen">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1716914864769" FOLDED="true" ID="ID_966642586" MODIFIED="1718815870047" TEXT="Builder-Operationen">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1717634297656" ID="ID_330412196" MODIFIED="1717688579115" TEXT="Move-builder und Container per Slice ausgeben">
<icon BUILTIN="button_ok"/>
</node>
@ -83413,19 +83432,22 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1716914877848" ID="ID_1535626389" MODIFIED="1718217001870" TEXT="Gr&#xf6;&#xdf;en&#xe4;nderung Allokation">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1716914877848" ID="ID_1535626389" MODIFIED="1718815648566" TEXT="Gr&#xf6;&#xdf;en&#xe4;nderung Allokation">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1718216970318" ID="ID_653307930" MODIFIED="1718216999025" TEXT="Vergr&#xf6;&#xdf;erung: reserve&lt;T&gt;(cnt, size)">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1718216875365" ID="ID_808859315" MODIFIED="1718216924186" TEXT="Handling-Checks vorher">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1716936092764" ID="ID_618217173" MODIFIED="1718216922790" TEXT="Objekte einzeln verschieben">
<node COLOR="#338800" CREATED="1716936092764" FOLDED="true" ID="ID_618217173" MODIFIED="1718815656394" TEXT="Objekte einzeln verschieben">
<icon BUILTIN="button_ok"/>
<node CREATED="1718216902576" ID="ID_1819814974" MODIFIED="1718216911891" TEXT="entweder per bekanntem Element-Typ"/>
<node CREATED="1716936101233" ID="ID_1155209653" MODIFIED="1718216920176" TEXT="oder via std::memmove"/>
</node>
</node>
<node COLOR="#338800" CREATED="1718815642778" ID="ID_434654432" MODIFIED="1718815647339" TEXT="Shrink-to-fit">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node COLOR="#5b280f" CREATED="1716914886169" ID="ID_505410227" MODIFIED="1718297612308" TEXT="&#xc4;nderung Spread">
<icon BUILTIN="button_cancel"/>
@ -83472,8 +83494,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1718807449857" ID="ID_1496143411" MODIFIED="1718807467730" TEXT="beachtet die starke Gr&#xf6;&#xdf;en-Limitierung f&#xfc;r Allokationen im Cluster"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1718147554244" ID="ID_1260306723" MODIFIED="1718147566635" TEXT="convenience-Functions">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1718147554244" ID="ID_1260306723" MODIFIED="1718815614907" TEXT="convenience-Functions">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1718147568653" ID="ID_175737075" MODIFIED="1718147586344" TEXT="makeSeveral ( initializer_list )">
<icon BUILTIN="button_ok"/>
</node>
@ -83503,9 +83525,11 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</html></richcontent>
</node>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1718147675355" ID="ID_1373098366" MODIFIED="1718147685899" TEXT="sinnvolle Syntax f&#xfc;r Allokator??">
<icon BUILTIN="help"/>
<node CREATED="1718150858441" ID="ID_600268938" MODIFIED="1718150918229" TEXT="makeSeveral&lt;I, E&gt;().withAllocator&lt;A&gt;()"/>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1718147675355" FOLDED="true" ID="ID_1373098366" MODIFIED="1718815634826" TEXT="sinnvolle Syntax f&#xfc;r Allokator entwickeln">
<icon BUILTIN="yes"/>
<node CREATED="1718150858441" ID="ID_600268938" MODIFIED="1718815623640" TEXT="makeSeveral&lt;I, E&gt;().withAllocator&lt;A&gt;()">
<icon BUILTIN="idea"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1718151012651" ID="ID_868614135" MODIFIED="1718365124446" TEXT="dazu m&#xfc;&#xdf;te es eine cross-build-Methode geben">
<linktarget COLOR="#45627f" DESTINATION="ID_868614135" ENDARROW="Default" ENDINCLINATION="228;-16;" ID="Arrow_ID_287792352" SOURCE="ID_1562264915" STARTARROW="None" STARTINCLINATION="655;33;"/>
<icon BUILTIN="yes"/>
@ -83521,7 +83545,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</html></richcontent>
<icon BUILTIN="stop-sign"/>
</node>
<node COLOR="#338800" CREATED="1718365424109" ID="ID_1414527850" MODIFIED="1718730128866" TEXT="ben&#xf6;tigt: Schema zum Einrichten des Allokators">
<node COLOR="#338800" CREATED="1718365424109" FOLDED="true" ID="ID_1414527850" MODIFIED="1718730128866" TEXT="ben&#xf6;tigt: Schema zum Einrichten des Allokators">
<icon BUILTIN="button_ok"/>
<node CREATED="1718365443600" ID="ID_826094679" MODIFIED="1718365447214" TEXT="Nutzmuster">
<node CREATED="1718365455761" ID="ID_1839293953" MODIFIED="1718365460053" TEXT="Typ gegeben">
@ -83570,7 +83594,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1718367386303" ID="ID_30749831" MODIFIED="1718367408489" TEXT="idealerweise ohne diese direkt im Header several-builder.hpp referenzieren zu m&#xfc;ssen"/>
</node>
</node>
<node CREATED="1718373522423" ID="ID_93222228" MODIFIED="1718412475211" TEXT="Definition">
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1718373522423" ID="ID_93222228" MODIFIED="1718815604737" TEXT="Definition">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="forward"/>
<node CREATED="1718373526974" ID="ID_1686371317" MODIFIED="1718373556165" TEXT="allo::SetupSeveral&lt;ALO,ARGS...&gt;">
<node CREATED="1718373561831" ID="ID_1037391385" MODIFIED="1718408850509">
@ -83672,7 +83698,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="ksmiletris"/>
</node>
</node>
<node COLOR="#338800" CREATED="1718412437319" ID="ID_947832201" MODIFIED="1718810209984" TEXT="dann Spezialisierung f&#xfc;r AllocationCluster">
<node COLOR="#338800" CREATED="1718412437319" FOLDED="true" ID="ID_947832201" MODIFIED="1718815546245" TEXT="dann Spezialisierung f&#xfc;r AllocationCluster">
<icon BUILTIN="button_ok"/>
<node CREATED="1718412486764" ID="ID_1577108455" MODIFIED="1718412502863" TEXT="Vorbereitung: Forward-Deklarationen">
<node CREATED="1718412503850" ID="ID_1754798061" MODIFIED="1718412512686" TEXT="in lib/allocation-cluster.hpp"/>
@ -83742,8 +83768,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
...ich hab diese Mechanik ganz bewu&#223;t <i>janz domm </i>implementiert &#8212; also mu&#223; praktisch alle Info von oben kommen
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<icon BUILTIN="messagebox_warning"/>
</node>
<node COLOR="#338800" CREATED="1718759774120" ID="ID_280082650" MODIFIED="1718759784624" TEXT="Bucket* mit &#xfc;bergeben">
@ -83777,9 +83802,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1718368775878" ID="ID_1921994351" LINK="#ID_28139752" MODIFIED="1718581587832" TEXT="testen">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1718368775878" FOLDED="true" ID="ID_1921994351" LINK="#ID_28139752" MODIFIED="1718815628790" TEXT="testen">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1718462814861" FOLDED="true" ID="ID_360498640" MODIFIED="1718581744590" TEXT="brauche einen &#xbb;tracking&#xab; Test-Allocator">
<linktarget COLOR="#24309b" DESTINATION="ID_360498640" ENDARROW="Default" ENDINCLINATION="-963;-85;" ID="Arrow_ID_1221752034" SOURCE="ID_1722995316" STARTARROW="None" STARTINCLINATION="-909;93;"/>
<linktarget COLOR="#49596d" DESTINATION="ID_360498640" ENDARROW="Default" ENDINCLINATION="177;-168;" ID="Arrow_ID_1985044400" SOURCE="ID_1938493773" STARTARROW="None" STARTINCLINATION="-601;28;"/>
@ -84210,9 +84234,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1718730232613" ID="ID_194573786" MODIFIED="1718759984199" TEXT="AllocationCluster ankoppeln">
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1718730253250" ID="ID_361490227" MODIFIED="1718730391736" TEXT="m&#xfc;&#xdf;te sogar mit der gleichen schon bestehenden front-End-Instanz funktionieren">
<node COLOR="#338800" CREATED="1718730232613" ID="ID_194573786" MODIFIED="1718815531739" TEXT="AllocationCluster ankoppeln">
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1718730253250" ID="ID_361490227" MODIFIED="1718813076794" TEXT="m&#xfc;&#xdf;te sogar mit der gleichen schon bestehenden front-End-Instanz funktionieren">
<icon BUILTIN="yes"/>
</node>
<node COLOR="#338800" CREATED="1718730287657" ID="ID_1835018318" MODIFIED="1718759949578" TEXT="den gleichen Test-Zyklus mit mehreren re-Allocs machen">
@ -84226,20 +84250,19 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
...da AllocationCluster eine starke Gr&#246;&#223;enbeschr&#228;nkgung hat
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<icon BUILTIN="stop-sign"/>
</node>
</node>
<node COLOR="#338800" CREATED="1718730299524" ID="ID_1847366954" MODIFIED="1718810706376" TEXT="verifizieren, da&#xdf; die dynamische Anpassung stattgefunden hat">
<node COLOR="#338800" CREATED="1718730299524" FOLDED="true" ID="ID_1847366954" MODIFIED="1718810706376" TEXT="verifizieren, da&#xdf; die dynamische Anpassung stattgefunden hat">
<linktarget COLOR="#54b885" DESTINATION="ID_1847366954" ENDARROW="Default" ENDINCLINATION="534;710;" ID="Arrow_ID_510035319" SOURCE="ID_1222886197" STARTARROW="None" STARTINCLINATION="1024;-48;"/>
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1718761161744" ID="ID_532446008" MODIFIED="1718810219869" TEXT="auch demonstrieren, da&#xdf; das nach einer Zwischen-Allokaiton nicht mehr geht">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1718761232124" ID="ID_482647269" MODIFIED="1718761241262" TEXT="Speicherbeschr&#xe4;nkung spricht an">
<node COLOR="#435e98" CREATED="1718761232124" FOLDED="true" ID="ID_482647269" MODIFIED="1718813061195" TEXT="Speicherbeschr&#xe4;nkung spricht an">
<icon BUILTIN="broken-line"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1718761242724" ID="ID_103960271" MODIFIED="1718761290782" TEXT="sollte sie hier nicht">
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1718761242724" ID="ID_103960271" MODIFIED="1718813045181" TEXT="sollte sie hier nicht">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
@ -84247,11 +84270,11 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
denn das eine zus&#228;tzliche Element w&#252;rde locker reinpassen &#8212; und zudem sollte ja nun der Block in den n&#228;chsten Extent migrieren
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<icon BUILTIN="yes"/>
</node>
<node CREATED="1718797226426" ID="ID_1835898397" MODIFIED="1718797232563" TEXT="Beobachtungen">
<node CREATED="1718797226426" ID="ID_1835898397" MODIFIED="1718813055277" TEXT="Beobachtungen">
<icon BUILTIN="list"/>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#990033" CREATED="1718797237918" ID="ID_652382356" MODIFIED="1718800423280" TEXT="verwemdet ensureStorageCapacity den Aufruf Coll::hasReserve korrekt?">
<icon BUILTIN="help"/>
<node CREATED="1718797275521" ID="ID_1971364291" MODIFIED="1718797292795" TEXT="geht es hier um ein Delta oder die absolute Forderung"/>
@ -84308,8 +84331,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
...da&#223; da immer noch high-level-Code dar&#252;ber liegt, der eine inhaltliche Pr&#252;fung gemacht hat, so da&#223; hier nur noch ein Konsistenzcheck vonn&#246;ten ist
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1718798266263" ID="ID_1888657389" MODIFIED="1718798419479" TEXT="realistisch betrachtet &#x2014; zu gut">
<richcontent TYPE="NOTE"><html>
@ -84319,8 +84341,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
...aber realistisch betrachtet ist der AllocationCluster viel zu einfach zu verwenden, als da&#223; man da &#252;berhaupt daran denkt, noch explizit zu pr&#252;fen &#8212; und durch den standard-Allocator-Adapter gibt es unvermeidbar einen direkten Eingang &#252;ber allot().
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1718798156446" ID="ID_726993777" MODIFIED="1718798198816" TEXT="&#x27f9; im RELEASE-Mode w&#xfc;rde wir munter in eine Endlosschleife oder Memory-Corruption laufen">
@ -84339,7 +84360,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1718807769148" ID="ID_114386960" MODIFIED="1718810234819" TEXT="Konsequenz: exponentielle Expansion sinnvoll beschr&#xe4;nken">
<node COLOR="#338800" CREATED="1718807769148" FOLDED="true" ID="ID_114386960" MODIFIED="1718813068100" TEXT="Konsequenz: exponentielle Expansion sinnvoll beschr&#xe4;nken">
<linktarget COLOR="#981848" DESTINATION="ID_114386960" ENDARROW="Default" ENDINCLINATION="17;-94;" ID="Arrow_ID_1052035181" SOURCE="ID_1609091342" STARTARROW="None" STARTINCLINATION="-451;18;"/>
<icon BUILTIN="button_ok"/>
<node CREATED="1718807852641" ID="ID_1147918184" MODIFIED="1718807980725" TEXT="den Allokator abfragen, was er kann">
@ -84358,8 +84379,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node COLOR="#338800" CREATED="1718730317115" ID="ID_1509954190" MODIFIED="1718810242562" TEXT="es sollte sich genau die erwartete Speicherbelegung ergeben">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1718730353373" ID="ID_819034170" MODIFIED="1718730388372" TEXT="Objekt-Cleanup findet statt &#x2014; aber keine de-Allokation">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1718730353373" ID="ID_819034170" MODIFIED="1718815529742" TEXT="Objekt-Cleanup findet statt &#x2014; aber keine de-Allokation">
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
@ -84368,8 +84389,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1717794532666" ID="ID_1285152534" MODIFIED="1717810981399" TEXT="Implementierungs-Logik aufbauen">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1717794532666" FOLDED="true" ID="ID_1285152534" MODIFIED="1718815702542" TEXT="Implementierungs-Logik aufbauen">
<icon BUILTIN="button_ok"/>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1717794550220" HGAP="4" ID="ID_1034302214" MODIFIED="1718581604449" STYLE="bubble" TEXT="das ist hier eine besondere Herausforderung...." VSHIFT="15">
<richcontent TYPE="NOTE"><html>
<head/>
@ -84382,7 +84403,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<edge COLOR="#a24d4d"/>
<icon BUILTIN="messagebox_warning"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1717794645742" ID="ID_1610453521" MODIFIED="1717796458652" TEXT="Methode: den Lebenszyklus konzeptionell durchgehen">
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#004099" CREATED="1717794645742" ID="ID_1610453521" MODIFIED="1718815683443" TEXT="Methode: den Lebenszyklus konzeptionell durchgehen">
<icon BUILTIN="idea"/>
<node CREATED="1717794669044" ID="ID_1613672201" MODIFIED="1717794729917" TEXT="jeweils mit einer Fall-Matrix gem&#xe4;&#xdf; der Analyse f&#xfc;r die Strategy">
<arrowlink COLOR="#705cb0" DESTINATION="ID_664027664" ENDARROW="Default" ENDINCLINATION="-687;54;" ID="Arrow_ID_440255158" STARTARROW="None" STARTINCLINATION="395;-572;"/>
@ -84509,8 +84530,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1715625082614" ID="ID_1575150785" MODIFIED="1718219667879" TEXT="SeveralBuilder_test">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1715625082614" FOLDED="true" ID="ID_1575150785" MODIFIED="1718815990818" TEXT="SeveralBuilder_test">
<icon BUILTIN="button_ok"/>
<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">
@ -84758,7 +84779,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="button_ok"/>
</node>
</node>
<node COLOR="#338800" CREATED="1716857382441" ID="ID_1397767362" MODIFIED="1718298219855" TEXT="check_ElementStorage">
<node COLOR="#338800" CREATED="1716857382441" ID="ID_1397767362" MODIFIED="1718815987574" TEXT="check_ElementStorage">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1718290606176" ID="ID_1457988951" MODIFIED="1718290634409" TEXT="grunds&#xe4;tzlich: Platzierung mit gleichm&#xe4;&#xdf;igem Spread">
<icon BUILTIN="button_ok"/>
@ -84811,8 +84832,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1716857382442" ID="ID_28139752" MODIFIED="1718730880415" TEXT="check_CustomAllocator">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1716857382442" ID="ID_28139752" MODIFIED="1718815985754" TEXT="check_CustomAllocator">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1718674224723" ID="ID_1342074261" MODIFIED="1718730876075" TEXT="Verwendung eines generischen Custom-Allocators testen">
<arrowlink COLOR="#2a81b2" DESTINATION="ID_1938493773" ENDARROW="Default" ENDINCLINATION="-141;780;" ID="Arrow_ID_814216426" STARTARROW="None" STARTINCLINATION="664;-34;"/>
<icon BUILTIN="button_ok"/>