*/
#include <iostream>
+
+#include "pbd/stacktrace.h"
#include "pbd/xml++.h"
+
#include <libxml/debugXML.h>
#include <libxml/xpath.h>
#include <libxml/xpathInternals.h>
return add_child_copy(XMLNode (string(), c));
}
-XMLProperty*
+XMLProperty const *
+XMLNode::property(const char* n) const
+{
+ string ns(n);
+ map<string,XMLProperty*>::const_iterator iter;
+
+ if ((iter = _propmap.find(ns)) != _propmap.end()) {
+ return iter->second;
+ }
+
+ return 0;
+}
+
+XMLProperty const *
+XMLNode::property(const string& ns) const
+{
+ map<string,XMLProperty*>::const_iterator iter;
+
+ if ((iter = _propmap.find(ns)) != _propmap.end()) {
+ return iter->second;
+ }
+
+ return 0;
+}
+
+XMLProperty *
XMLNode::property(const char* n)
{
string ns(n);
- unordered_map<string,XMLProperty*>::iterator iter;
+ map<string,XMLProperty*>::iterator iter;
if ((iter = _propmap.find(ns)) != _propmap.end()) {
return iter->second;
return 0;
}
-XMLProperty*
+XMLProperty *
XMLNode::property(const string& ns)
{
- unordered_map<string,XMLProperty*>::iterator iter;
+ map<string,XMLProperty*>::iterator iter;
if ((iter = _propmap.find(ns)) != _propmap.end()) {
return iter->second;
return 0;
}
+bool
+XMLNode::has_property_with_value (const string& key, const string& value) const
+{
+ map<string,XMLProperty*>::const_iterator iter = _propmap.find(key);
+ if (iter != _propmap.end()) {
+ const XMLProperty* p = (iter->second);
+ return (p && p->value() == value);
+ }
+ return false;
+}
+
XMLProperty*
XMLNode::add_property(const char* n, const string& v)
{
string ns(n);
- unordered_map<string,XMLProperty*>::iterator iter;
+ map<string,XMLProperty*>::iterator iter;
if ((iter = _propmap.find(ns)) != _propmap.end()) {
iter->second->set_value (v);
{
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);
}
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;
}
}
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;
}
}
XMLNode::remove_nodes_and_delete(const string& propname, const string& val)
{
XMLNodeIterator i = _children.begin();
- XMLNodeIterator tmp;
- XMLProperty* prop;
+ XMLProperty const * 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;
}
}