From 5b04ddf424a657dbaa421cce13df4d6dac7fc622 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 22 Feb 2009 17:37:33 +0000 Subject: Make commands noncopyable (they are definitely not copy safe). memento_command.h style. git-svn-id: svn://localhost/ardour2/branches/3.0@4648 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/pbd/pbd/command.h | 3 ++- libs/pbd/pbd/memento_command.h | 52 ++++++++++++++++++++---------------------- 2 files changed, 27 insertions(+), 28 deletions(-) (limited to 'libs') diff --git a/libs/pbd/pbd/command.h b/libs/pbd/pbd/command.h index 3fac531591..1521a60350 100644 --- a/libs/pbd/pbd/command.h +++ b/libs/pbd/pbd/command.h @@ -22,8 +22,9 @@ #define __lib_pbd_command_h__ #include +#include -class Command : public PBD::StatefulDestructible +class Command : public PBD::StatefulDestructible, public boost::noncopyable { public: virtual ~Command() { /* NOTE: derived classes must call drop_references() */ } diff --git a/libs/pbd/pbd/memento_command.h b/libs/pbd/pbd/memento_command.h index 660e5875d5..1a6600b1b5 100644 --- a/libs/pbd/pbd/memento_command.h +++ b/libs/pbd/pbd/memento_command.h @@ -39,63 +39,61 @@ template class MementoCommand : public Command { public: - MementoCommand(obj_T &object, XMLNode *before, XMLNode *after) - : obj(object), before(before), after(after) + MementoCommand(obj_T& a_object, XMLNode* a_before, XMLNode* a_after) + : obj(a_object), before(a_before), after(a_after) { /* catch destruction of the object */ - new PBD::PairedShiva > (object, *this); + new PBD::PairedShiva< obj_T,MementoCommand > (obj, *this); } - ~MementoCommand () - { + ~MementoCommand () { GoingAway(); /* EMIT SIGNAL */ - - if (before) - delete before; - - if (after) - delete after; + delete before; + delete after; } - void operator() () - { - if (after) + void operator() () { + if (after) { obj.set_state(*after); + } } - void undo() - { - if (before) + void undo() { + if (before) { obj.set_state(*before); + } } - virtual XMLNode &get_state() - { + virtual XMLNode &get_state() { string name; - if (before && after) + if (before && after) { name = "MementoCommand"; - else if (before) + } else if (before) { name = "MementoUndoCommand"; - else + } else { name = "MementoRedoCommand"; + } - XMLNode *node = new XMLNode(name); + XMLNode* node = new XMLNode(name); node->add_property("obj_id", obj.id().to_s()); node->add_property("type_name", typeid(obj).name()); - if (before) + if (before) { node->add_child_copy(*before); + } - if (after) + if (after) { node->add_child_copy(*after); + } return *node; } protected: - obj_T &obj; - XMLNode *before, *after; + obj_T& obj; + XMLNode* before; + XMLNode* after; }; #endif // __lib_pbd_memento_h__ -- cgit v1.2.3