summaryrefslogtreecommitdiff
path: root/libs/pbd/xml++.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2016-04-08 21:03:23 +0200
committerRobin Gareus <robin@gareus.org>2016-04-08 21:03:23 +0200
commit3def1b2830528319d2b720267e2f153dd17d72c0 (patch)
tree9d595ad5f857d6bc8cd088af0bb038063efcaf8d /libs/pbd/xml++.cc
parentd1dcedaccfd5adfd661724476003410d5d251756 (diff)
more potential session-save speedup.
std:vector trumps std::list speed in all aspects: traversal, insertion (at end) and Deletion. ..but we'll have to be careful about iterators..
Diffstat (limited to 'libs/pbd/xml++.cc')
-rw-r--r--libs/pbd/xml++.cc32
1 files changed, 13 insertions, 19 deletions
diff --git a/libs/pbd/xml++.cc b/libs/pbd/xml++.cc
index cc583fe86e..b8fff12ad0 100644
--- a/libs/pbd/xml++.cc
+++ b/libs/pbd/xml++.cc
@@ -472,7 +472,10 @@ XMLNode::remove_property(const string& n)
{
if (_propmap.find(n) != _propmap.end()) {
XMLProperty* p = _propmap[n];
- _proplist.remove (p);
+ XMLPropertyIterator i = std::find(_proplist.begin(), _proplist.end(), p);
+ if (i != _proplist.end ()) {
+ _proplist.erase (i);
+ }
delete p;
_propmap.erase(n);
}
@@ -492,15 +495,12 @@ void
XMLNode::remove_nodes(const string& n)
{
XMLNodeIterator i = _children.begin();
- XMLNodeIterator tmp;
-
while (i != _children.end()) {
- tmp = i;
- ++tmp;
if ((*i)->name() == n) {
- _children.erase (i);
+ i = _children.erase (i);
+ } else {
+ ++i;
}
- i = tmp;
}
}
@@ -508,16 +508,14 @@ void
XMLNode::remove_nodes_and_delete(const string& n)
{
XMLNodeIterator i = _children.begin();
- XMLNodeIterator tmp;
while (i != _children.end()) {
- tmp = i;
- ++tmp;
if ((*i)->name() == n) {
delete *i;
- _children.erase (i);
+ i = _children.erase (i);
+ } else {
+ ++i;
}
- i = tmp;
}
}
@@ -525,20 +523,16 @@ void
XMLNode::remove_nodes_and_delete(const string& propname, const string& val)
{
XMLNodeIterator i = _children.begin();
- XMLNodeIterator tmp;
XMLProperty* prop;
while (i != _children.end()) {
- tmp = i;
- ++tmp;
-
prop = (*i)->property(propname);
if (prop && prop->value() == val) {
delete *i;
- _children.erase(i);
+ i = _children.erase(i);
+ } else {
+ ++i;
}
-
- i = tmp;
}
}