experimental session-save speedup
authorRobin Gareus <robin@gareus.org>
Fri, 8 Apr 2016 18:32:49 +0000 (20:32 +0200)
committerRobin Gareus <robin@gareus.org>
Fri, 8 Apr 2016 18:32:49 +0000 (20:32 +0200)
property order is not important,
unordered_map lookup and insertion is O(1)

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

index 8e0e0158704bd1656d10ce750ad851b27db90ecc..7b8649873ac1af3ffdd77c421ea3183ef2033638 100644 (file)
@@ -29,7 +29,7 @@
 
 #include <string>
 #include <list>
-#include <map>
+#include <unordered_map>
 #include <cstdio>
 #include <cstdarg>
 
@@ -50,7 +50,7 @@ typedef XMLNodeList::const_iterator            XMLNodeConstIterator;
 typedef std::list<XMLProperty*>                XMLPropertyList;
 typedef XMLPropertyList::iterator              XMLPropertyIterator;
 typedef XMLPropertyList::const_iterator        XMLPropertyConstIterator;
-typedef std::map<std::string, XMLProperty*>    XMLPropertyMap;
+typedef std::unordered_map<std::string, XMLProperty*>    XMLPropertyMap;
 
 class LIBPBD_API XMLTree {
 public:
index 963531c5f5cca1c7d1880afcc18d36f5e4b28824..cc583fe86e14ab78fbcb969be39a994800728c87 100644 (file)
@@ -408,7 +408,7 @@ XMLProperty*
 XMLNode::property(const char* n)
 {
        string ns(n);
-       map<string,XMLProperty*>::iterator iter;
+       unordered_map<string,XMLProperty*>::iterator iter;
 
        if ((iter = _propmap.find(ns)) != _propmap.end()) {
                return iter->second;
@@ -420,7 +420,7 @@ XMLNode::property(const char* n)
 XMLProperty*
 XMLNode::property(const string& ns)
 {
-       map<string,XMLProperty*>::iterator iter;
+       unordered_map<string,XMLProperty*>::iterator iter;
 
        if ((iter = _propmap.find(ns)) != _propmap.end()) {
                return iter->second;
@@ -433,7 +433,7 @@ XMLProperty*
 XMLNode::add_property(const char* n, const string& v)
 {
        string ns(n);
-        map<string,XMLProperty*>::iterator iter;
+        unordered_map<string,XMLProperty*>::iterator iter;
 
         if ((iter = _propmap.find(ns)) != _propmap.end()) {
                 iter->second->set_value (v);