diff --git a/src/lib/allocation-cluster.hpp b/src/lib/allocation-cluster.hpp
index e71752ced..c15a72947 100644
--- a/src/lib/allocation-cluster.hpp
+++ b/src/lib/allocation-cluster.hpp
@@ -21,6 +21,17 @@
** pattern. Optionally it is even possible to skip invocation of object
** destructors, making de-allocation highly efficient (typically the
** memory pages are already cache-cold when about to discarded).
+ ** \par base allocation
+ ** The actual allocation of storage extents uses heap memory expanded in blocks
+ ** of AllocationCluster::EXTENT_SIZ. While the idea is to perform allocations
+ ** mostly at start and then hold and use the memory, the allocation is never
+ ** actually _closed_ — implying that further allocations can be added during
+ ** the whole life time, which may possibly even trigger a further base allocation
+ ** if storage space in the last Extent is exhausted. In theory, it would be possible
+ ** to use a custom allocation (in the AllocationCluster::StorageManager::Extents,
+ ** which is a lib::LinkedElements and could be parametrised with a allocator template).
+ ** Allocations are never discarded, and thus any alloted memory will be kept until
+ ** the whole AllocationCluster is destroyed as a compound.
** \par using as STL allocator
** AllocationCluster::Allocator is an adapter to expose the interface
** expected by std::allocator_traits (and thus usable by all standard compliant
@@ -28,6 +39,9 @@
** including the invocation of their destructors, while relying on the allocator
** to allot and discard bare memory. However, to avoid invoking any destructors,
** the container itself can be created with AllocationCluster::createDisposable.
+ ** This causes the container (front-end) to be emplaced itself into the used
+ ** AllocationCluster — and since the container's destructor will not be invoked
+ ** in this arrangement, the container will not be able to invoke element dtors.
** \par dynamic adjustments
** Under controlled conditions, it is possible to change the size of the latest
** raw allocation handed out, within the limits of the available reserve in the
diff --git a/src/lib/hetero-data.hpp b/src/lib/hetero-data.hpp
new file mode 100644
index 000000000..652e846ec
--- /dev/null
+++ b/src/lib/hetero-data.hpp
@@ -0,0 +1,94 @@
+/*
+ HETERO-DATA.hpp - handle chain of heterogeneous data blocks
+
+ Copyright (C)
+ 2024, Hermann Vosseler
man schreibt die konkrete Implementierung direkt bei der Implementierung des Zieltyps mit
@@ -21333,9 +21331,7 @@
...also wenn wir ViewHook für einen anderen Kinder-Typ brauchen
@@ -21966,9 +21962,7 @@
Entscheidung: NonCopoyable
@@ -22761,9 +22755,7 @@
latürnich
@@ -23493,9 +23485,7 @@
woher soll man das wissen?
@@ -25514,9 +25504,7 @@
wie in Kopf und Rumpf injizieren
@@ -28888,9 +28876,7 @@
nämlich mit minimalem Admin-Overhead,
@@ -33761,9 +33747,7 @@
...und dieser muß deshalb auch schon eine Funktion getAnchorHook() auf dem API bieten
@@ -37741,9 +37725,7 @@
die Konsequenz aus Lösung-1 ist aber nicht wirklich abwegig
@@ -39565,9 +39547,7 @@
einfachers Dragging mit der Maus? oder kommt zum Abschluß eine spezielle Taste? oder eine spezielle Mausgeste?
@@ -40443,9 +40423,7 @@
Resultat:
@@ -40856,9 +40834,7 @@
denn dabei wird gerundet, um die exakte Pixel-Zahl zu erhalten
@@ -41135,9 +41111,7 @@
denn für x ≔ I/S ergibt sich x/I = 1/s
@@ -41595,9 +41569,7 @@
weil es direkt in das Feld px_per_second_ geht
@@ -87412,8 +87384,7 @@ Date: Thu Apr 20 18:53:17 2023 +0200
+ der Build-Prozeß belegt sukzessiv mehrere abstrakte Slots
+
+ Eine compiletime-Lösung setzt zwingend vorraus, daß der Code zur Belegung mehr oder weniger explizit und fest verdrahtet ist
+
+ Ich hab ein ungutes Gefühl, wenn man jetzt sagt, das muß dann halt im Einzelfall programmiert werden. Denn es ist nicht so, daß es hier einen »User« oder »Client« gäbe, wie bei einer klassischen Library. Vielmehr muß später, in einer weiteren Runde, ein Builder implementiert werden, der seinerseits wieder generisch sein soll. Demgegenüber kann das Library-Plug-in zwar Adapter bereitstellen, aber diese Adapter können keine Implementierung einer Parameter-Automation bereitstellen, denn das ist ein zur Medien-Berechnung komplett disjunkter Belang — das heißt, genauso wie es für eine Film-Timeline schon mal eine Video- und eine Audio-Renderpipeline geben wird, wird es zusätzlich auch noch eine Automations-Pipeline geben. Nur daß diese nun auch noch mit der Audio / Videoverarbeitung quer-verknüpft sein muß. .... hoppla — das ist eine neue Einsicht
+
+ und dann gibt es eben doch eine Render-Engine Domain-Ontologie
+
+ ganz analog wie ebenda gefordert werden kann: brauche N Eingabepuffer mit Format F₁ und M Ausgabepuffer mit Format F₂
+
+ das ist die Systematik die auf Level-2 gebraucht wird
+
+ ...das wäre fatal, denn dann würde die Abstraktion zusammenbrechen; etweder der Builder, oder (noch schlimmer) das Library-Plug-in müßte Render-Engine-Internals instrumentieren
+
+ explizit ausgeführte
+
+ Parameterbehandlung
+
+ Es geht um die Verständlichkeit und Wartbarkeit des Codes. Wenn ein derart zentrales Thema überhaupt keinen Niederschlag in konkreten Strukturen findet, sondern nur über eine Konvention abgebildet wird, ist das verwirrend und fehleranfällig. Umso mehr, als hier nun auch noch auf transiente Datenpuffer verwiesen wird.
+
+ Damit wäre nämlich eine relativ sichere Storage auf dem Stack gegeben, und die Gegenwart der Parameter wäre trotzdem stets eindeutig dokumentiert. Auch im Hinblick darauf, daß vermutlich sehr häufig irgend welche Parameter fest gesetzt werden müssen (aber nicht per Automation bestimmt)
+
+ die explizite Behandlung würde damit in das konkrete Weaving-Pattern verlegt
+
+ in diesem Fall hätten alle Bindings die gleiche Port-Subklasse, würden aber beim Zugriff auf die Parameter einen virtual call machen
+
+ wichtigster Vorteil: es ist noch nicht festgelegt
+
+ Ich wollte mehr, und deshalb halte ich die Stelle für das TurnoutSystem offen — obwohl auf gegenwärtigem Stand seine verbleibende Funktionalität komplett in die interne Mechanik integriert werden könnte. Auf diesem gegenwärtigen Stand kann ich die Vorstellung noch nicht weiter entwickeln, weil mir der klare Blick auf den realen Gebrauch in den tatsächlichen Proportionen fehlt — aber ich hoffe, daß sich dann aus dem Einsatz eines Baukasten-Systems irgendwann klarere Muster codifizieren lassen
+
+ Fazit: zurück zum ersten Konzept
+
+ einen Satz Parameter an anderer Stelle platzieren und anhängen
+
+ Der Zugriff erfolgt unchecked, aber ein typsicherer Zugriff soll durch einen compile-time-Overlay gewährleistet sein. Essentiell ist, daß die typsicheren Accessoren erzeugt werden können bevor die konkrete Storage-Adressen bekannt sind
+
Das muß so sein aus Gründen der logischen Konsistenz: Der Invocation-Mechanismus der Render-Engine ist generisch, und das bedeutet, er kann nichts implizit über das zu rendernde Modell wissen; zwar wird für den Build-Vorgang in absolute Placements reduziert, aber diese beziehen sich immer noch auf eine bestimmte Timeline — ebenso wie der Render-Vorgang, der auf einer Timeline abläuft. Das bedeutet, für den Rendervorgang ist das Koordinatensystem implizit, und er gibt nur eine absolute nominal Time relativ dazu an; jedoch wird dieser implizite Kontext in der Job-Planung übersetzt in den Zugriff auf eine bestimmte konkrete Exit-Node. Insofern kann dann ein Job komplett generisch auf der Render-Engine laufen, denn er tarnsportiert sowohl die absolute nominal Time, alsauch die konkrete ExitNode. Das Turnout-System selber ist ebenfalls generisch, und das heißt, es wird nur sinnvoll in Verbindung mit einer ExitNode zur Aufführung gebracht
und diese ist massiv (Millionen Zyklen, allerdings in Speicher, der dann im Cache liegt)
...oder werden sie von der Medien-Berechnung verdrängt?
-
-
+
....die intrusive linked List habe ich nämlich fertig und getestet, zudem ist der Code dafür sehr robust zu verwenden, wenn man ohnehin einen privatenTyp für ein Bucket definiert. Dem gegenüber müßte man die Index-Tabellen-Lösung erst mal konzipieren und austesten, und zudem wäre die wohl eine Spezial-Implementierung und daher auch jedes Mal wieder zu verstehen. Damit ist die Entscheidung klar, man muß wirklich erst mal zeigen daß ein Problem besteht...
per Default ist stets eine absolute nominal Time gegeben