diff options
author | Alexei Rousskikh <ext-alexei.rousskikh@nokia.com> | 2012-02-27 09:27:19 -0500 |
---|---|---|
committer | Andrew Christian <andrew.christian@nokia.com> | 2012-02-28 11:14:24 +0100 |
commit | 77263148f5dc5460329577aac1a9aa26f2521ed3 (patch) | |
tree | 0a9929849e0cb57088ee45a462ddfddf2577b6bc | |
parent | 528878eb2b7ec94e69019c97fa736e08628b9fa3 (diff) |
schema indexing optimization - replaced QMultiMap with QHash
Change-Id: I15cf7ab497cf9e3edf7b8e364386418f1f3be74c
Reviewed-by: Andrew Christian <andrew.christian@nokia.com>
-rw-r--r-- | src/qtjsonschema/schemavalidator.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/qtjsonschema/schemavalidator.cpp b/src/qtjsonschema/schemavalidator.cpp index 611c8bd..6a31930 100644 --- a/src/qtjsonschema/schemavalidator.cpp +++ b/src/qtjsonschema/schemavalidator.cpp @@ -154,6 +154,7 @@ bool SchemaValidator::hasSchema(const QString & name) void SchemaValidator::removeSchema(const QString & name) { d_ptr->mSchemas.take(name); + d_ptr->m_bInit = false; // clear last filtering & indexing results } /*! @@ -488,7 +489,7 @@ QJsonObject SchemaValidator::setSchema(const QString &schemaName, QJsonObject sc class SchemaValidator::SchemaUniqueKeyNameMatcher::SchemaUniqueKeyNameMatcherPrivate { public: - QMultiMap<QString,QString> m_map; + QHash<QString,QStringList> m_items; QStringList m_others; }; @@ -519,7 +520,11 @@ void SchemaValidator::SchemaUniqueKeyNameMatcher::createIndex(const QString &sch QString key = o["pattern"].toString(); if (!key.isEmpty()) { - d_ptr->m_map.insert(key, schemaName); + QHash<QString,QStringList>::iterator it(d_ptr->m_items.find(key)); + if (it != d_ptr->m_items.end()) + (*it).append(schemaName); + else + d_ptr->m_items.insert(key, QStringList() << schemaName); return; } } @@ -532,7 +537,8 @@ void SchemaValidator::SchemaUniqueKeyNameMatcher::createIndex(const QString &sch QStringList SchemaValidator::SchemaUniqueKeyNameMatcher::getExactMatches(const QJsonObject &object) { QString str(!m_key.isEmpty() && object.contains(m_key) ? object[m_key].toString() : QString::null); - return !str.isEmpty() ? d_ptr->m_map.values(str) : QStringList(); + QHash<QString,QStringList>::const_iterator it; + return !str.isEmpty() && (it = d_ptr->m_items.find(str)) != d_ptr->m_items.end() ? *it : QStringList(); } QStringList SchemaValidator::SchemaUniqueKeyNameMatcher::getPossibleMatches(const QJsonObject &) @@ -542,7 +548,7 @@ QStringList SchemaValidator::SchemaUniqueKeyNameMatcher::getPossibleMatches(cons void SchemaValidator::SchemaUniqueKeyNameMatcher::reset() { - d_ptr->m_map.clear(); + d_ptr->m_items.clear(); d_ptr->m_others.clear(); } |