mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-19 00:41:43 +00:00
267 lines
10 KiB
Diff
267 lines
10 KiB
Diff
From 29e7b322eab2284b434cc270bb36ade7c8a62755 Mon Sep 17 00:00:00 2001
|
|
From: PJ Reiniger <pj.reiniger@gmail.com>
|
|
Date: Sat, 7 May 2022 23:02:07 -0400
|
|
Subject: [PATCH 10/31] Remove reverse iterator
|
|
|
|
---
|
|
llvm/include/llvm/ADT/DenseMap.h | 74 ++++-------------------------
|
|
llvm/include/llvm/ADT/SmallPtrSet.h | 21 +-------
|
|
2 files changed, 11 insertions(+), 84 deletions(-)
|
|
|
|
diff --git a/llvm/include/llvm/ADT/DenseMap.h b/llvm/include/llvm/ADT/DenseMap.h
|
|
index 588c39faea2f..5e5c020adf0b 100644
|
|
--- a/llvm/include/llvm/ADT/DenseMap.h
|
|
+++ b/llvm/include/llvm/ADT/DenseMap.h
|
|
@@ -76,8 +76,6 @@ public:
|
|
// empty buckets.
|
|
if (empty())
|
|
return end();
|
|
- if (shouldReverseIterate<KeyT>())
|
|
- return makeIterator(getBucketsEnd() - 1, getBuckets(), *this);
|
|
return makeIterator(getBuckets(), getBucketsEnd(), *this);
|
|
}
|
|
inline iterator end() {
|
|
@@ -86,8 +84,6 @@ public:
|
|
inline const_iterator begin() const {
|
|
if (empty())
|
|
return end();
|
|
- if (shouldReverseIterate<KeyT>())
|
|
- return makeConstIterator(getBucketsEnd() - 1, getBuckets(), *this);
|
|
return makeConstIterator(getBuckets(), getBucketsEnd(), *this);
|
|
}
|
|
inline const_iterator end() const {
|
|
@@ -150,18 +146,14 @@ public:
|
|
iterator find(const_arg_type_t<KeyT> Val) {
|
|
BucketT *TheBucket;
|
|
if (LookupBucketFor(Val, TheBucket))
|
|
- return makeIterator(TheBucket,
|
|
- shouldReverseIterate<KeyT>() ? getBuckets()
|
|
- : getBucketsEnd(),
|
|
+ return makeIterator(TheBucket, getBucketsEnd(),
|
|
*this, true);
|
|
return end();
|
|
}
|
|
const_iterator find(const_arg_type_t<KeyT> Val) const {
|
|
const BucketT *TheBucket;
|
|
if (LookupBucketFor(Val, TheBucket))
|
|
- return makeConstIterator(TheBucket,
|
|
- shouldReverseIterate<KeyT>() ? getBuckets()
|
|
- : getBucketsEnd(),
|
|
+ return makeConstIterator(TheBucket, getBucketsEnd(),
|
|
*this, true);
|
|
return end();
|
|
}
|
|
@@ -175,9 +167,7 @@ public:
|
|
iterator find_as(const LookupKeyT &Val) {
|
|
BucketT *TheBucket;
|
|
if (LookupBucketFor(Val, TheBucket))
|
|
- return makeIterator(TheBucket,
|
|
- shouldReverseIterate<KeyT>() ? getBuckets()
|
|
- : getBucketsEnd(),
|
|
+ return makeIterator(TheBucket, getBucketsEnd(),
|
|
*this, true);
|
|
return end();
|
|
}
|
|
@@ -185,9 +175,7 @@ public:
|
|
const_iterator find_as(const LookupKeyT &Val) const {
|
|
const BucketT *TheBucket;
|
|
if (LookupBucketFor(Val, TheBucket))
|
|
- return makeConstIterator(TheBucket,
|
|
- shouldReverseIterate<KeyT>() ? getBuckets()
|
|
- : getBucketsEnd(),
|
|
+ return makeConstIterator(TheBucket, getBucketsEnd(),
|
|
*this, true);
|
|
return end();
|
|
}
|
|
@@ -222,20 +210,14 @@ public:
|
|
std::pair<iterator, bool> try_emplace(KeyT &&Key, Ts &&... Args) {
|
|
BucketT *TheBucket;
|
|
if (LookupBucketFor(Key, TheBucket))
|
|
- return std::make_pair(makeIterator(TheBucket,
|
|
- shouldReverseIterate<KeyT>()
|
|
- ? getBuckets()
|
|
- : getBucketsEnd(),
|
|
+ return std::make_pair(makeIterator(TheBucket, getBucketsEnd(),
|
|
*this, true),
|
|
false); // Already in map.
|
|
|
|
// Otherwise, insert the new element.
|
|
TheBucket =
|
|
InsertIntoBucket(TheBucket, std::move(Key), std::forward<Ts>(Args)...);
|
|
- return std::make_pair(makeIterator(TheBucket,
|
|
- shouldReverseIterate<KeyT>()
|
|
- ? getBuckets()
|
|
- : getBucketsEnd(),
|
|
+ return std::make_pair(makeIterator(TheBucket, getBucketsEnd(),
|
|
*this, true),
|
|
true);
|
|
}
|
|
@@ -247,19 +229,13 @@ public:
|
|
std::pair<iterator, bool> try_emplace(const KeyT &Key, Ts &&... Args) {
|
|
BucketT *TheBucket;
|
|
if (LookupBucketFor(Key, TheBucket))
|
|
- return std::make_pair(makeIterator(TheBucket,
|
|
- shouldReverseIterate<KeyT>()
|
|
- ? getBuckets()
|
|
- : getBucketsEnd(),
|
|
+ return std::make_pair(makeIterator(TheBucket, getBucketsEnd(),
|
|
*this, true),
|
|
false); // Already in map.
|
|
|
|
// Otherwise, insert the new element.
|
|
TheBucket = InsertIntoBucket(TheBucket, Key, std::forward<Ts>(Args)...);
|
|
- return std::make_pair(makeIterator(TheBucket,
|
|
- shouldReverseIterate<KeyT>()
|
|
- ? getBuckets()
|
|
- : getBucketsEnd(),
|
|
+ return std::make_pair(makeIterator(TheBucket, getBucketsEnd(),
|
|
*this, true),
|
|
true);
|
|
}
|
|
@@ -274,20 +250,14 @@ public:
|
|
const LookupKeyT &Val) {
|
|
BucketT *TheBucket;
|
|
if (LookupBucketFor(Val, TheBucket))
|
|
- return std::make_pair(makeIterator(TheBucket,
|
|
- shouldReverseIterate<KeyT>()
|
|
- ? getBuckets()
|
|
- : getBucketsEnd(),
|
|
+ return std::make_pair(makeIterator(TheBucket, getBucketsEnd(),
|
|
*this, true),
|
|
false); // Already in map.
|
|
|
|
// Otherwise, insert the new element.
|
|
TheBucket = InsertIntoBucketWithLookup(TheBucket, std::move(KV.first),
|
|
std::move(KV.second), Val);
|
|
- return std::make_pair(makeIterator(TheBucket,
|
|
- shouldReverseIterate<KeyT>()
|
|
- ? getBuckets()
|
|
- : getBucketsEnd(),
|
|
+ return std::make_pair(makeIterator(TheBucket, getBucketsEnd(),
|
|
*this, true),
|
|
true);
|
|
}
|
|
@@ -464,20 +434,12 @@ private:
|
|
iterator makeIterator(BucketT *P, BucketT *E,
|
|
DebugEpochBase &Epoch,
|
|
bool NoAdvance=false) {
|
|
- if (shouldReverseIterate<KeyT>()) {
|
|
- BucketT *B = P == getBucketsEnd() ? getBuckets() : P + 1;
|
|
- return iterator(B, E, Epoch, NoAdvance);
|
|
- }
|
|
return iterator(P, E, Epoch, NoAdvance);
|
|
}
|
|
|
|
const_iterator makeConstIterator(const BucketT *P, const BucketT *E,
|
|
const DebugEpochBase &Epoch,
|
|
const bool NoAdvance=false) const {
|
|
- if (shouldReverseIterate<KeyT>()) {
|
|
- const BucketT *B = P == getBucketsEnd() ? getBuckets() : P + 1;
|
|
- return const_iterator(B, E, Epoch, NoAdvance);
|
|
- }
|
|
return const_iterator(P, E, Epoch, NoAdvance);
|
|
}
|
|
|
|
@@ -1214,10 +1176,6 @@ public:
|
|
assert(isHandleInSync() && "invalid construction!");
|
|
|
|
if (NoAdvance) return;
|
|
- if (shouldReverseIterate<KeyT>()) {
|
|
- RetreatPastEmptyBuckets();
|
|
- return;
|
|
- }
|
|
AdvancePastEmptyBuckets();
|
|
}
|
|
|
|
@@ -1232,16 +1190,10 @@ public:
|
|
|
|
reference operator*() const {
|
|
assert(isHandleInSync() && "invalid iterator access!");
|
|
- assert(Ptr != End && "dereferencing end() iterator");
|
|
- if (shouldReverseIterate<KeyT>())
|
|
- return Ptr[-1];
|
|
return *Ptr;
|
|
}
|
|
pointer operator->() const {
|
|
assert(isHandleInSync() && "invalid iterator access!");
|
|
- assert(Ptr != End && "dereferencing end() iterator");
|
|
- if (shouldReverseIterate<KeyT>())
|
|
- return &(Ptr[-1]);
|
|
return Ptr;
|
|
}
|
|
|
|
@@ -1261,12 +1213,6 @@ public:
|
|
|
|
inline DenseMapIterator& operator++() { // Preincrement
|
|
assert(isHandleInSync() && "invalid iterator access!");
|
|
- assert(Ptr != End && "incrementing end() iterator");
|
|
- if (shouldReverseIterate<KeyT>()) {
|
|
- --Ptr;
|
|
- RetreatPastEmptyBuckets();
|
|
- return *this;
|
|
- }
|
|
++Ptr;
|
|
AdvancePastEmptyBuckets();
|
|
return *this;
|
|
diff --git a/llvm/include/llvm/ADT/SmallPtrSet.h b/llvm/include/llvm/ADT/SmallPtrSet.h
|
|
index 981b741669b0..e46a5171e301 100644
|
|
--- a/llvm/include/llvm/ADT/SmallPtrSet.h
|
|
+++ b/llvm/include/llvm/ADT/SmallPtrSet.h
|
|
@@ -226,10 +226,6 @@ protected:
|
|
public:
|
|
explicit SmallPtrSetIteratorImpl(const void *const *BP, const void*const *E)
|
|
: Bucket(BP), End(E) {
|
|
- if (shouldReverseIterate()) {
|
|
- RetreatIfNotValid();
|
|
- return;
|
|
- }
|
|
AdvanceIfNotValid();
|
|
}
|
|
|
|
@@ -281,22 +277,11 @@ public:
|
|
// Most methods are provided by the base class.
|
|
|
|
const PtrTy operator*() const {
|
|
- assert(isHandleInSync() && "invalid iterator access!");
|
|
- if (shouldReverseIterate()) {
|
|
- assert(Bucket > End);
|
|
- return PtrTraits::getFromVoidPointer(const_cast<void *>(Bucket[-1]));
|
|
- }
|
|
assert(Bucket < End);
|
|
return PtrTraits::getFromVoidPointer(const_cast<void*>(*Bucket));
|
|
}
|
|
|
|
inline SmallPtrSetIterator& operator++() { // Preincrement
|
|
- assert(isHandleInSync() && "invalid iterator access!");
|
|
- if (shouldReverseIterate()) {
|
|
- --Bucket;
|
|
- RetreatIfNotValid();
|
|
- return *this;
|
|
- }
|
|
++Bucket;
|
|
AdvanceIfNotValid();
|
|
return *this;
|
|
@@ -400,8 +385,6 @@ public:
|
|
}
|
|
|
|
iterator begin() const {
|
|
- if (shouldReverseIterate())
|
|
- return makeIterator(EndPointer() - 1);
|
|
return makeIterator(CurArray);
|
|
}
|
|
iterator end() const { return makeIterator(EndPointer()); }
|
|
@@ -409,9 +392,7 @@ public:
|
|
private:
|
|
/// Create an iterator that dereferences to same place as the given pointer.
|
|
iterator makeIterator(const void *const *P) const {
|
|
- if (shouldReverseIterate())
|
|
- return iterator(P == EndPointer() ? CurArray : P + 1, CurArray, *this);
|
|
- return iterator(P, EndPointer(), *this);
|
|
+ return iterator(P, EndPointer());
|
|
}
|
|
};
|
|
|
|
--
|
|
2.20.1.windows.1
|
|
|