-
Notifications
You must be signed in to change notification settings - Fork 14.7k
[ADT] Use range-based for loops in SmallPtrSet.h (NFC) #152821
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[ADT] Use range-based for loops in SmallPtrSet.h (NFC) #152821
Conversation
This patch defines a couple of helper functions so that we can convert four loops to range-based for loops.
@llvm/pr-subscribers-llvm-adt Author: Kazu Hirata (kazutakahirata) ChangesThis patch defines a couple of helper functions so that we can convert Full diff: https://github.com/llvm/llvm-project/pull/152821.diff 1 Files Affected:
diff --git a/llvm/include/llvm/ADT/SmallPtrSet.h b/llvm/include/llvm/ADT/SmallPtrSet.h
index d49ef1d4fbc57..7f9b781513420 100644
--- a/llvm/include/llvm/ADT/SmallPtrSet.h
+++ b/llvm/include/llvm/ADT/SmallPtrSet.h
@@ -18,6 +18,7 @@
#include "llvm/ADT/ADL.h"
#include "llvm/ADT/EpochTracker.h"
#include "llvm/ADT/STLForwardCompat.h"
+#include "llvm/ADT/iterator_range.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/MathExtras.h"
#include "llvm/Support/ReverseIteration.h"
@@ -147,17 +148,23 @@ class SmallPtrSetImplBase : public DebugEpochBase {
return isSmall() ? CurArray + NumNonEmpty : CurArray + CurArraySize;
}
+ iterator_range<const void **> smallBuckets() {
+ return make_range(CurArray, CurArray + NumNonEmpty);
+ }
+
+ iterator_range<const void *const *> smallBuckets() const {
+ return {CurArray, CurArray + NumNonEmpty};
+ }
+
/// insert_imp - This returns true if the pointer was new to the set, false if
/// it was already in the set. This is hidden from the client so that the
/// derived class can check that the right type of pointer is passed in.
std::pair<const void *const *, bool> insert_imp(const void *Ptr) {
if (isSmall()) {
// Check to see if it is already in the set.
- for (const void **APtr = CurArray, **E = CurArray + NumNonEmpty;
- APtr != E; ++APtr) {
- const void *Value = *APtr;
- if (Value == Ptr)
- return std::make_pair(APtr, false);
+ for (const void *&Bucket : smallBuckets()) {
+ if (Bucket == Ptr)
+ return std::make_pair(&Bucket, false);
}
// Nope, there isn't. If we stay small, just 'pushback' now.
@@ -177,10 +184,9 @@ class SmallPtrSetImplBase : public DebugEpochBase {
/// in.
bool erase_imp(const void * Ptr) {
if (isSmall()) {
- for (const void **APtr = CurArray, **E = CurArray + NumNonEmpty;
- APtr != E; ++APtr) {
- if (*APtr == Ptr) {
- *APtr = CurArray[--NumNonEmpty];
+ for (const void *&Bucket : smallBuckets()) {
+ if (Bucket == Ptr) {
+ Bucket = CurArray[--NumNonEmpty];
incrementEpoch();
return true;
}
@@ -206,11 +212,9 @@ class SmallPtrSetImplBase : public DebugEpochBase {
const void *const * find_imp(const void * Ptr) const {
if (isSmall()) {
// Linear search for the item.
- for (const void *const *APtr = CurArray, *const *E =
- CurArray + NumNonEmpty;
- APtr != E; ++APtr)
- if (*APtr == Ptr)
- return APtr;
+ for (const void *const &Bucket : smallBuckets())
+ if (Bucket == Ptr)
+ return &Bucket;
return EndPointer();
}
@@ -223,10 +227,8 @@ class SmallPtrSetImplBase : public DebugEpochBase {
bool contains_imp(const void *Ptr) const {
if (isSmall()) {
// Linear search for the item.
- const void *const *APtr = CurArray;
- const void *const *E = CurArray + NumNonEmpty;
- for (; APtr != E; ++APtr)
- if (*APtr == Ptr)
+ for (const void *const &Bucket : smallBuckets())
+ if (Bucket == Ptr)
return true;
return false;
}
|
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/18/builds/20249 Here is the relevant piece of the build log for the reference
|
This patch defines a couple of helper functions so that we can convert
four loops to range-based for loops.