From 56948e75d8034aae8993424abc06fe276cc6e75f Mon Sep 17 00:00:00 2001 From: Andre Hartmann Date: Sun, 14 Jul 2019 07:22:40 +0200 Subject: [PATCH] CppLocatorFilter: Simplify priority handling Change-Id: I612e0cc5e56a50bd6830ae2f25291aaed571ae67 Reviewed-by: Eike Ziller --- src/plugins/cpptools/cpplocatorfilter.cpp | 34 +++++++++-------------- 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/src/plugins/cpptools/cpplocatorfilter.cpp b/src/plugins/cpptools/cpplocatorfilter.cpp index aa85f8d33f7..5ae84c08ac2 100644 --- a/src/plugins/cpptools/cpplocatorfilter.cpp +++ b/src/plugins/cpptools/cpplocatorfilter.cpp @@ -33,6 +33,7 @@ #include #include +#include using namespace CppTools; using namespace CppTools::Internal; @@ -68,16 +69,14 @@ void CppLocatorFilter::refresh(QFutureInterface &future) QList CppLocatorFilter::matchesFor( QFutureInterface &future, const QString &entry) { - QList normalEntries; - QList goodEntries; - QList betterEntries; - QList bestEntries; + enum { Best = 0, Better, Good, Normal, EntryNumber }; + QList entries[EntryNumber]; const Qt::CaseSensitivity caseSensitivityForPrefix = caseSensitivity(entry); const IndexItem::ItemType wanted = matchTypes(); const QRegularExpression regexp = createRegExp(entry); if (!regexp.isValid()) - return goodEntries; + return {}; const bool hasColonColon = entry.contains("::"); const QRegularExpression shortRegexp = hasColonColon ? createRegExp(entry.mid(entry.lastIndexOf("::") + 2)) : regexp; @@ -114,13 +113,13 @@ QList CppLocatorFilter::matchesFor( } if (matchInParameterList) - normalEntries.append(filterEntry); + entries[Normal].append(filterEntry); else if (filterEntry.displayName.startsWith(entry, caseSensitivityForPrefix)) - bestEntries.append(filterEntry); + entries[Best].append(filterEntry); else if (filterEntry.displayName.contains(entry, caseSensitivityForPrefix)) - betterEntries.append(filterEntry); + entries[Better].append(filterEntry); else - goodEntries.append(filterEntry); + entries[Good].append(filterEntry); } } @@ -130,19 +129,12 @@ QList CppLocatorFilter::matchesFor( return IndexItem::Recurse; }); - if (normalEntries.size() < 1000) - Utils::sort(normalEntries, Core::LocatorFilterEntry::compareLexigraphically); - if (goodEntries.size() < 1000) - Utils::sort(goodEntries, Core::LocatorFilterEntry::compareLexigraphically); - if (betterEntries.size() < 1000) - Utils::sort(betterEntries, Core::LocatorFilterEntry::compareLexigraphically); - if (bestEntries.size() < 1000) - Utils::sort(bestEntries, Core::LocatorFilterEntry::compareLexigraphically); + for (auto &entry : entries) { + if (entry.size() < 1000) + Utils::sort(entry, Core::LocatorFilterEntry::compareLexigraphically); + } - bestEntries += betterEntries; - bestEntries += goodEntries; - bestEntries += normalEntries; - return bestEntries; + return std::accumulate(std::begin(entries), std::end(entries), QList()); } void CppLocatorFilter::accept(Core::LocatorFilterEntry selection,