Invocation: develop more complex text data manipulations
The overall goal is eventually to arrive at something akin to a ''»Dummy Media-processing Library«'' * this will offer some „Functionality“ * it will work on different ''kinds'' or ''flavours'' of data * it should provide operations that can be packaged into ''Nodes'' However — at the moment I have no clue how to get there... And thus I'll start out with some rather obvious basic data manipulation functions, and then try to give them meaningful names and descriptors. This in turn will allow to build some multi-step processing netwaorks — which actually is the near-term goal for the ''main effort'' (which is after all, to get the Render Node code into some sufficient state of completion)...
This commit is contained in:
parent
3bdb5b9dd6
commit
ec0c14e129
6 changed files with 240 additions and 66 deletions
|
|
@ -191,7 +191,6 @@ apply functor to each tuple element::
|
|||
- provided as `lib::meta::forEach` in 'lib/meta/tuple-helper.hpp
|
||||
- The design of the `DataTable` with CSV-Formatting is based on this technique, see 'lib/stat/data.hpp'
|
||||
- 'lib/iter-zip.hpp' uses this to construct a tuple-of-iterators
|
||||
- 'test-rand-ontology.cpp' uses this in `manipulateFrame()` to accept an arbitrary number of input chains
|
||||
+
|
||||
unpack iterator into tuple::
|
||||
Under controlled conditions this is possible (even while it seems like time travel from the runtime into
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ PLANNED "Proc Node basics" NodeBasic_test <<END
|
|||
END
|
||||
|
||||
|
||||
PLANNED "Proc Node development" NodeDevel_test <<END
|
||||
TEST "Proc Node test support" NodeDevel_test <<END
|
||||
END
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -24,8 +24,11 @@
|
|||
#include "lib/random.hpp"
|
||||
//#include "lib/util.hpp"
|
||||
|
||||
#include <vector>
|
||||
|
||||
using lib::zip;
|
||||
using lib::izip;
|
||||
using std::vector;
|
||||
|
||||
|
||||
namespace steam {
|
||||
|
|
@ -69,6 +72,8 @@ namespace test {
|
|||
|
||||
processing_generateFrame();
|
||||
processing_generateMultichan();
|
||||
processing_duplicateMultichan();
|
||||
processing_manipulateMultichan();
|
||||
processing_manipulateFrame();
|
||||
processing_combineFrames();
|
||||
}
|
||||
|
|
@ -87,6 +92,7 @@ namespace test {
|
|||
|
||||
generateFrame (buff, frameNr, flavour);
|
||||
CHECK ( buff->isSane());
|
||||
CHECK ( buff->isPristine());
|
||||
CHECK (*buff == TestFrame(frameNr,flavour));
|
||||
}
|
||||
|
||||
|
|
@ -102,19 +108,91 @@ namespace test {
|
|||
uint channels = 1 + rani(50);
|
||||
CHECK (1 <= channels and channels <= 50);
|
||||
|
||||
Buffer buffs[50];
|
||||
Buffer buff[50];
|
||||
for (uint i=0; i<channels; ++i)
|
||||
CHECK (not buffs[i]->isSane());
|
||||
CHECK (not buff[i]->isSane());
|
||||
|
||||
generateMultichan (buffs[0], channels, frameNr, flavour);
|
||||
generateMultichan (buff[0], channels, frameNr, flavour);
|
||||
for (uint i=0; i<channels; ++i)
|
||||
{
|
||||
CHECK (buffs[i]->isSane());
|
||||
CHECK (*(buffs[i]) == TestFrame(frameNr,flavour+i));
|
||||
CHECK (buff[i]->isPristine());
|
||||
CHECK (*(buff[i]) == TestFrame(frameNr,flavour+i));
|
||||
}
|
||||
}
|
||||
|
||||
/** @test function to apply a numeric computation to test data frames
|
||||
|
||||
/** @test clone copy of multichannel test data */
|
||||
void
|
||||
processing_duplicateMultichan()
|
||||
{
|
||||
size_t frameNr = defaultGen.u64();
|
||||
uint flavour = defaultGen.u64();
|
||||
uint channels = 1 + rani(50);
|
||||
Buffer srcBuff[50];
|
||||
generateMultichan (srcBuff[0], channels, frameNr, flavour);
|
||||
|
||||
Buffer clone[50];
|
||||
for (uint i=0; i<channels; ++i)
|
||||
CHECK (not clone[i]->isSane());
|
||||
|
||||
duplicateMultichan (clone[0],srcBuff[0], channels);
|
||||
for (uint i=0; i<channels; ++i)
|
||||
{
|
||||
CHECK (clone[i]->isPristine());
|
||||
CHECK (*(clone[i]) == *(srcBuff[i]));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/** @test multichannel data hash-chain manipulation
|
||||
* - use multichannel pseudo random input data
|
||||
* - store away a clone copy before manipulation
|
||||
* - the #manipulateMultichan() operates in-place in the buffers
|
||||
* - each buffer has been marked with a new checksum afterwards
|
||||
* - and each buffer now differs from original state
|
||||
* - verify that corresponding data points over all channels
|
||||
* have been linked by a hashcode-chain, seeded with the `param`
|
||||
* and then consecutively hashing in data from each channel.
|
||||
*/
|
||||
void
|
||||
processing_manipulateMultichan()
|
||||
{
|
||||
size_t frameNr = defaultGen.u64();
|
||||
uint flavour = defaultGen.u64();
|
||||
uint channels = 1 + rani(50);
|
||||
Buffer buff[50], refData[50];
|
||||
generateMultichan (buff[0], channels, frameNr, flavour);
|
||||
// stash away a copy of the test data for verification
|
||||
duplicateMultichan(refData[0],buff[0], channels);
|
||||
|
||||
for (uint c=0; c<channels; ++c)
|
||||
CHECK (buff[c]->isPristine());
|
||||
|
||||
uint64_t param = defaultGen.u64();
|
||||
manipulateMultichan(buff[0], channels, param);
|
||||
|
||||
const uint SIZ = buff[0]->data64().size();
|
||||
vector<uint64_t> xlink(SIZ, param); // temporary storage for verifying the hash-chain
|
||||
for (uint c=0; c<channels; ++c)
|
||||
{
|
||||
CHECK (buff[c]->isSane()); // checksum matches
|
||||
CHECK (not buff[c]->isPristine()); // data was indeed changed
|
||||
|
||||
CHECK (*(buff[c]) != *(refData[c]));
|
||||
|
||||
for (auto& [i, link] : izip(xlink))
|
||||
{
|
||||
auto const& refPoint = refData[c]->data64()[i];
|
||||
lib::hash::combine (link, refPoint);
|
||||
CHECK (link != refPoint);
|
||||
CHECK (link == buff[c]->data64()[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** @test function to apply a numeric computation to test data frames;
|
||||
* @remark here basically the same hash-chaining is used as for #manipulateMultichan,
|
||||
* but only one hash-chain per data point is used and output is written to a different buffer.
|
||||
*/
|
||||
void
|
||||
processing_manipulateFrame()
|
||||
|
|
|
|||
|
|
@ -77,6 +77,47 @@ namespace test {
|
|||
new(buffArry+i) TestFrame{uint(frameNr), flavour+i};
|
||||
}
|
||||
|
||||
/**
|
||||
* @param chanCnt size of the array of frames to clone
|
||||
* @param inArry pointer to storage holding a TestFrame[chanCnt]
|
||||
* @param outArry pointer to allocated storage sufficient to hold a clone copy of these
|
||||
*/
|
||||
void
|
||||
duplicateMultichan (TestFrame* outArry, TestFrame* inArry, uint chanCnt)
|
||||
{
|
||||
REQUIRE (inArry);
|
||||
REQUIRE (outArry);
|
||||
for (uint i=0; i<chanCnt; ++i)
|
||||
new(outArry+i) TestFrame{inArry[i]};
|
||||
}
|
||||
|
||||
/**
|
||||
* @param chanCnt size of the array of frames to manipulate
|
||||
* @param buffArry pointer to an array of several frames (channels)
|
||||
* @param param parameter to control or »mark« the data manipulation (hash-combining)
|
||||
* @remark this function in-place processing of several channels in one step: data is processed
|
||||
* in 64-bit words, by hash-chaining with \a param and then joining in the data items.
|
||||
* All data buffers will be manipulated and marked with as valid with a new checksum.
|
||||
*/
|
||||
void
|
||||
manipulateMultichan (TestFrame* buffArry, uint chanCnt, uint64_t param)
|
||||
{
|
||||
REQUIRE (buffArry);
|
||||
const uint SIZ = buffArry->data64().size();
|
||||
for (uint i=0; i<SIZ; ++i)
|
||||
{
|
||||
uint64_t feed{param};
|
||||
for (uint c=0; c<chanCnt; ++c)
|
||||
{
|
||||
auto& data = buffArry[c].data64()[i];
|
||||
lib::hash::combine(feed, data);
|
||||
data = feed;
|
||||
}
|
||||
}
|
||||
for (uint c=0; c<chanCnt; ++c)
|
||||
buffArry[c].markChecksum();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param out existing allocation to place the generated TestFrame into
|
||||
* @param in allocation holding the input TestFrame data
|
||||
|
|
|
|||
|
|
@ -40,6 +40,12 @@ namespace test {
|
|||
/** produce planar multi channel output of random data frames */
|
||||
void generateMultichan (TestFrame* buffArry, uint chanCnt, size_t frameNr =0, uint flavour =0);
|
||||
|
||||
/** create an identical clone copy of the planar multi channel frame array */
|
||||
void duplicateMultichan (TestFrame* outArry, TestFrame* inArry, uint chanCnt);
|
||||
|
||||
/** »process« a planar multi channel array of data frames in-place */
|
||||
void manipulateMultichan (TestFrame* buffArry, uint chanCnt, uint64_t param);
|
||||
|
||||
/** »process« random frame date by hash-chaining with a parameter */
|
||||
void manipulateFrame (TestFrame* out, TestFrame const* in, uint64_t param);
|
||||
|
||||
|
|
|
|||
|
|
@ -20093,9 +20093,7 @@
|
|||
<node CREATED="1666307233042" ID="ID_1411306141" MODIFIED="1666307262873" TEXT="...und würde dadurch das differenzierte, partielle Verbergen stören"/>
|
||||
<node CREATED="1666307264414" ID="ID_594632089" MODIFIED="1666307445275" TEXT="⟹ sollte den tatsächlichen visibility-Status wiederherstellen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
nach dem Setzen eines neuen Label-Texts müssen wir die Länge des IDLabel erneut ausmessen, und dazu müssen alle seine Komponenten vorrübergehend visible() gesetzt werden; hatte bisher darauf gesetzt, daß der size-constraint-Algo dann von selber wieder auf den richtigen Status kommt...
|
||||
|
|
@ -20496,9 +20494,7 @@
|
|||
<node CREATED="1666449028556" ID="ID_1698685222" MODIFIED="1666449045090" TEXT="Koordiniert die Anzeige für die ganze TimelinePane"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1666449046546" ID="ID_1275285489" MODIFIED="1666449073667" TEXT="(davon kann es aber mehrere geben)">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
also bitte nicht mit statischen Globals arbeiten!
|
||||
|
|
@ -20944,9 +20940,7 @@
|
|||
</node>
|
||||
<node CREATED="1575137898463" ID="ID_1536688578" MODIFIED="1575137949950" TEXT="diese werden in TrackBody selber implementiert">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
denn, ohne daß dies nach Außen sichtbar wäre, ist TrackBody selbst die ViewHookable-Implementierung
|
||||
|
|
@ -21388,9 +21382,7 @@
|
|||
<node CREATED="1575566591719" ID="ID_159346735" MODIFIED="1575566622379" TEXT="TrackBody -> parent==ViewHook -> Child-TrackBody(=hooked)"/>
|
||||
<node CREATED="1575566626210" ID="ID_668544074" MODIFIED="1575566899896" TEXT="ist dann aber eigentlich redundant">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
denn wenn alle Methoden auf dem TrackBody liegen, kann man diese auch von außen direkt aufrufen
|
||||
|
|
@ -22490,9 +22482,7 @@
|
|||
</node>
|
||||
<node CREATED="1480123741362" ID="ID_586646895" MODIFIED="1576282358085" TEXT="unsauber, hässlich, unglücklich">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<ul>
|
||||
<li>
|
||||
|
|
@ -24060,9 +24050,7 @@
|
|||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1582930831025" ID="ID_1768705376" MODIFIED="1582930913112" TEXT="hatte einzelne Vorfälle im Testcode zum relativen Clip-Placement">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
wenn man die mark "test"-Nachricht an eine Timeline schickt, die vorher per Population "reingeschossen" wurde, ohne sie jemals im UI anzuzeigen. Das heißt, im Moment haben wir da <b>definitiv</b> eine offene Flanke -- allerdings ist das ganze Thema auch bisher ehr ein draft
|
||||
|
|
@ -27442,9 +27430,7 @@
|
|||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1677283530663" ID="ID_643259548" MODIFIED="1677284165733">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
die konkrete Aufgabe ist mit FreeCAD elegant<br />— aber Resultate sind schwer zugänglich —
|
||||
|
|
@ -36016,9 +36002,7 @@
|
|||
<node CREATED="1477343022529" ID="ID_1585028268" MODIFIED="1518487921084" TEXT="owns">
|
||||
<node CREATED="1477343030104" ID="ID_350881879" MODIFIED="1576282358036" TEXT="gtk::UiManager">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
A Gtk::UIManager constructs a user interface (menus and toolbars) from one or more UI definitions,
|
||||
|
|
@ -39420,9 +39404,7 @@
|
|||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node COLOR="#5e4398" CREATED="1621097410434" HGAP="30" ID="ID_222549022" MODIFIED="1621097540645" TEXT="nein: es ist exakt" VSHIFT="-6">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
sobald man globale Screen-Koordinaten für die Delta-Berechnung verwendet; der Button <i>klebt jetzt exakt </i>an der Stelle, an der zuerst geklickt wurde
|
||||
|
|
@ -40771,9 +40753,7 @@
|
|||
</node>
|
||||
<node CREATED="1667604115641" ID="ID_340228791" MODIFIED="1667604155428">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
mein Anspruch ist, hier eine <b>absolut fehlerfrei</b> arbeitende Komponente zu schreiben
|
||||
|
|
@ -41541,9 +41521,7 @@
|
|||
</node>
|
||||
<node CREATED="1667871761244" ID="ID_550353046" MODIFIED="1667871901718" TEXT="hierzu ändere ich die Spezifikation: auch relatives Zoomen kann nun Canvas erweitern">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
warum auch nicht?
|
||||
|
|
@ -42059,9 +42037,7 @@
|
|||
</node>
|
||||
<node CREATED="1668703498792" ID="ID_622549972" MODIFIED="1668703538961">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Vorsicht: Ergebnis-Faktor kann trotzdem <i><font color="#f41bbc">giftig sein</font></i>
|
||||
|
|
@ -42363,9 +42339,7 @@
|
|||
</node>
|
||||
<node COLOR="#435e98" CREATED="1670598462329" ID="ID_1937499858" MODIFIED="1670608058331" TEXT="Einsicht: Problem liegt bei der Umkehrung">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Der Rechenweg ist hier eine »Einbahnstraße« : durch einen Kniff ist es gelungen die Quatisierung zu berechnen Metrik ⟼ pxWidth. Aber die Umkehrfunktion können wir nicht berechnen, weil es in der Berechnung zu einem Überlauf kommt. Daher können wir die Fehler-Korrektur nicht einfach ausrechnen, weil wir nicht einfach von einen Pixel-Δ auf ein Metrik-Δ zurückrechnen können
|
||||
|
|
@ -42767,9 +42741,7 @@
|
|||
<node CREATED="1670684604442" ID="ID_1823756460" MODIFIED="1670684622968" TEXT="dieses Problem habe ich aber später analog zu detox() gelöst"/>
|
||||
<node COLOR="#435e98" CREATED="1670684628318" ID="ID_1042201800" MODIFIED="1670695155347">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
bleibt noch der Belang: die Duration soll hier auf µ-Tick <b>aufgerundet</b>  werden
|
||||
|
|
@ -87673,18 +87645,47 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1730830293781" ID="ID_1464679892" MODIFIED="1730850532210" TEXT="Strukturen der TestDomainOntology anlegen">
|
||||
<arrowlink COLOR="#f01c36" DESTINATION="ID_124715076" ENDARROW="Default" ENDINCLINATION="-1234;-110;" ID="Arrow_ID_1508179375" STARTARROW="None" STARTINCLINATION="1225;76;"/>
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node CREATED="1730850551731" ID="ID_569300878" MODIFIED="1730850558012" TEXT="processing functions">
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1732762364610" ID="ID_1911911586" MODIFIED="1732762650541" TEXT="schrittweise entwickeln was die »Test-Ontology« eigentlich sein soll">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Ich hab das mit der »Domain-Onology« bisher nur auf einem abstrakt-logischen Level konzipiert — nach dem „müßte so hinhauen“-Schema. Auf dem Weg bin ich jetzt so weit, daß ich sehe, was für elementare Berechnugs-Primitive nützlich <i>sein könnten. </i>Also implementiert man die mal und sieht dann weiter....
|
||||
</p>
|
||||
<p>
|
||||
»Dann weiter« läuft darauf hinaus, daß eine »Dummy-Media-Processing-Library« entsteht. Das heißt, die wird dann auch ihre eigene Beschreibung von Datentypen haben, wie.z.B. Anzahl Kanäle. Aktuell sind das erst mal Parameter für TestFrame, aber das würde dann längerfristig auf sowas hinauslaufen wie einen StreamType-ImplType.
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<p>
|
||||
Gut möglich, daß man das überhaupt erst im <i>nächsten Vertical-Slice</i> wird zusammenschalten können
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node CREATED="1730850551731" HGAP="22" ID="ID_569300878" MODIFIED="1732762660137" TEXT="processing functions" VSHIFT="-16">
|
||||
<node COLOR="#338800" CREATED="1730862521858" ID="ID_1019281023" MODIFIED="1730862530365" TEXT="processing_generateFrame">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1730862527871" ID="ID_1565354242" MODIFIED="1730862531851" TEXT="processing_generateMultichan">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1730862533053" ID="ID_708999522" MODIFIED="1730862564593" TEXT="processing_manipulateFrame">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1732762310414" ID="ID_59781046" MODIFIED="1732762335512" TEXT="processing_duplicateMultichan();">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1730862558806" ID="ID_450962417" MODIFIED="1730862564593" TEXT="processing_combineFrames">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1732762310414" ID="ID_1988986104" MODIFIED="1732762334228" TEXT="processing_manipulateMultichan();">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1732762310415" ID="ID_479327342" MODIFIED="1732762332955" TEXT="processing_combineFrames();">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1730862533053" ID="ID_708999522" MODIFIED="1732762330921" TEXT="processing_manipulateFrame">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1730862558806" ID="ID_450962417" MODIFIED="1732762330920" TEXT="processing_combineFrames">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -93390,7 +93391,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1728782162715" ID="ID_647461586" MODIFIED="1728783566268" TEXT="Berechnung unabhängig pro Datenpunkt">
|
||||
<node COLOR="#435e98" CREATED="1728782162715" ID="ID_647461586" MODIFIED="1732761559831" TEXT="Berechnung unabhängig pro Datenpunkt">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
|
|
@ -93399,14 +93400,14 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1732717089403" ID="ID_1509612203" MODIFIED="1732717099901" TEXT="mit Einschränkung : rechne in 64bit"/>
|
||||
<node CREATED="1732717102481" ID="ID_1246427992" MODIFIED="1732717115729" TEXT="also Zugriff über data64()-Array"/>
|
||||
</node>
|
||||
<node CREATED="1732145995543" ID="ID_209219518" MODIFIED="1732146006347" TEXT="Verknüpfung mehrerer Eingabpuffer">
|
||||
<node COLOR="#338800" CREATED="1732145995543" ID="ID_209219518" MODIFIED="1732761553289" TEXT="Verknüpfung mehrerer Eingabpuffer">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1732146009058" ID="ID_422352708" MODIFIED="1732146038271" TEXT="linearer Mix von zwei Eingabepuffern"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1732146039895" ID="ID_136718896" MODIFIED="1732146062196" TEXT="N-fach Kombination mit Parameter-Seed">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1732146039895" ID="ID_136718896" MODIFIED="1732761551198" TEXT="N-fach Kombination mit Parameter-Seed"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728783585707" ID="ID_288581450" MODIFIED="1732146078102" TEXT="für jede Berechnung gibt es eine human-readable spec">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -93418,6 +93419,26 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1732762778889" ID="ID_379286769" MODIFIED="1732762802542" TEXT="das zwingt mich nun, über den nächsten Level nachzudenken">
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1732762847907" ID="ID_321407774" MODIFIED="1732762856074" TEXT="was für eine Spec wird gebraucht?">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1732762860392" ID="ID_1124313267" MODIFIED="1732762883705" TEXT="erst mal: eine »semantische Identität der Funktion«">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1732762887780" ID="ID_1061271359" MODIFIED="1732762948258">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
⟹ als nächstes muß aus aus den Manipulationen eine <i>richtige Funktion</i> gemacht werden
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728772511968" ID="ID_1684753208" MODIFIED="1729981657484" TEXT="EventLog zuschaltbar für jeden Schritt">
|
||||
|
|
@ -93644,16 +93665,44 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1730825075913" ID="ID_265868890" MODIFIED="1730825103541" TEXT="der zweite und dritte Port ist explzit zu verdrahten"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1730827694080" ID="ID_124715076" MODIFIED="1730850532211" TEXT="Test-Code bereitstellen">
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1730827694080" ID="ID_124715076" MODIFIED="1732762760766" TEXT="Test-Code bereitstellen">
|
||||
<linktarget COLOR="#f01c36" DESTINATION="ID_124715076" ENDARROW="Default" ENDINCLINATION="-1234;-110;" ID="Arrow_ID_1508179375" SOURCE="ID_1464679892" STARTARROW="None" STARTINCLINATION="1225;76;"/>
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node CREATED="1730827701591" ID="ID_1382558170" MODIFIED="1730827720498" TEXT="muß nun beginnen, die Test-Processing-Funktionen zu organisieren">
|
||||
<icon BUILTIN="smily_bad"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1730827749568" ID="ID_607130868" MODIFIED="1732716870574" TEXT="die Basis-Funktionen als free-functions realisieren">
|
||||
<node COLOR="#338800" CREATED="1730827749568" ID="ID_607130868" MODIFIED="1732762700480" TEXT="die Basis-Funktionen als free-functions realisieren">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Es geht hier zunächst darum, die eigentliche Rechen-Funktionalität bereitzustellen. Erst in weiteren Schritten werde ich dann daraus eine Test-Manipulations-Umgebung aufmachen, die diese Funktionalität in sinnvolle Operationen und Verknüfpungen verpackt. Was im Moment die Parameter für TestFrame sind, könnte mal die Emulation eines StreamType-ImplType werden
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<arrowlink COLOR="#556273" DESTINATION="ID_391399838" ENDARROW="Default" ENDINCLINATION="-384;24;" ID="Arrow_ID_290133862" STARTARROW="None" STARTINCLINATION="257;-992;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1730828045224" ID="ID_874340553" MODIFIED="1732716867458" TEXT="generateFrame"/>
|
||||
<node COLOR="#435e98" CREATED="1730828224345" ID="ID_1955731193" MODIFIED="1732716867458" TEXT="generateMultichan"/>
|
||||
<node COLOR="#435e98" CREATED="1730828224345" ID="ID_1955731193" MODIFIED="1732716867458" TEXT="generateMultichan">
|
||||
<node CREATED="1732762149470" ID="ID_1342945058" MODIFIED="1732762166590" TEXT="»multi-channel« hier einfach als Array benachbarter TestFrame-Instanzen"/>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1732755174913" ID="ID_1860715528" MODIFIED="1732761928017" TEXT="duplicateMultichan"/>
|
||||
<node COLOR="#435e98" CREATED="1732755180691" ID="ID_1402307258" MODIFIED="1732761519922" TEXT="manipulateMultichan">
|
||||
<node CREATED="1732761940052" ID="ID_681048377" MODIFIED="1732762145519" TEXT="hier Quer-Verkettung korrespondierender Datenpunkte">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Stelle eine Hash-Kette her, die jeweils „quer“ über die Datenpunkte in benachbarten Frames läuft. Ein »param«-Wert dient als Seed und könnte später vom Node-Hash genommen werden. Dann wird der jeweilige original-Datenwert eingehasht und durch das Ergebnis der Kette ersetzt.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node CREATED="1732761976785" ID="ID_996613214" MODIFIED="1732762002294" TEXT="als in-place-Manipulation im Quellbuffer realisiert">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1730828061609" ID="ID_234342122" MODIFIED="1732716867457" TEXT="manipulateFrame">
|
||||
<node COLOR="#338800" CREATED="1730835481751" ID="ID_936086670" MODIFIED="1730835554245" TEXT="brauche nun direkten Zugang zu den payload-Daten">
|
||||
<arrowlink COLOR="#77313e" DESTINATION="ID_442258905" ENDARROW="Default" ENDINCLINATION="381;-48;" ID="Arrow_ID_1047269362" STARTARROW="None" STARTINCLINATION="-36;80;"/>
|
||||
|
|
@ -93668,9 +93717,9 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1730827961401" ID="ID_927640003" MODIFIED="1730827975594" TEXT="die Test-Ontology als Singleton zugänglich machen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1730900496156" ID="ID_744198194" MODIFIED="1730900506692" TEXT="erweiterte Verifikationen für den TestFrame">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1730900509282" ID="ID_683548249" MODIFIED="1730900578353">
|
||||
<node COLOR="#338800" CREATED="1730900496156" ID="ID_744198194" MODIFIED="1732762744509" TEXT="erweiterte Verifikationen für den TestFrame">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1730900509282" ID="ID_683548249" MODIFIED="1732762735846">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
|
|
@ -93683,6 +93732,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</body>
|
||||
</html></richcontent>
|
||||
<arrowlink COLOR="#6f2328" DESTINATION="ID_442258905" ENDARROW="Default" ENDINCLINATION="366;-47;" ID="Arrow_ID_1067356199" STARTARROW="None" STARTINCLINATION="5;52;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1730827998905" ID="ID_1794368282" MODIFIED="1730828011958" TEXT="Adapter-λ bereitstellen">
|
||||
|
|
|
|||
Loading…
Reference in a new issue