From d95c86d094e2b84d9aea2f9c0de6fd0e7778e0d1 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Mon, 21 Apr 2014 11:30:37 +0200 Subject: [PATCH] refs #214, fixed hash for variant map * hash based on convertToQString * fixed convertToQString --- src/blackmisc/indexvariantmap.cpp | 16 +++++++++++----- src/blackmisc/indexvariantmap.h | 3 +++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/blackmisc/indexvariantmap.cpp b/src/blackmisc/indexvariantmap.cpp index c468f38f5..3c7a8433a 100644 --- a/src/blackmisc/indexvariantmap.cpp +++ b/src/blackmisc/indexvariantmap.cpp @@ -38,12 +38,16 @@ namespace BlackMisc */ QString CIndexVariantMap::convertToQString(bool i18n) const { - if (this->isEmpty()) return "{}"; + if (this->isEmpty()) return QString("{wildcard: %1}").arg(this->m_wildcard ? "true" : "false"); QString s; foreach(int index, this->m_values.keys()) { QVariant qv = this->m_values.value(index); - s.isEmpty() ? s.append("{") : s.append(", "); + + s.isEmpty() ? + s.append("{wildcard: ").append(this->m_wildcard ? "true" : "false").append(" ") : + s.append(", "); + s.append('{').append(QString::number(index)).append(": "); s.append("(").append(QString::number(qv.userType())).append(") "); QString qvs = BlackMisc::qVariantToString(qv, i18n); @@ -155,8 +159,10 @@ namespace BlackMisc */ uint CIndexVariantMap::getValueHash() const { - return qHash(this); + // there is no hash for map, so I use this workaround here + const QString s = this->toQString(false); + QList h; + h << qHash(s); + return BlackMisc::calculateHash(h, "CIndexVariantMap"); } - - } // namespace diff --git a/src/blackmisc/indexvariantmap.h b/src/blackmisc/indexvariantmap.h index 4d3ec3de6..087c6a6d4 100644 --- a/src/blackmisc/indexvariantmap.h +++ b/src/blackmisc/indexvariantmap.h @@ -61,6 +61,9 @@ namespace BlackMisc //! \brief Wildcard, only relevant when used in search bool isWildcard() const { return this->m_wildcard; } + //! \brief Wildcard, only relevant when used in search + void setWildcard(bool wildcard) { this->m_wildcard = wildcard; } + //! clear void clear() { this->m_values.clear(); }