forked from OSchip/llvm-project
[clang-tidy][NFC] Tweak GlobList to iterate backwards
By iterating backwards over the globs we can exit the loop as soon as we find a match. While we're here: - Regex doesn't need to be mutable. - We can reserve the amount of Globs needed ahead of time. - Using a SmallVector with size 0 is slightly more space efficient than a std::vector. Reviewed By: aaron.ballman Differential Revision: https://reviews.llvm.org/D91033
This commit is contained in:
parent
c50faf5c9d
commit
e076fee63d
|
@ -34,7 +34,7 @@ static llvm::Regex ConsumeGlob(StringRef &GlobList) {
|
|||
for (char C : Glob) {
|
||||
if (C == '*')
|
||||
RegexText.push_back('.');
|
||||
else if (MetaChars.find(C) != StringRef::npos)
|
||||
else if (MetaChars.contains(C))
|
||||
RegexText.push_back('\\');
|
||||
RegexText.push_back(C);
|
||||
}
|
||||
|
@ -43,6 +43,7 @@ static llvm::Regex ConsumeGlob(StringRef &GlobList) {
|
|||
}
|
||||
|
||||
GlobList::GlobList(StringRef Globs) {
|
||||
Items.reserve(Globs.count(',') + 1);
|
||||
do {
|
||||
GlobListItem Item;
|
||||
Item.IsPositive = !ConsumeNegativeIndicator(Globs);
|
||||
|
@ -52,10 +53,11 @@ GlobList::GlobList(StringRef Globs) {
|
|||
}
|
||||
|
||||
bool GlobList::contains(StringRef S) {
|
||||
bool Contains = false;
|
||||
for (const GlobListItem &Item : Items) {
|
||||
// Iterating the container backwards as the last match determins if S is in
|
||||
// the list.
|
||||
for (const GlobListItem &Item : llvm::reverse(Items)) {
|
||||
if (Item.Regex.match(S))
|
||||
Contains = Item.IsPositive;
|
||||
return Item.IsPositive;
|
||||
}
|
||||
return Contains;
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -10,9 +10,9 @@
|
|||
#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_GLOBLIST_H
|
||||
|
||||
#include "clang/Basic/LLVM.h"
|
||||
#include "llvm/ADT/SmallVector.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/Support/Regex.h"
|
||||
#include <vector>
|
||||
|
||||
namespace clang {
|
||||
namespace tidy {
|
||||
|
@ -39,9 +39,9 @@ private:
|
|||
|
||||
struct GlobListItem {
|
||||
bool IsPositive;
|
||||
mutable llvm::Regex Regex;
|
||||
llvm::Regex Regex;
|
||||
};
|
||||
std::vector<GlobListItem> Items;
|
||||
SmallVector<GlobListItem, 0> Items;
|
||||
};
|
||||
|
||||
} // end namespace tidy
|
||||
|
|
Loading…
Reference in New Issue