From 77263148f5dc5460329577aac1a9aa26f2521ed3 Mon Sep 17 00:00:00 2001 From: Alexei Rousskikh Date: Mon, 27 Feb 2012 09:27:19 -0500 Subject: schema indexing optimization - replaced QMultiMap with QHash Change-Id: I15cf7ab497cf9e3edf7b8e364386418f1f3be74c Reviewed-by: Andrew Christian --- src/qtjsonschema/schemavalidator.cpp | 14 ++++++++++---- 1 file 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 m_map; + QHash 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::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::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(); } -- cgit v1.2.3