diff --git a/src/steam/engine/feed-manifold.hpp b/src/steam/engine/feed-manifold.hpp index 9eb269e65..bf9451c95 100644 --- a/src/steam/engine/feed-manifold.hpp +++ b/src/steam/engine/feed-manifold.hpp @@ -113,6 +113,7 @@ namespace engine { using lib::meta::enable_if; using lib::meta::is_Structured; using lib::meta::forEachIDX; + using lib::meta::ElmTypes; using lib::meta::TySeq; using std::is_pointer; using std::is_reference; @@ -266,7 +267,7 @@ namespace engine { struct _Case>> { enum{ SLOT_O = 1 - , SLOT_I = is_StructBuffs<_Arg>::value? 0 : 1 ////////OOO maybe derive directly from std::conditional? + , SLOT_I = typename ElmTypes<_Arg>::template AndAll()? 0 : 1 }; }; template diff --git a/tests/core/steam/engine/node-base-test.cpp b/tests/core/steam/engine/node-base-test.cpp index 6894ef2fc..b8f8bafde 100644 --- a/tests/core/steam/engine/node-base-test.cpp +++ b/tests/core/steam/engine/node-base-test.cpp @@ -88,24 +88,6 @@ namespace test { using T4 = int*; using T5 = lib::HeteroData; /////////////////////////////////////////////////////////////////////////////////TODO - using lib::meta::ElmTypes; - using S1 = ElmTypes; -SHOW_TYPE(S1) -SHOW_TYPE(S1::Seq) -SHOW_TYPE(S1::Tup) -SHOW_TYPE(S1::Idx) - using S1A = S1::Apply; -SHOW_TYPE(S1A) - using S1AR = ElmTypes::Rebind; -SHOW_TYPE(S1AR) -SHOW_EXPR(S1AR::value) - using S1AA = S1::AndAll; -SHOW_TYPE(S1AA) -SHOW_EXPR(bool(S1AA())) - using S1OA = S1::OrAll; -SHOW_TYPE(S1OA) -SHOW_EXPR(S1OA::value) - auto fun_singleOut = [&](Buffer* buff) { *buff = r1; }; // Example-1: a FeedManifold to adapt a simple generator function @@ -120,7 +102,7 @@ SHOW_EXPR(S1OA::value) // CHECK (m1.param ); BufferProvider& provider = DiagnosticBufferProvider::build(); - BuffHandle buff = provider.lockBufferFor (-55); + BuffHandle buff = provider.lockBufferFor (-55); CHECK (buff.isValid()); CHECK (buff.accessAs() == -55); @@ -136,19 +118,46 @@ SHOW_EXPR(S1OA::value) CHECK (buff.accessAs() == r1); // result: the random number r1 was written into the buffer. // Example-2: adapt a function to process input -> output buffer - auto fun_singleInOut = [](Buffer* in, Buffer* out) { *out = *in; }; + auto fun_singleInOut = [](Buffer* in, Buffer* out) { *out = *in + 1; }; using M2 = FeedManifold; - CHECK ( M2::hasInput());///////////////////////////TODO broken due to overly convoluted logic!!!! + CHECK ( M2::hasInput()); CHECK (not M2::hasParam()); CHECK (1 == M2::FAN_I); CHECK (1 == M2::FAN_O); // instantiate... M2 m2{fun_singleInOut}; -// CHECK (1 == m2.inBuff.array().size()); ///////////TODO : need to »lift« plain types for simplfied logic!!!! + CHECK (1 == m2.inBuff.array().size()); CHECK (1 == m2.outBuff.array().size()); -// CHECK (nullptr == m2.inArgs ); + CHECK (nullptr == m2.inArgs ); CHECK (nullptr == m2.outArgs ); - + + // use the result of the preceding Example-1 as input + // and get a new buffer to capture the output + BuffHandle buffOut = provider.lockBufferFor (-99); + CHECK (buff.accessAs() == r1); +SHOW_EXPR(buff.accessAs()) +SHOW_EXPR(buffOut.accessAs()) + CHECK (buffOut.accessAs() == -55); ///////////////////////////////////////OOO should be -99 --> aliasing of buffer meta records due to bug with hash generation + + // configure the Manifold-2 with this input and output buffer + m2.inBuff.createAt (0, buff); + m2.outBuff.createAt(0, buffOut); + CHECK (m2.inBuff[0].isValid()); + CHECK (m2.inBuff[0].accessAs() == r1 ); + CHECK (m2.outBuff[0].isValid()); + CHECK (m2.outBuff[0].accessAs() == -55); ////////////////////////////////OOO should be -99 + + // connect arguments to buffers + m2.connect(); + CHECK (isSameAdr (m2.inArgs, *buff)); + CHECK (isSameAdr (m2.outArgs, *buffOut)); + CHECK (*m2.outArgs == -55); ////////////////////////////////OOO should be -99 + + m2.invoke(); +SHOW_EXPR(r1) +SHOW_EXPR(*m1.outArgs) +SHOW_EXPR(*m2.outArgs) + CHECK (buffOut.accessAs() == r1+1); } }; diff --git a/wiki/thinkPad.ichthyo.mm b/wiki/thinkPad.ichthyo.mm index 9c6d8b194..d1ae8f6df 100644 --- a/wiki/thinkPad.ichthyo.mm +++ b/wiki/thinkPad.ichthyo.mm @@ -25030,9 +25030,7 @@ - - - +

...and "realizes" the widget @@ -25634,9 +25632,7 @@ - - - +

ermöglicht (abstrahierten) Zugang zum Canvas über einen ViewHook @@ -26268,9 +26264,7 @@ - - - +

nur wenn DisplayFrame selber ein ViewHook wäre @@ -26986,9 +26980,7 @@ - - - +

wenn man nachträglich einzelne Objekte modifiziert, ändern sicn nur diese, aber keine davon abhängigen weiteren Schritte der Konstruktion @@ -27175,9 +27167,7 @@ - - - +

a bytes-like object is required, not "str" @@ -28055,9 +28045,7 @@ - - - +

gegeben... @@ -30045,9 +30033,7 @@ - - - +

demnach ändern wir jetzt den Contrakt @@ -31743,9 +31729,7 @@ - - - +

warum? @@ -34179,9 +34163,7 @@ - - - +

wir verwenden das ClipDelegate aber auch, um in Clips eingebettete Effekte oder die einzelnen Spuren darzustellen. Die Logik für den Anzeigestil muß das mit berücksichtigen @@ -35491,9 +35473,7 @@ - - - +

...um mal was im UI anzeigen zu können @@ -35598,9 +35578,7 @@ - - - +

...nur enabled wenn @@ -36328,9 +36306,7 @@ - - - +

...für Signale, die nicht automatisch detached werden können @@ -36817,9 +36793,7 @@ - - - +

Aufgabe: inject dummy content @@ -37280,9 +37254,7 @@ - - - +

...wobei das auch noch halbfertig ist; später einmal muß es hier eine Abstimmung mit dem Layout-Manager geben, aber diese Abstimmung sollte eigentlich nicht über den ClipPresenter laufen @@ -88526,11 +88498,14 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
- - - + + + + - + + + @@ -88888,8 +88863,18 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
+ + + + + +
+ + + + + -
@@ -91853,8 +91838,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
...wenn möglich alles auf strukturierte Typen heben

- -
+ @@ -92413,8 +92397,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
das ist doch der Teil der immer so mühsam ist....

- - +
@@ -92437,8 +92420,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
extrahiert:  ElmTypes<X>  in variadic-helper.hpp

- - + @@ -92462,6 +92444,17 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
+ + + + +
+ + + + + +
@@ -93732,21 +93725,53 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
- +

- irgendwie binden wir hier einen Handler ein, der »hinten rum« am Lib-Plugin hängt und dafür einen (privaten) Datentyp konstruiert ⟹ diese  Info muß in den Prototyp eingehen + irgendwie binden wir hier einen Handler ein, der »hinten rum« am Lib-Plugin hängt und dafür einen (privaten) Datentyp konstruiert ⟹ diese Information muß in den Prototyp eingehen

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +