[clang-tools-extra] r341544 - [clangd] NFC: Use TopN instead of std::priority_queue
Kirill Bobyrev via cfe-commits
cfe-commits at lists.llvm.org
Thu Sep 6 06:15:03 PDT 2018
Author: omtcyfz
Date: Thu Sep 6 06:15:03 2018
New Revision: 341544
URL: http://llvm.org/viewvc/llvm-project?rev=341544&view=rev
Log:
[clangd] NFC: Use TopN instead of std::priority_queue
Quality.cpp defines a structure for convenient storage of Top N items,
it should be used instead of the `std::priority_queue` with slightly
obscure semantics.
This patch does not affect functionality.
Reviewed By: sammccall
Differential Revision: https://reviews.llvm.org/D51676
Modified:
clang-tools-extra/trunk/clangd/index/MemIndex.cpp
Modified: clang-tools-extra/trunk/clangd/index/MemIndex.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/index/MemIndex.cpp?rev=341544&r1=341543&r2=341544&view=diff
==============================================================================
--- clang-tools-extra/trunk/clangd/index/MemIndex.cpp (original)
+++ clang-tools-extra/trunk/clangd/index/MemIndex.cpp Thu Sep 6 06:15:03 2018
@@ -10,7 +10,7 @@
#include "MemIndex.h"
#include "../FuzzyMatch.h"
#include "../Logger.h"
-#include <queue>
+#include "../Quality.h"
namespace clang {
namespace clangd {
@@ -26,7 +26,7 @@ bool MemIndex::fuzzyFind(
assert(!StringRef(Req.Query).contains("::") &&
"There must be no :: in query.");
- std::priority_queue<std::pair<float, const Symbol *>> Top;
+ TopN<std::pair<float, const Symbol *>> Top(Req.MaxCandidateCount);
FuzzyMatcher Filter(Req.Query);
bool More = false;
for (const auto Pair : Index) {
@@ -38,16 +38,12 @@ bool MemIndex::fuzzyFind(
if (Req.RestrictForCodeCompletion && !Sym->IsIndexedForCodeCompletion)
continue;
- if (auto Score = Filter.match(Sym->Name)) {
- Top.emplace(-*Score * quality(*Sym), Sym);
- if (Top.size() > Req.MaxCandidateCount) {
- More = true;
- Top.pop();
- }
- }
+ if (auto Score = Filter.match(Sym->Name))
+ if (Top.push({*Score * quality(*Sym), Sym}))
+ More = true; // An element with smallest score was discarded.
}
- for (; !Top.empty(); Top.pop())
- Callback(*Top.top().second);
+ for (const auto &Item : std::move(Top).items())
+ Callback(*Item.second);
return More;
}
More information about the cfe-commits
mailing list