From a7cd8996aa9414b93439fb78c07d2e85252d1acf Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Sat, 6 Feb 2016 19:42:41 +0100 Subject: [PATCH] immutable-arguments(#989): proof-of concept seems to work as assumed; we'll just have to construct a new holder tuple in place when binding arguments. Doesn't look too bad for me --- src/proc/control/command-op-closure.hpp | 10 ++++++++-- src/proc/control/command-storage-holder.hpp | 10 ++-------- tests/gui/bus-term-test.cpp | 10 +++++----- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/proc/control/command-op-closure.hpp b/src/proc/control/command-op-closure.hpp index f05642978..46fc9cacc 100644 --- a/src/proc/control/command-op-closure.hpp +++ b/src/proc/control/command-op-closure.hpp @@ -122,6 +122,12 @@ namespace control { : TUP(tup) { } + /** we deliberately support immutable types as command arguments */ + ParamAccessor& operator= (ParamAccessor const&) =delete; + ParamAccessor& operator= (ParamAccessor&&) =delete; + ParamAccessor (ParamAccessor const&) =default; + + ////////////////////TODO the recursion-end of the access operations goes here ostream& @@ -178,7 +184,7 @@ namespace control { void bindArguments (Arguments& args) override { - params_ = args.get(); + //params_ = args.get(); } /** assign a new set of parameter values to this. @@ -189,7 +195,7 @@ namespace control { void bindArguments (lib::diff::Rec const& paramData) override { - params_ = buildTuple (paramData); + //params_ = buildTuple (paramData); } diff --git a/src/proc/control/command-storage-holder.hpp b/src/proc/control/command-storage-holder.hpp index 20077847f..818e0e20e 100644 --- a/src/proc/control/command-storage-holder.hpp +++ b/src/proc/control/command-storage-holder.hpp @@ -138,10 +138,7 @@ namespace control { virtual void bindArguments (Arguments& args) override { - if (!arguments_->isValid()) - storeTuple (args.get()); - else - arguments_->bindArguments (args); + storeTuple (args.get()); } /** assign a new set of parameter values to this. @@ -152,10 +149,7 @@ namespace control { virtual void bindArguments (lib::diff::Rec const& paramData) override { - if (!arguments_->isValid()) - storeTuple (buildTuple (paramData)); - else - arguments_->bindArguments (paramData); + storeTuple (buildTuple (paramData)); } diff --git a/tests/gui/bus-term-test.cpp b/tests/gui/bus-term-test.cpp index ab9d6ee8c..6f09da3de 100644 --- a/tests/gui/bus-term-test.cpp +++ b/tests/gui/bus-term-test.cpp @@ -182,7 +182,7 @@ namespace test { { MARK_TEST_FUN gui::test::Nexus::startNewLog(); - auto cmd = gui::test::Nexus::prepareMockCmd(); //TimeSpan /////////////TODO + auto cmd = gui::test::Nexus::prepareMockCmd(); MockElm mock("uiElm"); @@ -201,19 +201,19 @@ namespace test { CHECK (not cmd.canExec()); - mock.prepareCommand(cmd, Rec({text, luid})); ////////TODO clip, + mock.prepareCommand(cmd, Rec({text, clip, luid})); CHECK (cmd.canExec()); - CHECK (gui::test::Nexus::wasBound(cmd, text, luid)); ////////TODO clip, + CHECK (gui::test::Nexus::wasBound(cmd, text, clip, luid)); CHECK (not gui::test::Nexus::wasInvoked(cmd)); - CHECK (not gui::test::Nexus::wasInvoked(cmd, text, luid)); ////////TODO clip, + CHECK (not gui::test::Nexus::wasInvoked(cmd, text, clip, luid)); CHECK (not gui::test::Nexus::wasBound(cmd, "lololo")); mock.issueCommand(cmd); CHECK (gui::test::Nexus::wasInvoked(cmd)); - CHECK (gui::test::Nexus::wasInvoked(cmd, text, luid)); ////////TODO clip, + CHECK (gui::test::Nexus::wasInvoked(cmd, text, clip, luid)); CHECK (not gui::test::Nexus::wasInvoked(cmd, " huh ", clip, luid)); CHECK (not gui::test::Nexus::wasInvoked(cmd, text, clip));