23 void SmallPtrSetImpl::shrink_and_clear() {
24 assert(!isSmall() &&
"Can't shrink a small set!");
33 assert(
CurArray &&
"Failed to allocate memory?");
63 const void **Bucket =
const_cast<const void**
>(FindBucketFor(Ptr));
64 if (*Bucket == Ptr)
return false;
91 void **Bucket =
const_cast<void**
>(FindBucketFor(Ptr));
92 if (*Bucket != Ptr)
return false;
101 const void *
const *SmallPtrSetImpl::FindBucketFor(
const void *Ptr)
const {
104 unsigned ProbeAmt = 1;
105 const void *
const *Array =
CurArray;
106 const void *
const *Tombstone = 0;
109 if (Array[Bucket] == Ptr)
116 return Tombstone ? Tombstone : Array+Bucket;
121 Tombstone = Array+Bucket;
124 Bucket = (Bucket + ProbeAmt++) & (ArraySize-1);
130 void SmallPtrSetImpl::Grow(
unsigned NewSize) {
135 bool WasSmall = isSmall();
139 assert(
CurArray &&
"Failed to allocate memory?");
146 for (
const void **BucketPtr = OldBuckets, **E = OldBuckets+NumElements;
147 BucketPtr != E; ++BucketPtr) {
148 const void *Elt = *BucketPtr;
149 *
const_cast<void**
>(FindBucketFor(Elt)) = const_cast<void*>(Elt);
153 for (
const void **BucketPtr = OldBuckets, **E = OldBuckets+OldSize;
154 BucketPtr != E; ++BucketPtr) {
156 const void *Elt = *BucketPtr;
158 *const_cast<void**>(FindBucketFor(Elt)) = const_cast<void*>(Elt);
171 if (that.isSmall()) {
176 assert(
CurArray &&
"Failed to allocate memory?");
192 if (isSmall() && RHS.isSmall())
194 "Cannot assign sets with different small sizes");
212 assert(
CurArray &&
"Failed to allocate memory?");
226 if (
this == &RHS)
return;
229 if (!this->isSmall() && !RHS.isSmall()) {
241 if (!this->isSmall() && RHS.isSmall()) {
255 if (this->isSmall() && !RHS.isSmall()) {
268 assert(this->isSmall() && RHS.isSmall());
const void ** SmallArray
SmallArray - Points to a fixed size set of buckets, used in 'small mode'.
unsigned Log2_32_Ceil(uint32_t Value)
SmallPtrSetImpl(const void **SmallStorage, const SmallPtrSetImpl &that)
static void * getEmptyMarker()
bool insert_imp(const void *Ptr)
void CopyFrom(const SmallPtrSetImpl &RHS)
void *realloc(void *ptr, size_t size);
bool erase_imp(const void *Ptr)
void swap(llvm::BitVector &LHS, llvm::BitVector &RHS)
Implement std::swap in terms of BitVector swap.
void swap(SmallPtrSetImpl &RHS)
void *malloc(size_t size);
unsigned CurArraySize
CurArraySize - The allocated size of CurArray, always a power of two.
static void * getTombstoneMarker()