X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fpbd%2Fpbd%2Fsequence_property.h;h=4069340e429bb6f6ac7432d825600c1ae83771f4;hb=771a4a4e0c9b6653083f44081a81964c802eb549;hp=28775b5f3c7ce3c5a5bb96acfb9487b7b95a9907;hpb=36c233fe6ce570ce85224626ce7aba4a2607537f;p=ardour.git diff --git a/libs/pbd/pbd/sequence_property.h b/libs/pbd/pbd/sequence_property.h index 28775b5f3c..4069340e42 100644 --- a/libs/pbd/pbd/sequence_property.h +++ b/libs/pbd/pbd/sequence_property.h @@ -44,7 +44,7 @@ namespace PBD { * any change. */ template -class LIBPBD_API SequenceProperty : public PropertyBase +class /*LIBPBD_API*/ SequenceProperty : public PropertyBase { public: typedef std::set ChangeContainer; @@ -91,18 +91,18 @@ class LIBPBD_API SequenceProperty : public PropertyBase XMLNode* child = new XMLNode (PBD::capitalize (property_name())); history_node->add_child_nocopy (*child); - + /* record the change described in our change member */ if (!_changes.added.empty()) { - for (typename ChangeContainer::iterator i = _changes.added.begin(); i != _changes.added.end(); ++i) { + for (typename ChangeContainer::const_iterator i = _changes.added.begin(); i != _changes.added.end(); ++i) { XMLNode* add_node = new XMLNode ("Add"); child->add_child_nocopy (*add_node); get_content_as_xml (*i, *add_node); } } if (!_changes.removed.empty()) { - for (typename ChangeContainer::iterator i = _changes.removed.begin(); i != _changes.removed.end(); ++i) { + for (typename ChangeContainer::const_iterator i = _changes.removed.begin(); i != _changes.removed.end(); ++i) { XMLNode* remove_node = new XMLNode ("Remove"); child->add_child_nocopy (*remove_node); get_content_as_xml (*i, *remove_node); @@ -126,13 +126,13 @@ class LIBPBD_API SequenceProperty : public PropertyBase void get_value (XMLNode & node) const { for (typename Container::const_iterator i = _val.begin(); i != _val.end(); ++i) { node.add_child_nocopy ((*i)->get_state ()); - } + } } bool changed () const { return !_changes.added.empty() || !_changes.removed.empty(); } - + void clear_changes () { _changes.added.clear (); _changes.removed.clear (); @@ -144,7 +144,7 @@ class LIBPBD_API SequenceProperty : public PropertyBase } /** Given a record of changes to this property, pass it to a callback that will - * update the property in some appropriate way. + * update the property in some appropriate way. * * This exists because simply using std::sequence methods to add/remove items * from the property is far too simplistic - the semantics of add/remove may @@ -158,20 +158,20 @@ class LIBPBD_API SequenceProperty : public PropertyBase if (!changed ()) { return; } - + /* Create a property with just the changes and not the actual values */ SequenceProperty* a = create (); a->_changes = _changes; changes.add (a); - + if (cmd) { /* whenever one of the items emits DropReferences, make sure that the Destructible we've been told to notify hears about it. the Destructible is likely to be the Command being built with this diff(). */ - - for (typename ChangeContainer::iterator i = a->changes().added.begin(); i != a->changes().added.end(); ++i) { + + for (typename ChangeContainer::const_iterator i = a->changes().added.begin(); i != a->changes().added.end(); ++i) { (*i)->DropReferences.connect_same_thread (*cmd, boost::bind (&Destructible::drop_references, cmd)); } } @@ -182,7 +182,7 @@ class LIBPBD_API SequenceProperty : public PropertyBase XMLNodeList const children = node.children (); /* find the node for this property name */ - + std::string const c = capitalize (property_name ()); XMLNodeList::const_iterator i = children.begin(); while (i != children.end() && (*i)->name() != c) { @@ -194,7 +194,7 @@ class LIBPBD_API SequenceProperty : public PropertyBase } /* create a property with the changes */ - + SequenceProperty* p = create (); XMLNodeList const & grandchildren = (*i)->children (); @@ -301,49 +301,49 @@ class LIBPBD_API SequenceProperty : public PropertyBase } _val.clear (); } - - typename Container::size_type size() const { + + typename Container::size_type size() const { return _val.size(); } - bool empty() const { + bool empty() const { return _val.empty(); } Container& operator= (const Container& other) { - for (typename Container::iterator i = _val.begin(); i != _val.end(); ++i) { + for (typename Container::const_iterator i = _val.begin(); i != _val.end(); ++i) { _changes.remove (*i); } - for (typename Container::iterator i = other.begin(); i != other.end(); ++i) { + for (typename Container::const_iterator i = other.begin(); i != other.end(); ++i) { _changes.add (*i); } return _val = other; } - typename Container::reference front() { + typename Container::reference front() { return _val.front (); } - typename Container::const_reference front() const { + typename Container::const_reference front() const { return _val.front (); } - typename Container::reference back() { + typename Container::reference back() { return _val.back (); } - typename Container::const_reference back() const { + typename Container::const_reference back() const { return _val.back (); } - void sort() { + void sort() { _val.sort (); } template void sort(BinaryPredicate comp) { _val.sort (comp); } - + const ChangeRecord& changes () const { return _changes; } protected: @@ -355,12 +355,12 @@ protected: , _changes (p._changes) , _update_callback (p._update_callback) {} - + Container _val; ///< our actual container of things ChangeRecord _changes; ///< changes to the container (adds/removes) that have happened since clear_changes() was last called boost::function _update_callback; -private: +private: virtual SequenceProperty* create () const = 0; };