From 3def1b2830528319d2b720267e2f153dd17d72c0 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Fri, 8 Apr 2016 21:03:23 +0200 Subject: 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.. --- libs/pbd/xml++.cc | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) (limited to 'libs/pbd/xml++.cc') 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; } } -- cgit v1.2.3