From 87ce59da29cf9cca09536bc6182bf19e3c085e53 Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Sat, 5 Sep 2026 23:48:08 +0200 Subject: [PATCH] Parameters: sketch a prototype-builder API ...yet the actual problem remains that the value type of the prototype remains a runtime-dynamic hidden implementation trait. How can we remould the scale hidden within a parameter, while in the regular setup, the scale is implemented as an immutable entry placed into a registry? --- src/lib/par/parameter.hpp | 46 +++++++-- tests/lib/par/parameter-test.cpp | 12 ++- wiki/thinkPad.ichthyo.mm | 163 ++++++++++++++++++++++++++----- 3 files changed, 189 insertions(+), 32 deletions(-) diff --git a/src/lib/par/parameter.hpp b/src/lib/par/parameter.hpp index dac996f19..2f4b06662 100644 --- a/src/lib/par/parameter.hpp +++ b/src/lib/par/parameter.hpp @@ -58,9 +58,6 @@ namespace par { : protected ParamContainer { public: - template - class Builder; - template VAL getVal() const; @@ -69,6 +66,9 @@ namespace par { /* === Builder API === */ + template + class Builder; + template static Builder forType() { return {}; } @@ -82,6 +82,8 @@ namespace par { .withValue (std::forward (initVal)); } + class ProtoBuilder; + static ProtoBuilder from (Parameter const& prototype); protected: template @@ -111,13 +113,45 @@ namespace par { withValue (X&& initVal) { initVal_ = std::forward (initVal); - return std::move(this); + return std::move(*this); } }; + class Parameter::ProtoBuilder + { + Parameter ref_; + + public: + ProtoBuilder (Parameter const& prototype) + : ref_{prototype} + { } + + Parameter + build() + { + return ref_; + } + + template + ProtoBuilder&& + maxVal (X&& upperBound) + { + /////////////////////////////////////////////OOO how to remould a scale? + return std::move(*this); + } + }; + + inline Parameter::ProtoBuilder + Parameter::from (Parameter const& prototype) + { + return ProtoBuilder{prototype}; + } + + + template - VAL + inline VAL Parameter::getVal() const { static_assert (isBaseType, "only preconfigured parameter BaseTypes are supported"); @@ -127,7 +161,7 @@ namespace par { template - void + inline void Parameter::setVal (VAL&& changedVal) { static_assert (isBaseType, "only preconfigured parameter BaseTypes are supported"); diff --git a/tests/lib/par/parameter-test.cpp b/tests/lib/par/parameter-test.cpp index e82323d30..4e5a7ae42 100644 --- a/tests/lib/par/parameter-test.cpp +++ b/tests/lib/par/parameter-test.cpp @@ -82,12 +82,22 @@ namespace test{ } - /** @test + /** @test explore ways to define a parameter... * @todo WIP 9/26 🔁 define ⟶ implement */ void verify_Builder() { + Parameter p1 = Parameter::forValue(123.45f).build(); + CHECK (123.45f == p1.getVal()); + + p1.setVal (12u); + CHECK (12.0 == p1.getVal()); + + Parameter p2 = Parameter::from(p1) + .maxVal (sqrt(2)) + .build(); +SHOW_EXPR(p2.getVal()); } diff --git a/wiki/thinkPad.ichthyo.mm b/wiki/thinkPad.ichthyo.mm index fda8c71ce..6e114af41 100644 --- a/wiki/thinkPad.ichthyo.mm +++ b/wiki/thinkPad.ichthyo.mm @@ -81589,26 +81589,37 @@ - +

- Paket: lib/auto + Paket: lib/par

- + -

- damit man bereits die Stellen markieren kann, an denen ein Parameter erwartet wird -

+
    +
  • + damit man bereits die Stellen markieren kann, an denen ein Parameter erwartet wird +
  • +
  • + damit bereits die Kategorien geschaffen sind, nach denen das Thema Automation strukturiert wird +
  • +
  • + damit man bereits einfache Werte als opaque Parameter speichern und weitergeben kann +
  • +
+ + + @@ -81822,7 +81833,7 @@ - + @@ -81888,7 +81899,7 @@ - + @@ -82025,7 +82036,9 @@ - + + + @@ -82061,6 +82074,17 @@ + + + + +

+ Der Weg dorthin ging über die Einsicht, daß die Daten-Storage eine sehr knappe Resource ist, und daß ein Prototyp-Ansatz Bedeutung einer Registry herabsetzt (sie dient vor allem als Storage back-End) +

+ +
+ +
@@ -82122,7 +82146,11 @@
- + + + + + @@ -82135,14 +82163,15 @@ - - + + + - + @@ -82184,15 +82213,16 @@ - +

- pragmatisch betrachtet ist das Problem vermutlich nicht relevant + pragmatisch betrachtet ist das Problem nicht (besonders) relevant

+ @@ -82225,6 +82255,16 @@ + + + + +

+ ...das heißt, Kohärenz wird dann eine Ebene höher gelagert, nämlich im konkreten Modell — und könnte mit den Konfig-Regeln zusammenspielen +

+ +
+
@@ -82266,7 +82306,15 @@
- + +
+ + + +
+ + + @@ -82368,9 +82416,6 @@ - -
-
@@ -83002,7 +83047,8 @@
- + + @@ -83022,7 +83068,7 @@ - + @@ -83046,6 +83092,22 @@ + + + + + + + + + + + + + + + + @@ -84256,8 +84318,8 @@ - - + + @@ -85191,6 +85253,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -85246,8 +85341,23 @@ - - + + + + + + +

+ einfach — ist praktisch schon implementiert... +

+ +
+ +
+ + + +
@@ -85373,6 +85483,9 @@
+ + +