summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexei Rousskikh <ext-alexei.rousskikh@nokia.com>2012-02-27 09:27:19 -0500
committerAndrew Christian <andrew.christian@nokia.com>2012-02-28 11:14:24 +0100
commit77263148f5dc5460329577aac1a9aa26f2521ed3 (patch)
tree0a9929849e0cb57088ee45a462ddfddf2577b6bc
parent528878eb2b7ec94e69019c97fa736e08628b9fa3 (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.cpp14
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();
}