add a const method to check for existing key/value properties
authorRobin Gareus <robin@gareus.org>
Tue, 3 May 2016 00:07:40 +0000 (02:07 +0200)
committerRobin Gareus <robin@gareus.org>
Tue, 3 May 2016 01:03:00 +0000 (03:03 +0200)
handy to lookup up XMLNodes with "id" == ID w/o allocating memory.

libs/pbd/pbd/xml++.h
libs/pbd/xml++.cc

index 0e1bd09cc2ea7b9aa66ba3fc14949a1989c4a5fa..1f8b710f3f3e9973312808250e47d1399c008089 100644 (file)
@@ -119,8 +119,10 @@ public:
        const XMLPropertyList& properties() const { return _proplist; }
        XMLProperty*       property(const char*);
        XMLProperty*       property(const std::string&);
-        const XMLProperty* property(const char* n)   const { return const_cast<XMLNode*>(this)->property(n); }
-        const XMLProperty* property(const std::string& n) const { return const_cast<XMLNode*>(this)->property(n); }
+       const XMLProperty* property(const char* n)   const { return const_cast<XMLNode*>(this)->property(n); }
+       const XMLProperty* property(const std::string& n) const { return const_cast<XMLNode*>(this)->property(n); }
+
+       bool has_property_with_value (const std::string&, const std::string&) const;
 
        XMLProperty* add_property(const char* name, const std::string& value);
        XMLProperty* add_property(const char* name, const char* value = "");
index 6d260f252503e4098e85a5604df9dbe44ffc4e3b..580ad8dc8bcde649aff6a976588abdf20a4f19ba 100644 (file)
@@ -429,6 +429,17 @@ XMLNode::property(const string& ns)
        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)
 {