diff --git a/src/steam/engine/node-builder.hpp b/src/steam/engine/node-builder.hpp index 18fabd513..3afc11253 100644 --- a/src/steam/engine/node-builder.hpp +++ b/src/steam/engine/node-builder.hpp @@ -91,6 +91,7 @@ #define ENGINE_NODE_BUILDER_H +#include "steam/engine/weaving-pattern-builder.hpp" #include "steam/engine/proc-node.hpp" #include "steam/engine/turnout.hpp" #include "lib/several-builder.hpp" @@ -107,10 +108,7 @@ namespace engine { using std::forward; - namespace { // policy configuration for allocator - - template class ALO =std::void_t, typename...INIT> - using AlloPolicySelector = lib::allo::SetupSeveral; + namespace { // default policy configuration to use heap allocator struct UseHeapAlloc { @@ -118,23 +116,13 @@ namespace engine { using Policy = lib::allo::HeapOwn; }; // - }//(End) internal policy configuration + }//(End) policy /** - * Convenience builder to collect working data. + * A builder to collect working data. * Implemented through a suitable configuration of lib::SeveralBuilder, - * such as to embed and connect to the configured custom allocator, which - * serves the goal to package all generated node configuration data together - * into a compact memory block, which can be discarded in bulk, once a given - * segment of the low-level-Model has been superseded. - * @tparam POL policy configuration pick the desired allocator - * @tparam I interface type for lib::Several - * @remark in essence, this wrapper class creates the following setup - * \code - * makeSeveral() - * .withAllocator (args...); - * \endcode + * with a policy configuration parameter to define the allocator to use. */ template using DataBuilder = lib::SeveralBuilder; @@ -193,7 +181,7 @@ namespace engine { auto withAllocator (INIT&& ...alloInit) { - using AllocatorPolicy = AlloPolicySelector; + using AllocatorPolicy = lib::allo::SetupSeveral; return NodeBuilder{forward(alloInit)...}; } diff --git a/src/steam/engine/turnout.hpp b/src/steam/engine/turnout.hpp index a0e2f31d5..b181362bc 100644 --- a/src/steam/engine/turnout.hpp +++ b/src/steam/engine/turnout.hpp @@ -71,7 +71,6 @@ //#include "lib/time/timevalue.hpp" //#include "lib/linked-elements.hpp" #include "lib/several.hpp" -#include "lib/several-builder.hpp"/////////////////TODO extract with a WeavingPattern builder //#include "lib/util-foreach.hpp" //#include "lib/iter-adapter.hpp" #include "lib/meta/function.hpp" @@ -413,13 +412,16 @@ namespace engine { static_assert (_verify_usable_as_InvocationAdapter()); - uint fanIn{0}; - uint fanOut{0}; - Several leadPort; - Several outDescr; + Several outTypes; //////////////////////////////////////////OOO builder must set-up those descriptors + SimpleWeavingPattern(Several&& pr, Several dr) + : CONF{} + , leadPort{move(pr)} + , outTypes{move(dr)} + { } + Feed mount() @@ -430,7 +432,7 @@ namespace engine { void pull (Feed& feed, TurnoutSystem& turnoutSys) { - for (uint i=0; i - using SimpleDirectInvoke = SimpleWeavingPattern>; - - template - struct SimpleWeavingBuilder - : Turnout> /////////////////////////////////OOO can no longer directly inherit from the product(Turnout), due to SeveralBuilder!!! - { - SimpleWeavingBuilder - attachToLeadPort(ProcNode& lead, uint portNr) - { - ASSERT (this->fanIn < N); - PortRef leadPort; /////////////////////////////////////OOO TODO need Accessor on ProcNode!!!!! - this->leadPort.createAt(this->fanIn, leadPort) - ++(this->fanIn); - return move(*this); - } - - Turnout> - build() - { - ///////////////////////////////OOO need a way to prepare SeveralBuilder-instances for leadPort and outDescr --> see NodeBuilder - return move(*this); - } - }; -/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1367 : (End)Prototyping: how to assemble a Turnout diff --git a/src/steam/engine/weaving-pattern-builder.hpp b/src/steam/engine/weaving-pattern-builder.hpp new file mode 100644 index 000000000..c963d034d --- /dev/null +++ b/src/steam/engine/weaving-pattern-builder.hpp @@ -0,0 +1,105 @@ +/* + WEAVING-PATTERN-BUILDER.hpp - build an invocation pattern for media calculations + + Copyright (C) Lumiera.org + 2024, Hermann Vosseler + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + + +/** @file weaving-pattern-builder.hpp + ** Construction kit for establishing an invocation scheme for media calculations. + ** + ** @see turnout.hpp + ** @see node-builder.hpp + ** @see NodeLinkage_test + ** + ** @todo WIP-WIP-WIP as of 7/2024 prototyping how to build and invoke render nodes /////////////////////////TICKET #1367 + ** + */ + + +#ifndef STEAM_ENGINE_WEAVING_PATTERN_BUILDER_H +#define STEAM_ENGINE_WEAVING_PATTERN_BUILDER_H + +//#include "steam/common.hpp" +//#include "steam/engine/channel-descriptor.hpp" +//#include "vault/gear/job.h" +#include "lib/several-builder.hpp" +#include "steam/engine/turnout.hpp" +//#include "lib/util-foreach.hpp" +//#include "lib/iter-adapter.hpp" +//#include "lib/meta/function.hpp" +//#include "lib/itertools.hpp" +//#include "lib/util.hpp" + +//#include +//#include + + +namespace steam { +namespace engine { + + using std::forward; + using lib::Several; + + template + using DataBuilder = lib::SeveralBuilder; + + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1367 : Prototyping: how to assemble a Turnout + template + using SimpleDirectInvoke = SimpleWeavingPattern>; + + template + struct SimpleWeavingBuilder + : util::MoveOnly + { + DataBuilder leadPort; + DataBuilder outTypes; + + SimpleWeavingBuilder + attachToLeadPort(ProcNode& lead, uint portNr) + { + PortRef portRef; /////////////////////////////////////OOO TODO need Accessor on ProcNode!!!!! + leadPort.emplace (portRef); + ENSURE (leadPort.size() < N); + return move(*this); + } + + SimpleWeavingBuilder + appendBufferTypes(size_t cnt, BuffDescr const& descriptor) + { + outTypes.fillElm (cnt, descriptor); + ENSURE (outTypes.size() < N); + return move(*this); + } + + auto + build() + { + using Product = Turnout>; + ///////////////////////////////OOO need a way to prepare SeveralBuilder-instances for leadPort and outDescr --> see NodeBuilder + return Product{leadPort.build(), outTypes.build}; + } + }; +/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1367 : (End)Prototyping: how to assemble a Turnout + + + +}}// namespace steam::engine +#endif /*STEAM_ENGINE_WEAVING_PATTERN_BUILDER_H*/ diff --git a/wiki/thinkPad.ichthyo.mm b/wiki/thinkPad.ichthyo.mm index bb5b88b09..eae573a44 100644 --- a/wiki/thinkPad.ichthyo.mm +++ b/wiki/thinkPad.ichthyo.mm @@ -3365,9 +3365,7 @@ - - - +

...dann sind wir sofort tot und das wird billigend in Kauf genommen. @@ -3814,9 +3812,7 @@ - - - +

bisher können wir das GUI nur aktiv intern schließen, @@ -3884,9 +3880,7 @@ - - - +

...das war genau der Kern der "Plugin-Debatte". @@ -3975,9 +3969,7 @@ - - - +

...nur eine heuristische Vermutung von mir @@ -4638,9 +4630,7 @@ - - - +

Einfachen Aufruf @@ -6056,9 +6046,7 @@ - - - +

den Klassennamen ohne das Namespace-Präfix "GTK", und alles lower case. @@ -7706,9 +7694,7 @@ - - - +

verbleibende @@ -10255,9 +10241,7 @@ - - - +

...da gibt es eine explizite Ausnahme-Regel. @@ -81668,6 +81652,25 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
+ + + + + + + + + + + + + + + + + + + @@ -87680,8 +87683,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
- - + + @@ -87790,8 +87793,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
diese Policy ist ein einfacher Typparameter

- -
+ @@ -87810,8 +87812,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
using AllocatorPolicy = AlloPolicySelector<ALO,INIT...>;

- - +
@@ -87822,8 +87823,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
⟶ withAllocator<ALO> (INIT&& ...)

- - +
@@ -87831,6 +87831,33 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
+ + + + + + + +

+ UseHeapAlloc ⟵ default-Policy für alle Builder +

+ + +
+
+ + + + +

+ ...vermutlich wird es irgendwann so eine Art »Builder-Framework« geben, und dorthin gehören dann solche Definitionen. Derzeit kann ich hierfür noch keine sinnvolle Code-Struktur festlegen +

+ + +
+ +
+
@@ -88364,8 +88391,16 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
- - + + + + + + + + + + @@ -88411,6 +88446,11 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
+ + + + +