diff --git a/src/proc/control/command-argument-holder.hpp b/src/proc/control/command-argument-holder.hpp index f707efe4a..c2bcbb0f7 100644 --- a/src/proc/control/command-argument-holder.hpp +++ b/src/proc/control/command-argument-holder.hpp @@ -140,6 +140,12 @@ namespace control { return arguments_->isValid(); } + virtual bool isCaptured() const + { + return memento_->isValid(); + } + + /** assign a new parameter tuple to this */ virtual void bindArguments (Arguments& args) diff --git a/src/proc/control/command-closure.hpp b/src/proc/control/command-closure.hpp index da173bb8d..73b94ceda 100644 --- a/src/proc/control/command-closure.hpp +++ b/src/proc/control/command-closure.hpp @@ -127,14 +127,11 @@ namespace control { virtual ~CmdClosure() {} virtual operator string() const =0; - - virtual bool isValid () const =0; - - virtual void bindArguments (Arguments&) =0; - - virtual void invoke (CmdFunctor const&) =0; - - virtual PClo createClone (TypedAllocationManager&) =0; + virtual bool isValid () const =0; ///< does this closure hold a valid argument tuple? + virtual bool isCaptured () const =0; ///< does this closure hold captured UNDO state? + virtual void bindArguments (Arguments&) =0; ///< store a set of parameter values within this closure + virtual void invoke (CmdFunctor const&) =0; ///< invoke functor using the stored parameter values + virtual PClo createClone (TypedAllocationManager&) =0; ///< create clone allocation without disclosing concrete type }; @@ -271,7 +268,8 @@ namespace control { } - bool isValid () const { return true; } + bool isValid () const { return true; } + bool isCaptured() const { return false; } /// Supporting equality comparisons... diff --git a/src/proc/control/command-impl.cpp b/src/proc/control/command-impl.cpp index 79e5cfddd..b73573091 100644 --- a/src/proc/control/command-impl.cpp +++ b/src/proc/control/command-impl.cpp @@ -50,13 +50,6 @@ namespace control { /////////////////////////////////////////TODO: is this impl file actually necessary?? - bool - CommandImpl::hasUndoState (CmdClosure const& closure) - { - UNIMPLEMENTED ("how the hell do we get at the memento-captured state???"); -// REQUIRE (INSTANCEOF (ArgumentHolder, &closure)); -// return static_cast (closure).canUndo(); - } diff --git a/src/proc/control/command-impl.hpp b/src/proc/control/command-impl.hpp index 561a10331..92871a509 100644 --- a/src/proc/control/command-impl.hpp +++ b/src/proc/control/command-impl.hpp @@ -183,7 +183,7 @@ namespace control { bool canUndo() const ///< state check: has undo state been captured? { - return isValid() && hasUndoState(*pClo_); + return isValid() && pClo_->isCaptured(); } @@ -191,8 +191,6 @@ namespace control { private: - static bool hasUndoState (CmdClosure const&); - };