From a823caa396c44f426a0eb284120de9675e3285d6 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Thu, 9 Jun 2016 14:49:19 +0200 Subject: [PATCH] TextEditor: Improve speed of hash function for font settings The size of the array is fixed so we can simply use the memory patter as a hash value. Change-Id: If86a58b111a07b2bd9cecc12a03d74b93a914159 Task-number: QTCREATORBUG-16419 Reviewed-by: Eike Ziller Reviewed-by: David Schulz --- src/libs/utils/sizedarray.h | 5 +++++ .../clangcodemodel/clanghighlightingmarksreporter.cpp | 1 + src/plugins/texteditor/fontsettings.cpp | 9 +++------ src/plugins/texteditor/fontsettings.h | 2 +- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/libs/utils/sizedarray.h b/src/libs/utils/sizedarray.h index 1f7efef315a..65f8a38e55a 100644 --- a/src/libs/utils/sizedarray.h +++ b/src/libs/utils/sizedarray.h @@ -108,6 +108,11 @@ public: return m_size == 0; } + void fillWithZero() + { + std::array::fill(T(0)); + } + private: std::uint8_t m_size = 0; }; diff --git a/src/plugins/clangcodemodel/clanghighlightingmarksreporter.cpp b/src/plugins/clangcodemodel/clanghighlightingmarksreporter.cpp index ccddbc978f9..2e85c49c3cf 100644 --- a/src/plugins/clangcodemodel/clanghighlightingmarksreporter.cpp +++ b/src/plugins/clangcodemodel/clanghighlightingmarksreporter.cpp @@ -70,6 +70,7 @@ TextEditor::TextStyle toTextStyle(ClangBackEnd::HighlightingType type) TextEditor::TextStyles toTextStyles(ClangBackEnd::HighlightingTypes types) { TextEditor::TextStyles textStyles; + textStyles.mixinStyles.fillWithZero(); textStyles.mainStyle = toTextStyle(types.mainHighlightingType); diff --git a/src/plugins/texteditor/fontsettings.cpp b/src/plugins/texteditor/fontsettings.cpp index 5b3402e4b5a..3679e08c59e 100644 --- a/src/plugins/texteditor/fontsettings.cpp +++ b/src/plugins/texteditor/fontsettings.cpp @@ -181,12 +181,9 @@ QTextCharFormat FontSettings::toTextCharFormat(TextStyle category) const return tf; } -uint qHash(const TextStyles &textStyles) +uint qHash(TextStyles textStyles) { - uint hash = qHash(textStyles.mainStyle); - for (TextStyle mixinStyle : textStyles.mixinStyles) - hash ^= qHash(mixinStyle); - return hash; + return ::qHash(reinterpret_cast(textStyles)); } bool operator==(const TextStyles &first, const TextStyles &second) @@ -219,7 +216,7 @@ void FontSettings::addMixinStyle(QTextCharFormat &textCharFormat, }; } -QTextCharFormat FontSettings::toTextCharFormat(const TextStyles &textStyles) const +QTextCharFormat FontSettings::toTextCharFormat(TextStyles textStyles) const { auto textCharFormatIterator = m_textCharFormatCache.find(textStyles); if (textCharFormatIterator != m_textCharFormatCache.end()) diff --git a/src/plugins/texteditor/fontsettings.h b/src/plugins/texteditor/fontsettings.h index dbecc31a3e1..7c7654de4bc 100644 --- a/src/plugins/texteditor/fontsettings.h +++ b/src/plugins/texteditor/fontsettings.h @@ -66,7 +66,7 @@ public: QVector toTextCharFormats(const QVector &categories) const; QTextCharFormat toTextCharFormat(TextStyle category) const; - QTextCharFormat toTextCharFormat(const TextStyles &textStyles) const; + QTextCharFormat toTextCharFormat(TextStyles textStyles) const; QString family() const; void setFamily(const QString &family);